我希望 curl 与 goDaddy 签名的网站兼容:如果我调用
curl mypage.com/bla
我收到证书验证错误。我尝试使用此代码片段获取 CA 证书:
echo | openssl s_client -connect mysite.com:443 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > cert.pem
然后打电话
curl mypage.com/bla --cacert cert.pem
这也导致了验证错误。我检查了证书日期和主题,一切似乎都正常?
我遗漏了什么?我可能需要整个链条吗?如果是,是否有命令可以获取所有内容?
答案1
cacert 中的 CA 表示认证机构。您应该指定签署证书的机构的证书或证书路径,而不是证书本身
命令
openssl x509-in YourSitePemCert-文本
应该列出发行者行。您应该获取发行者证书并将其包含在 cacert pem 文件中
(在你的情况下搜索 godaddy 证书链导致https://certs.godaddy.com/repository)
答案2
根据文献:
curl 默认使用证书颁发机构 (CA) 公钥 (CA 证书)“捆绑包”执行 SSL 证书验证。如果默认捆绑包文件不够用,您可以使用选项指定备用文件
--cacert
。
如果这HTTPS服务器使用由加州捆绑包中显示的证书验证可能由于证书问题而失败(证书可能已过期,或者名称可能与 URL 中的域名不匹配)。如果您想关闭 curl 的证书验证,请使用该-k (or --insecure)
选项。
对于 goDaddy 您必须使用SSL 证书和 CA 捆绑包(gd_bundle.crt
)。您可以从以下位置下载https://certs.godaddy.com/repository/gd_bundle.crt
例如。
curl https://mysite.com --cacert gd_bundle.crt