我遇到了一个有趣的问题。我们有一个联系 LTL 托运人 ( https://facts.dohrn.com/ ) 的 PHP 脚本。该脚本一直失败,因为它无法验证 SSL 证书。我去了该站点,发现他们正在使用 GoDaddy SHA2 证书(使用GoDaddy 证书捆绑包 - G2,这是用于 SHA2 的)。
我安装了最新版本,ca-certificate
看起来他们有Go Daddy 根证书颁发机构 - G2但这不是一回事,并且在所有形式的验证中都失败了。我最终能够通过复制捆绑包并直接在 CURL 请求中使用它来使其工作。但这只是一种解决方法。我是否还缺少其他东西可以在不直接安装 CA 的情况下完成这项工作?
# openssl s_client -connect fact.dohrn.com:443
CONNECTED(00000003) depth=0 OU = Domain Control Validated, CN = fact.dohrn.com verify
error:num=20:unable to get local issuer certificate verify return:1
depth =0 OU = 域控制验证,CN = fact.dohrn.com 验证
错误:num=27:证书不可信验证返回:1 深度=0 OU =
域控制验证,CN = fact.dohrn.com 验证
错误:num= 21:unable to verify first certificate verify return:1
--- Certificate chain 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 安全
证书颁发机构 - G2
--- 服务器证书 [证书已删除]
-----END CERTIFICATE-----
subject=/OU=Domain Control Validated/CN=facts.dohrn.com
issuer=/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
会话 ID:1A23000017A7003411F3833970B7FA23C6D782E663CE0C8B17DE4D5A15DEEA1
Master-Key: F6C9C6345A09B7965AF762DE4BEFE8BDD249136BF30D9364598D78CF123F17230B0C25DD552F103BEF9A893F75EAD2B0
Key-Arg : None
Krb5 Principal: None
PSK identity: None
PSK identity hint: None
Start Time: 1432044402
Timeout : 300 (sec)
Verify return code: 21 (unable to verify the first certificate)
https://facts.dohrn.com/上的 Web 服务器似乎不包含中间证书。
这似乎是他们的配置错误。这肯定会导致兼容性问题,因为您实际上只应该依赖于事先拥有根证书的客户端。
查看证书链,例如来自SSLLabs 结果:(您还会注意到他们的 SSL 设置还有许多其他问题。)
我想说您的主要选择是尝试说服服务提供商修复他们的服务,或者通过向客户端提供他们的服务器应该提供的证书来解决您的问题。