Я пытаюсь подключиться к третьей стороне в основном через CURL / PHP, но, поскольку это не работает, я прибегаю к более подробным инструментам для диагностики проблемы .
Если я попробую следующее, в Ubuntu 14.04 LTS:
openssl s_client -showcerts -connect secure.thirdpartyhost.com:443 -cert production_client.pem -key production_key.pem -CApath /etc/ssl/certs
Это не сработает с этой ошибкой:
CONNECTED(00000003)
depth=2 C = US, O = "Entrust, Inc.", OU = See www.entrust.net/legal-terms, OU = "(c) 2009 Entrust, Inc. - for authorized use only", CN = Entrust Root Certification Authority - G2
verify return:1
depth=1 C = US, O = "Entrust, Inc.", OU = See www.entrust.net/legal-terms, OU = "(c) 2012 Entrust, Inc. - for authorized use only", CN = Entrust Certification Authority - L1K
verify return:1
depth=0 C = CA, ST = New York, L = New York, O = ThirdParty, CN = *.thirdpartyhost.com
verify return:1
139647498331808:error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca:s3_pkt.c:1262:SSL alert number 48
139647498331808:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:177:
Это их сервер сигнализирует об ошибке? Что ошибка CA происходит во время их проверки?
Спасибо за вашу помощь. Как простой разработчик, я ценю помощь тех, кто поумнел!
tlsv1 alert unknown ca
Сервер не может проверить отправленный вами клиентский сертификат, так как не находит путь к CA'у, которому он доверяет.
Эти коды — «48» — определены в спецификации TLS. Например, раздел 7.2 («Протокол предупреждений») в RFC 5246. 48 — это «unknown_ca», что, как обсуждалось ранее, означает, что он не распознает подписавшего сертификат вашего клиента.