Мое приложение использует SSL для безопасной связи с сервером, и у него возникают проблемы при проверке цепочки сертификатов. Цепочка выглядит так:
Центр сертификации безопасного сервера Entrust.net -> DigiCert Global CA -> * .ourdomain.com
Мы используем хранилище сертификатов, извлеченное из Mozilla. Он содержит сертификат Entrust.net, но не сертификат DigiCert Global CA.
Насколько я понимаю, промежуточному органу не нужно доверять, пока существует корневой орган, но проверка не пройдена:
% openssl verify -CAfile mozilla-root-certs.crt ourdomain.com.crt
error 20 at 0 depth lookup:unable to get local issuer certificate
Так что мне нужно явно доверять DigiCert Global CA для проверки? Это кажется неправильным. Но ты мне скажи!
РЕДАКТИРОВАТЬ : Теперь я понимаю, что файл сертификата должен быть доступен OpenSSL заранее. Примерно так работает:
% openssl verify -CAfile mozilla-root-certs.crt -untrusted digicert.crt ourdomain.com.crt
ourdomain.com.crt: OK
Это позволяет мне предоставить копию DigiCert CA без явного указания «Я доверяю», вся цепочка еще нуждается в проверке.
Но, конечно, такие браузеры, как Firefox, не всегда будут поставляться с копией каждого сертификата, который ему когда-либо понадобится. Всегда будут новые CA, и смысл в том, чтобы использовать безопасность корневого сертификата, чтобы убедиться, что все промежуточные CA действительны. Правильно? Так как же работает ? Неужели это так глупо, как выглядит?