В настоящее время я реализую инфраструктуру TrustKit в своем приложении для iOS, чтобы включить закрепление SPKI для соединений SSL. Я натыкаюсь на «резервный пин-код», который является обязательным для правильной конфигурации TrustKit. К сожалению, в документации по API только указано, что необходим резервный пин-код, но не сказано, каким он должен быть. Цепочка доверия выглядит так:
GeoTrust Global CA
| GeoTrust SSL CA - G3
| myServer.com
Поэтому я закрепляю хэш SPKI для сертификата myServer.com в качестве основного вывода. Какой у меня резервный пин-код?
К сожалению, я не нашел много информации по этой теме. Один из немногих ресурсов, которые я нашел, — это эта статья Хьюберта Ле Ван Гонга из PayPal. Он говорит о запасных булавках:
«Независимо от количества значений булавки, резервный пин-код абсолютно необходим. Обратите внимание, что наличие резервного пин-кода является обязательным в HPKP (т. е. для веб-кейса), но не менее важно в мобильном приложении. В обоих случаях пара ключей, соответствующая резервному пин-коду, должна оставаться в автономном режиме до тех пор, пока не возникнет проблема с основным пин-кодом/ключом."
Я особенно не понимаю часть с «следует оставаться в автономном режиме».
По поводу вопроса что прикалывать:
Сертификат корневого ЦС, вероятно, лучше всего. Поэтому при закреплении нескольких значений (например, 2) промежуточный ЦС — корневой ЦС, на мой взгляд, является разумным подходом. Тем не менее, вполне нормально закрепить только один сертификат, если этот сертификат является корневым ЦС.
Из этого я понимаю, что мой резервный контакт может быть корневым ЦС (точнее, это хэш SPKI). Однако мне интересно, как промежуточный или даже корневой ЦС может быть хорошим выводом. Насколько я понимаю, это подтвердит закрепление для каждого сертификата, который имеет этот промежуточный/корневой ЦС в своей цепочке.
Что я здесь не так?