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 Server CA - G3), включен в список.
/etc/ssl/certs/ca-certificates.crt
Пока я не знаю, почему он не может проверить первый сертификат. Заранее спасибо.
Полный ответ можно увидеть здесь: https://gist.github.com/1248790
6 ответов
Первое сообщение об ошибке рассказывает вам больше о проблеме:
ошибка проверки:num=20: невозможно получить сертификат локального эмитента
Центром выдачи сертификата сервера конечного объекта является
VeriSign Class 3 Безопасный сервер CA - G3
Посмотрите внимательно на свой файл CA - вы не найдете этот сертификат, поскольку он является промежуточным CA - то, что вы обнаружили, было с таким же названием G3 Public Primary CA от VeriSign.
Но почему другое соединение успешно, а это нет? Проблема заключается в неправильной настройке серверов (убедитесь сами, используя -debug
опция). "Хороший" сервер отправляет всю цепочку сертификатов во время рукопожатия, предоставляя вам необходимые промежуточные сертификаты.
Но сбойный сервер отправляет вам только сертификат конечного объекта, и OpenSSL не может загрузить отсутствующий промежуточный сертификат "на лету" (что было бы возможно при интерпретации расширения доступа к информации о полномочиях). Поэтому ваша попытка не удалась с помощью s_client
но это все равно будет успешным, если вы перейдете по тому же URL-адресу, используя, например, FireFox (который поддерживает функцию "обнаружения сертификата").
Варианты решения этой проблемы - либо исправить это на стороне сервера, либо заставить сервер отправить всю цепочку тоже, либо передать отсутствующий промежуточный сертификат в OpenSSL в качестве параметра на стороне клиента.
Добавление дополнительной информации для ответа на тиснение.
Проще говоря, в вашей цепочке сертификатов есть неверный сертификат.
Например, ваш центр сертификации, скорее всего, даст вам 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), вы получите точные симптомы, которые вы описываете.
- SSL-соединения работают из браузера
- Сбой соединения SSL от других клиентов
- Curl завершается ошибкой: " curl: (60) SSL-сертификат: невозможно получить сертификат локального эмитента"
- openssl s_client -connect выдает ошибку "error error:num=20: невозможно получить сертификат локального эмитента"
Повторно загрузите все сертификаты из своего центра сертификации и создайте новый пакет.
Я столкнулся с той же проблемой при установке моего подписанного сертификата на экземпляр 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)
Вот что вы можете сделать:-
SSL-сертификаты Exim
По умолчанию /etc/exim.conf будет использовать файлы cert / key:
/etc/exim.cert
/etc/exim.key
так что если вам интересно, где разместить свои файлы, вот где.
Они контролируются параметрами exim.conf:
tls_certificate = /etc/exim.cert
tls_privatekey = /etc/exim.key
Промежуточные сертификаты
Если у вас есть корневой сертификат CA (пакет CA, цепочка и т. Д.), Вы добавите содержимое вашего CA в exim.cert после вашего фактического сертификата.
Вероятно, неплохо было бы убедиться, что у вас есть копия всего в другом месте, на случай, если вы сделаете ошибку.
Dovecot и ProFtpd также должны читать его правильно, поэтому dovecot больше не нуждается в опции ssl_ca. Таким образом, в обоих случаях нет необходимости вносить какие-либо изменения в exim.conf или dovecot.conf(/etc/dovecot/conf/ssl.conf)
Если вы используете MacOS, используйте:
sudo cp /usr/local/etc/openssl/cert.pem /etc/ssl/certs
после этого ошибка Trust anchor not found исчезнет
Для тех, кто использует сертификаты zerossl.com, перетащите все сертификаты (как есть) в соответствующие папки.
Вырезание и вставка текста в существующие файлы может вызвать проблемы с utf8 - в зависимости от ОС, формата и межсимвольных интервалов.