Я столкнулся с интересной проблемой. У нас есть PHP-скрипт, который связывается с грузоотправителем LTL (https://facts.dohrn.com/). Этот сценарий не работает, потому что он не может проверить сертификат SSL. Я зашел на сайт и обнаружил, что они используют сертификат GoDaddy SHA2 (использует Комплекты сертификатов GoDaddy - G2, который используется для SHA2).
У меня последняя версия ca-certificate
установлен и похоже, что у них есть Корневой центр сертификации Go Daddy - G2 но это не одно и то же, и он не проходит во всех формах проверки. Я наконец смог заставить его работать, скопировав пакет и напрямую используя его в запросе CURL. Но это просто обходной путь. Есть ли что-то еще, что мне не хватает, что могло бы сделать эту работу без установки CA напрямую?
# openssl s_client -connect fact.dohrn.com:443
ПОДКЛЮЧЕНО (00000003) depth = 0 OU = Контроль домена подтвержден, CN = fact.dohrn.com verify
ошибка: число = 20: невозможно получить подтверждение сертификата местного эмитента: возврат: 1
depth = 0 OU = Контроль домена подтвержден, CN = fact.dohrn.com проверить
ошибка: число = 27: сертификат не доверяет проверить возврат: 1 глубина = 0 OU =
Контроль домена подтвержден, CN = fact.dohrn.com verify
ошибка: число = 21: невозможно проверить первый сертификат проверить возврат: 1
--- Цепочка сертификатов 0 с: / OU = Контроль домена подтвержден / CN = fact.dohrn.com
i: /C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com,
Inc./OU=http://certs.godaddy.com/repository//CN
= Go Daddy Secure
Центр сертификации - G2
--- Сертификат сервера [сертификат удален]
----- КОНЕЦ СЕРТИФИКАТА -----
subject = / OU = Контроль домена подтвержден / CN = fact.dohrn.com
эмитент = / C = US / ST = Arizona / L = Scottsdale / O = GoDaddy.com,
Inc./OU=http://certs.godaddy.com/repository//CN
= Go Daddy Secure
Центр сертификации - G2
--- Не отправлены имена ЦС сертификатов клиента
--- Подтверждение SSL прочитало 1470 байт и записало 563 байта
--- Новое, TLSv1 / SSLv3, шифр RC4-SHA Открытый ключ сервера - 2048 бит Безопасное повторное согласование НЕ поддерживается Сжатие: НЕТ Расширение:
НЕТ SSL-сеанса:
Протокол: TLSv1
Шифр: RC4-SHA
Идентификатор сеанса: 1A23000017A7003411F3833970B7FA23C6D782E663CE0C8B17DE4D5A15DEE1A5
Идентификатор сеанса-ctx:
Мастер-ключ: F6C9C6345A09B7965AF762DE4BEFE8BDD249136BF30D9364598D78CF123F17230B0C25DD552F103BEF9A893F75EAD2B0
Key-Arg: Нет
Krb5 Заказчик: Нет
Идентификатор PSK: Нет
Подсказка идентичности PSK: Нет
Время начала: 1432044402
Тайм-аут: 300 (сек)
Проверить код возврата: 21 (невозможно проверить первый сертификат)
Похоже, что веб-сервер на 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
Я бы сказал, что ваши основные варианты - либо попытаться убедить поставщика услуг исправить их службу, либо обойти проблему с вашей стороны, предоставив клиенту сертификаты, которые должен был предоставить их сервер.