Назад | Перейти на главную страницу

OpenSSL возвращает сертификат SSL, отличный от того, который показывает Chrome.

При запросе URL-адреса CDN Sparkfun с использованием OpenSSL с помощью следующей команды:

openssl s_client -showcerts -connect dlnmh9ip6v2uc.cloudfront.net:443

Общее имя, возвращаемое в сертификате: *.sparkfun.com, который не удается проверить, но если вы загружаете хост в Chrome, отображается общее имя *.cloudfront.net

Что здесь происходит?

Это вызывает проблему, потому что среда, в которой я нахожусь в прокси, использует SSL через Squid SSL_Bump, который генерирует сертификат, подписанный моим локально доверенным центром сертификации для домена. Это работает для всех доменов, кроме указанных выше, поскольку CN не совпадает, так как новый сертификат создается с использованием OpenSSL.

РЕДАКТИРОВАТЬ - Я подтвердил, что то же самое происходит с OpenSSL на сервере в удаленном центре обработки данных, который имеет прямое подключение к Интернету без использования прокси или фильтрации.

РЕДАКТИРОВАТЬ - Проблема связана с SNI, как принято, но для заполнения информации о том, почему он вызывает проблему с Squid и SSL_Bump:

Этот проект не будет поддерживать пересылку информации SSL Server Name Indication (SNI) на исходный сервер и сделает такую ​​поддержку немного более сложной. Однако пересылка SNI имеет свои собственные серьезные проблемы (выходящие за рамки этого документа), которые намного перевешивают дополнительные трудности пересылки.

Взято из: http://wiki.squid-cache.org/Features/BumpSslServerFirst

CloudFront использует SNI, способ использования нескольких сертификатов на одном IP. Все современные браузеры поддерживают это, как и команда s_client openssl, но s_client не делает этого волшебным образом. Вы должны сказать ему, чтобы использовать его:

openssl s_client -servername dlnmh9ip6v2uc.cloudfront.net  -connect dlnmh9ip6v2uc.cloudfront.net:443 -showcerts

Chrome поддерживает SNI, сообщая серверу, какой сертификат отправить. В s_client команда не работает.

Более подробная информация об использовании SNI в CloudFront Вот.

Когда вы используете SNI Custom SSL, некоторые пользователи могут не иметь доступа к вашему контенту, потому что некоторые старые браузеры не поддерживают SNI и не смогут установить соединение с CloudFront для загрузки HTTPS-версии вашего контента. Для получения дополнительной информации о SNI, включая список поддерживаемых браузеров, посетите наш Вопросы-Ответы страница.

и:

SNI Custom SSL основывается на расширении SNI протокола Transport Layer Security, которое позволяет нескольким доменам обслуживать трафик SSL по одному и тому же IP-адресу, включая средства просмотра имен хостов, к которым пытаются подключиться. Как и в случае с настраиваемым SSL для выделенного IP-адреса, CloudFront доставляет контент из каждого пограничного местоположения Amazon CloudFront с той же безопасностью, что и функция настраиваемого SSL для выделенного IP-адреса. SNI Custom SSL работает с большинством современных браузеров, включая Chrome версии 6 и новее (работает в Windows XP и новее или OS X 10.5.7 и новее), Safari версии 3 и новее (работает в Windows Vista и новее или Mac OS X 10.5. 6. и новее), Firefox 2.0 и новее, и Internet Explorer 7 и новее (работает в Windows Vista и новее). Старые браузеры, не поддерживающие SNI, не могут установить соединение с CloudFront для загрузки HTTPS-версии вашего контента. Пользовательский SSL SNI доступен без дополнительных затрат, помимо стандартной платы за передачу данных CloudFront и плату за запросы.