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

OpenSSL: невозможно проверить первый сертификат для URL-адреса Experian

Я пытаюсь проверить SSL-соединение с Experian в Ubuntu 10.10 с клиентом OpenSSL.

openssl s_client -CApath /etc/ssl/certs/ -connect dm1.experian.com:443

Проблема заключается в том, что соединение закрывается кодом подтверждения Verify: 21 (невозможно проверить первый сертификат).

Я проверил список сертификатов, а сертификат, используемый для подписи Experian (VeriSign Class 3 Secure CA CA-G3), включен в список.

/etc/ssl/certs/ca-certificates.crt 

Но я не знаю, почему он не может проверить первый сертификат. Спасибо заранее.

Весь ответ можно увидеть здесь: https://gist.github.com/1248790

4b9b3361

Ответ 1

Первое сообщение об ошибке сообщает вам больше о проблеме:

проверить ошибку: num = 20: невозможно получить сертификат локального эмитента

Выдающий сертификат для сертификата сервера конечной сущности

VeriSign Класс 3 Безопасный сервер CA - G3

Посмотрите внимательно в свой файл CA - вы не найдете этот сертификат, так как он является промежуточным CA - то, что вы нашли, было аналогичным G3 Public Primary CA VeriSign.

Но почему другое соединение преуспевает, но этого нет? Проблема заключается в неправильной конфигурации серверов (смотрите сами, используя опцию -debug). "Хороший" сервер отправляет целую цепочку сертификатов во время рукопожатия, поэтому предоставляет вам необходимые промежуточные сертификаты.

Но сервер, который терпит неудачу, отправляет вам только сертификат конечной сущности, а OpenSSL не может загружать отсутствующий промежуточный сертификат "на лету" (что было бы возможно путем интерпретации расширения доступа к информации о полномочиях). Поэтому ваша попытка не выполняется с помощью s_client, но при этом она будет успешной, если вы перейдете к одному и тому же URL, используя, например, FireFox (который поддерживает функцию обнаружения сертификатов).

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

Ответ 2

Добавление дополнительной информации для ответа на тиснение.

Проще говоря, в цепочке сертификатов есть неправильный сертификат.

Например, ваш центр сертификации, скорее всего, предоставит вам 3 файла.

  • your_domain_name.crt
  • DigiCertCA.crt # (или независимо от имени вашего центра сертификации)
  • TrustedRoot.crt

Скорее всего, вы объединили все эти файлы в один пакет.

-----BEGIN CERTIFICATE----- 
(Your Primary SSL certificate: your_domain_name.crt) 
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
(Your Intermediate certificate: DigiCertCA.crt) 
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
(Your Root certificate: TrustedRoot.crt) 
-----END CERTIFICATE-----

Если вы создаете пакет, но используете старую или неправильную версию вашего промежуточного сертификата (DigiCertCA.crt в моем примере), вы получите точные симптомы, которые вы описываете.

Загрузите все сертификаты из своего центра сертификации и создайте новый пакет.

Ответ 3

Я столкнулся с той же проблемой при установке моего подписанного сертификата на экземпляр Amazon Elastic Load Balancer.

Казалось, что все найдено через браузер (Chrome), но доступ к сайту через мой java-клиент вызвал исключение javax.net.ssl.SSLPeerUnverifiedException

Что я не сделал, так это предоставил файл "цепочки сертификатов" при установке моего сертификата на мой экземпляр ELB (см. https://serverfault.com/questions/419432/install-ssl-on-amazon-elastic-load-balancer-with-godaddy-wildcard-certificate)

Мы только что отправили наш подписанный открытый ключ от подписывающего органа, поэтому мне пришлось создать собственный файл цепочки сертификатов. Используя панель просмотра сертификатов моего браузера, я экспортировал каждый сертификат в цепочку подписей. (Порядок цепочки сертификатов важен, см. https://forums.aws.amazon.com/message.jspa?messageID=222086)

Ответ 4

Если вы используете MacOS, используйте:

sudo cp /usr/local/etc/openssl/cert.pem /etc/ssl/certs

после этого доверия якорь не найден, ошибка исчезает