Мое приложение использует SSL для безопасного соединения с сервером, и у него возникают проблемы с проверкой цепочки сертификатов. Цепочка выглядит следующим образом:Неисправность понимания Проверка цепочки сертификатов SSL
Entrust.net Secure Центр сертификации сервера -> 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 в заказ для подтверждения? Это кажется неправильным. Но ты говоришь мне!
EDIT: Теперь я понимаю, что файл сертификата должен быть доступен для OpenSSL спереди. Что-то вроде это работает:
% openssl verify -CAfile mozilla-root-certs.crt -untrusted digicert.crt ourdomain.com.crt
ourdomain.com.crt: OK
Это позволяет мне предоставить копию DigiCert CA без явного говоря: «Я доверяю», вся цепь еще должна быть проверена.
Но, безусловно, браузеры, подобные Firefox, не всегда будут поставляться с копией каждого сертификата, который ему когда-либо понадобится. Там всегда будут новые центры сертификации, и необходимо использовать защиту корневого сертификата, чтобы убедиться, что все промежуточные центры сертификации действительны. Правильно? Так как делает эта работа? Неужели это так глупо, как кажется?
В OpenBSD, '-CAfile' может быть установлен в'/etc/ssl/cert.pem'. –