Мое приложение использует SSL для безопасного взаимодействия с сервером, и у него возникают проблемы с проверкой цепи сертификатов. Цепочка выглядит так:
Сертифицированный сервер сертификации Entrust.net → DigiCert Global CA → *.ourdomain.com
Мы используем хранилище сертификатов, извлеченное из Mozilla. Он содержит сертификат Entrust.net, но не DigiCert Global CA.
Мое понимание заключается в том, что промежуточному органу не нужно доверять, пока существует root, но проверка не выполняется:
% 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, не всегда будут поставлять с копией каждого отдельного сертификата, который ему когда-либо понадобится. Всегда будут новые центры сертификации, и необходимо использовать защиту корневого сертификата, чтобы убедиться, что все промежуточные ЦС действительны. Правильно? Так, как это работает? Неужели это так глупо, как кажется?