Подтвердить что ты не робот

Проблема с проверкой цепи сертификатов SSL

Мое приложение использует 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, не всегда будут поставлять с копией каждого отдельного сертификата, который ему когда-либо понадобится. Всегда будут новые центры сертификации, и необходимо использовать защиту корневого сертификата, чтобы убедиться, что все промежуточные ЦС действительны. Правильно? Так, как это работает? Неужели это так глупо, как кажется?

4b9b3361

Ответ 1

Промежуточные сертификаты должны быть установлены на ваших веб-серверах, а также сертификаты для вашего собственного домена. У меня была такая же проблема на прошлой неделе... Firefox кажется более придирчивым, чем остальные браузеры об этом.

Ответ 2

Вот правильный способ проверки сертификата, поступающего с веб-сервера

  • Клиент поддерживает список доверенных сертификатов CA ROOT
  • Веб-серверы должны вернуть следующий сертификат сервера - обязательно
  • Промежуточный сертификат - Обязательный сертификат ROOT CA - Не требуется/Дополнительно

Когда клиент подключается к серверу, он получает серверный сертификат и промежуточные сертификаты с сервера. Затем клиент создает цепочку доверия из сертификата сервера через промежуточный сертификат (сертификаты) в один из сертификатов CA ROOT, которым он доверяет. Сертификаты ROOT всегда самоподписываются - так что цепочка останавливается.

Вот простая команда для проверки сертификата веб-сервера с помощью openssl

openssl s_client -CAfile <root ca file> -quiet -showcerts -connect IP:PORT

В случае виртуального хостинга, где несколько сертификатов обслуживаются на одном IP: PORT, можно указывать имя сервера (SNI) с помощью -servername <FQDN>. В противном случае будет отправлен сертификат по умолчанию.