Очень сложно однозначно сказать, лучше или хуже закрепление, так как оно перекладывает риск на другую сторону.
Закрепление, по сути, лучше защитит вас от потенциального нарушения в любом из ЦС, которому вы доверяете. Если ЦС скомпрометирован и вынужден выдать сертификат для хоста, с которым вы пытаетесь связаться, закрепление защитит вас от этого, потому что вы будете сравнивать с конкретной ссылкой, которую вы закрепили, вместо того, чтобы проходить через ЦС.
Недостатком является то, что это не позволит вам использовать механизмы, имеющиеся в ЦС, для работы со скомпрометированным хостом: отзыв сертификата. Если закрытый ключ хоста скомпрометирован, прохождение механизма проверки PKI должно позволить вам проверить отзыв и получить предупреждение о возникновении такой проблемы. Напротив, вы не сможете узнать это при закреплении, так как вы вообще не проходите через ЦС для проверки сертификата.
Конечно, вы можете комбинировать оба подхода, но это может вызвать дополнительные проблемы (вам потребуется стратегия для работы с противоречивыми результатами в обеих оценках, иначе скомпрометированный ЦС, отзывающий действительный сертификат, может вызвать отказ в обслуживании).
Я не знаю, заменяет ли механизм закрепления AFNetworking проверку PKI или дополняет ее.
В общем, выбор между использованием закрепления или проверки PKI зависит от того, считаете ли вы, что закрытый ключ этого конкретного узла более или менее вероятно будет скомпрометирован, чем центры сертификации, которым вы доверяете.
Другим недостатком закрепления является то, что вам необходимо обновлять приложение (или позволять пользователю «повторно закреплять») каждый раз, когда сертификат сервера (или, по крайней мере, пара ключей, в зависимости от того, что вы закрепили) изменяется на законных основаниях. Вероятно, неплохо время от времени менять ключ.
(Для ясности: я не говорю, что центры сертификации лучше, просто закрепление меняет набор проблем.)
person
Bruno
schedule
06.07.2014