Проблемы с пониманием проверки цепочки сертификатов SSL - PullRequest
35 голосов
/ 21 сентября 2009

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

Ответы [ 2 ]

17 голосов
/ 21 сентября 2009

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

7 голосов
/ 04 сентября 2012

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

  • Клиент поддерживает список доверенных сертификатов 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>. В противном случае будет отправлен сертификат по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...