我主要尝试通过 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 的错误是在验证过程中发生的吗?
谢谢你的帮助。作为一名普通的开发人员,我很感激那些有智慧的人的帮助!
答案1
tlsv1 警报 未知 ca
服务器无法验证您发送的客户端证书,因为它找不到服务器信任的 CA 的任何路径。
答案2
这些代码 - “48” - 在 TLS 规范中定义。例如 RFC 5246 中的第 7.2 节(“警报协议”)。48 是“unknown_ca”,如前所述,这意味着它无法识别您的客户端证书的签名者。
答案3
当我使用客户端证书向测试环境而不是集成环境发出请求时出现此错误。