Реальное исправление для этого - убедиться, что ваш сервер представляет все сертификаты в цепочке, а не только сертификат конечного объекта (сервера).
Укажите вашему администратору сервера раздел 7.4.2 RFC 5246, в котором четко указано, что это сообщение передает клиенту цепочку сертификатов сервера .
Если ваш администратор отказывается / не может сделать это по какой-то причине, альтернативный вариант - попытаться приступить curl
к работе с неправильно сформированным рукопожатием.
Согласно сообщению в списке рассылки Curl:
Может кто-нибудь подтвердить, поддерживает ли cURL (или нет) промежуточный сертификат?
Да, это так. Все сертификаты CA имеют цепочку сертификатов, идущую до корня. Пакет ca, который вы используете с curl, должен состоять из сертификатов для всей цепочки.
/ daniel.haxx.se
Вы должны быть в состоянии добавить Root CA и все промежуточные сертификаты в пакет и указать curl
на него, используя --cacert <file>
опцию.
Поскольку ваши браузеры работают, вы можете получить доступ к правильным сертификатам CA оттуда. На вкладке сертификаты (разные для каждого браузера, но я уверен, что вы это выясните), просмотрите цепочку сертификатов. Дважды щелкните Root CA первого Globalsign Root CA - G1 и на Подробнее вкладке, щелкните Копировать в файл ... . Сохранить как root.cer
. Сделайте то же самое с AlphaSSL CA - SHA256 - G2 и сохраните его как issuing.cer
. Соедините их вместе в один файл (например chain.cer
) и используйте это в качестве аргумента -cacert
.
Как любезно указано @AB, недостающий сертификат также можно найти здесь .
Ваши браузеры работают, потому что они кэшируют сертификаты CA. Если вы когда-то переходили на правильно настроенный веб-сайт, сертификат которого был выдан тем же центром сертификации, что и сертификат вашего сервера, он будет кэшироваться браузером. При последующем посещении неправильно настроенного сайта ваш браузер будет использовать сертификаты CA в своем кэше для построения цепочки. Вам кажется, что все в порядке, хотя за кадром сервер неправильно настроен.
Обратите внимание, что в Windows IE / Edge и Chrome используют один и тот же кеш, а Firefox использует свой собственный.
В дополнение к вышесказанному IE / Edge и Chrome (поскольку они совместно используют один и тот же стек шифрования) будут использовать расширение в сертификатах, которое называется AuthorityInformationAccess . У этого есть опция caIssuer, которая предоставляет URL, с которого можно загрузить сертификат CA сертификата конечного объекта. Поэтому, даже если один из этих браузеров не кэшировал отсутствующие сертификаты из предыдущего просмотра, он может извлечь их при необходимости. Обратите внимание, что Firefox этого не делает, поэтому иногда Firefox может показывать ошибки сертификатов, когда IE / Edge и Chrome работают.