
У меня есть клиент/серверное приложение SSL. У
моего клиента SSL в хранилище доверенных сертификатов настроен только один корневой центр сертификации (назовем его rootCA1).
Однако мой сервер ssl создает сертификат, подписанный промежуточным центром сертификации (назовем его interCA1).
У промежуточного центра сертификации есть свой сертификат (назовем его deviceCert), подписанный rootCA1 (которому доверяет клиент). Сервер SSL создает сертификаты interCA1, а также rootCA1 вместе с deviceCert во время ssl hello.
Теперь openssl отклоняет такое соединение на стороне клиента.
Openssl должен иметь возможность установить цепочку доверия, просматриваяdeviceCert--signed by-->interCA1--signed by-->rootCA1
Так как он доверяет rootCA1 и цепочка доверия видна в моем понимании.
Так почему же это не срабатывает? Почему необходимо, чтобы промежуточные центры сертификации были настроены в хранилище доверия клиента?
решение1
Я думаю, причина настройки сертификатов всех промежуточных CA заключается в следующем.
Давайте ради аргумента предположим, что в цепочке доверия необходимо иметь только сертификат корневого CA.
Тогда клиент может доверять всем сертификатам, подписанным корневым CA, а также любым другим промежуточным CA, чей сертификат подписан корневым CA (или подписан любым другим промежуточным CA, имеющим сертификат, подписанный корневым CA).
Если же по какой-то причине закрытый ключ промежуточного центра сертификации будет скомпрометирован, то это станет проблемой.
Таким образом, настраивая промежуточные центры сертификации в хранилище доверенных сертификатов, клиент заявляет, что доверяет подписанным им сертификатам, и его закрытый ключ не скомпрометирован.
Конечно, есть CRL, но это уже подтема.