Я столкнулся с интересной проблемой. У нас есть PHP-скрипт, который связывается с LTL-грузоотправителем (https://facts.dohrn.com/). Этот скрипт не работает, потому что он не может проверить сертификат SSL. Я зашел на сайт и обнаружил, что они используют сертификат GoDaddy SHA2 (используетПакеты сертификатов GoDaddy - G2, который используется для SHA2).
У меня установлена последняя версия ca-certificate
и похоже, что ониЦентр сертификации корневого сертификата Go Daddy - G2но это не то же самое и не проходит ни одну из форм проверки. Мне наконец удалось заставить его работать, скопировав пакет и напрямую использовав его в запросе CURL. Но это просто обходной путь. Есть ли что-то еще, что я упускаю, что могло бы заставить это работать без установки CA напрямую?
# openssl s_client -connect facts.dohrn.com:443
CONNECTED(00000003) depth=0 OU = Domain Control Validated, CN = facts.dohrn.com verify
error:num=20:не удалось получить сертификат локального издателя verify return:1
depth=0 OU = Domain Control Validated, CN = facts.dohrn.com verify
error:num=27:сертификат не является доверенным verify return:1 depth=0 OU =
Domain Control Validated, CN = facts.dohrn.com verify
error:num=21:не удалось проверить первый сертификат verify return:1
--- Цепочка сертификатов 0 s:/OU=Domain Control Validated/CN=facts.dohrn.com
i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com,
Inc./OU=http://certs.godaddy.com/repository//CN
=Go Daddy Secure
Certificate Authority - G2
--- Сертификат сервера [сертификат удален]
-----КОНЕЦ СЕРТИФИКАТА-----
субъект=/OU=Domain Control Validated/CN=facts.dohrn.com
издатель=/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com,
Inc./OU=http://certs.godaddy.com/repository//CN
=Go Daddy Secure
Certificate Authority - G2
--- Имена CA клиентских сертификатов не отправлены
--- SSL-рукопожатие считано 1470 байт и записано 563 байта
--- Новый, TLSv1/SSLv3, шифр RC4-SHA Открытый ключ сервера составляет 2048 бит Безопасное повторное согласование НЕ поддерживается Сжатие: НЕТ Расширение:
НЕТ SSL-сеанс:
Протокол: TLSv1
Шифр: RC4-SHA
Идентификатор сеанса: 1A23000017A7003411F3833970B7FA23C6D782E663CE0C8B17DE4D5A15DEE1A5
Session-ID-ctx:
Master-Key: F6C9C6345A09B7965AF762DE4BEFE8BDD249136BF30D9364598D78CF123F17230B0C25DD552F103BEF9A893F75EAD2B0
Key-Arg: None
Krb5 Principal: None
PSK identity: None
PSK identity hint: None
Start Time: 1432044402
Timeout: 300 (сек)
Verify return code: 21 (не удалось проверить первый сертификат)
решение1
Похоже, что веб-сервер по адресуhttps://facts.dohrn.com/не включает промежуточный сертификат.
Это, по-видимому, ошибка конфигурации с их стороны. Это определенно то, что может вызвать проблемы совместимости, поскольку на самом деле вы должны полагаться только на то, что клиенты заранее имеют корневые сертификаты.
См. цепочку сертификатов, например, изРезультат SSLLabs: (Вы также заметите, что существует множество других проблем с настройкой SSL.)
1 Sent by server facts.dohrn.com
Fingerprint: 823e3a70f194c646498b2591069b3727ad0014d9
RSA 2048 bits (e 65537) / SHA256withRSA
2 Extra download Go Daddy Secure Certificate Authority - G2
Fingerprint: 27ac9369faf25207bb2627cefaccbe4ef9c319b8
RSA 2048 bits (e 65537) / SHA256withRSA
3 In trust store Go Daddy Root Certificate Authority - G2 Self-signed
Fingerprint: 47beabc922eae80e78783462a79f45c254fde68b
RSA 2048 bits (e 65537) / SHA256withRSA
Я бы сказал, что ваши основные варианты — либо попытаться убедить поставщика услуг исправить свою работу, либо обойти проблему со своей стороны, предоставив клиенту сертификаты, которые должен был предоставить его сервер.