Сбой рукопожатия SSL с сертификатом цепочки Verisign, который содержит два подписанных сертификата CA и один самоподписанный сертификат - PullRequest
38 голосов
/ 05 ноября 2010

Я застрял с проблемой и пытаюсь ее отладить. Мы приобрели сертификат Verisign. Когда мы используем:

openssl> s_client -connect myweb.com:443 -showcerts

SSL Handshake никогда не завершается, и в конце мы видим ошибку:

Verify return code: 19 (self signed certificate in certificate chain)

Показывает 3 ---BEGIN/END CERTIFICATE--- тегов. Два сертификата в цепочке подписаны Verisign, но один самозаверяющий.

  1. Если кто-нибудь может объяснить, как этот самозаверяющий сертификат отображается в подписанном СА сертификате?

  2. Является ли эта ошибка 19 (self signed certificate in certificate chain) доброкачественной? Если нет, что может быть причиной?

  3. У клиента есть сертификат CA в доверенном хранилище, но для самозаверяющего сертификата ничего нет. Как вы думаете, это может вызвать проблемы? Если да, то как мне:

    1. Как мне избавиться от самоподписанного сертификата из сертификата цепочки, оставив в цепочке только 2 сертификата, подписанных СА?
    2. Добавить этот самозаверяющий сертификат в доверенное хранилище клиента?

Ответы [ 5 ]

72 голосов
/ 05 ноября 2010

Корневые сертификаты, выданные ЦС, являются просто самозаверяющими сертификатами (которые, в свою очередь, могут использоваться для выдачи промежуточных сертификатов ЦС).В них нет ничего особенного, за исключением того, что их удалось импортировать по умолчанию во многие браузеры или якоря доверия ОС.

Хотя браузеры и некоторые инструменты настроены для поиска сертификатов доверенного ЦС (некоторые изкоторый может быть самоподписанным) в местоположении по умолчанию, насколько я знаю, команда openssl не является.

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

openssl s_client -connect myweb.com:443 -showcerts не имеет каких-либо конкретныхпричина доверять корневому сертификату CA Verisign, и поскольку он самоподписан, вы получите « самоподписанный сертификат в цепочке сертификатов ».

Если в вашей системе есть расположение с пакетом сертификатовпо умолчанию доверенный (я думаю /etc/pki/tls/certs в RedHat / Fedora и /etc/ssl/certs в Ubuntu / Debian), вы можете настроить OpenSSL для использования их в качестве доверияякоря, например, такие:

openssl s_client -connect myweb.com:443 -showcerts -CApath /etc/ssl/certs
8 голосов
/ 05 ноября 2010

Похоже, промежуточный сертификат отсутствует. По состоянию на апрель 2006 года все сертификаты SSL, выданные VeriSign, требуют установки промежуточного сертификата CA.

Возможно, на вашем сервере не загружена вся цепочка сертификатов.Некоторые предприятия не позволяют своим компьютерам загружать дополнительные сертификаты, что приводит к невозможности завершения SSL-квитирования.

Вот некоторая информация о промежуточных цепях:
https://knowledge.verisign.com/support/ssl-certificates-support/index?page=content&id=AR657
https://knowledge.verisign.com/support/ssl-certificates-support/index?page=content&id=AD146

Промежуточные сертификаты CA

4 голосов
/ 03 июля 2013

О сервере может доставлять клиентам корневой сертификат или нет, извлеченный из RFC-5246 «Протокол TLS) версии 1.2», в котором говорится:

certificate_list
Это последовательность (цепочка) сертификатов. Отправителя Сертификат ДОЛЖЕН быть первым в списке. Каждый следующий Сертификат ДОЛЖЕН непосредственно удостоверять тот, который ему предшествует. Так как проверка сертификата требует распространения корневых ключей независимо, самоподписанный сертификат, который определяет корень центр сертификации МОЖЕТ быть исключен из цепочки под
Предположение, что удаленный конец уже должен обладать им, чтобы подтвердите это в любом случае.

О термине «МАЙ», взятом из RFC-2119 «Лучшая текущая практика», говорится:

5.MAY
Это слово, или прилагательное «ДОПОЛНИТЕЛЬНО», означает, что предмет действительно необязателен. Один продавец может включить товар, потому что
конкретный рынок требует этого или потому что продавец чувствует, что
это улучшает продукт, в то время как другой поставщик может опустить тот же элемент.
Реализация, которая не включает конкретную опцию, ДОЛЖНА быть
готовы взаимодействовать с другой реализацией, которая делает
включить опцию, хотя, возможно, с ограниченной функциональностью. в В том же духе реализация, которая включает в себя конкретную опцию
ДОЛЖЕН быть готов взаимодействовать с другой реализацией, которая
не включает эту опцию (за исключением, конечно, функции
опция обеспечивает.)

В заключение, корень может быть на пути сертификации, предоставленном сервером в рукопожатии.

Практическое использование.
Подумайте не о пользователях навигатора, а об инструменте передачи на сервере в военизированной зоне с ограниченным доступом в Интернет.
Сервер, играющий роль клиента при передаче, получает от сервера все пути сертификатов.
Все сертификаты в цепочке должны быть проверены, чтобы быть доверенными, включая root.
Единственный способ проверить это - включить корневой каталог в путь сертификатов во время передачи, сопоставив его с ранее объявленной «доверенной» локальной копией.

3 голосов
/ 16 марта 2012

Вот ссылка на проверку установки SSL-сертификата VeriSign: https://knowledge.verisign.com/support/ssl-certificates-support/index?page=content&id=AR1130

Введите свой URL, нажмите «Тестировать этот веб-сервер», и он сообщит вам, есть ли проблемы с вашим промежуточным центром сертификации.

1 голос
/ 11 октября 2012

Когда вы видите «Verify return code: 19 (self signed certificate in certificate chain)», то либо серверы действительно пытаются использовать самозаверяющий сертификат (который клиент никогда не сможет проверить), либо OpenSSL не имеет доступа к необходимый root, но сервер пытается предоставить его сам (что не следует делать, потому что это бессмысленно - клиент никогда не может доверять серверу, предоставившему root, соответствующий собственному сертификату сервера).

Опять же, добавление -showcerts поможет вам определить, какие именно.

...