Пропуск сертификата или открытого ключа - это просто «белый список» исключенной информации о сертификате соединения, так что вы можете подтвердить, к кому вы подключились, и к чему вы ожидаете подключиться.По сути, он может обнаружить человека в промежуточных ситуациях.
Проверьте из в качестве хорошего общего обзора.
Единственная разница между закреплением сертификата и закреплением открытого ключа заключается в том, какие данные выпроверяете в своем белом списке.Поскольку сертификат содержит открытый ключ, вы можете думать, что сертификат является надмножеством проверяемых данных.То, что вы проверяете, будет определять, насколько строго вы хотите обнаруживать незначительные «изменения» сертификата.
Существует также много способов реализации закрепления, как описано в приведенной выше ссылке.Это просто сводится к тому, что вы решили проверить, и как вы храните его в белом списке.Поскольку вы говорите об Android, в приведенной выше ссылке упоминается рекомендуемый Android способ, так что вы можете рассмотреть это.
Другая реализация, на которую вы можете обратить внимание, - это реализация Mozilla pining , котораяприкрепляет открытый ключ с помощью белого списка хэша sha256 открытого ключа, хранящегося в шестнадцатеричной форме.
Обновление: Как упоминалось @Robert, закрепление сертификата должно выполняться в дополнение к стандартной проверке цепочки сертификатов.Он не должен заменять стандартную проверку цепочки сертификатов, особенно при регистрации на уровне корневого / промежуточного сертификата.
Закрепление корневого или промежуточного закрепления может сделать его менее безопасным, но более устойчивым к изменениям сертификата.Использование этого типа настройки зависит от того, почему вы используете закрепление сертификата, и если вы можете легко обновить белый список клиентов или нет.Это компромиссы в области безопасности, которые вы делаете в зависимости от конкретной ситуации.