使用自定义证书卷曲

Pro*_*e85 5 openssl ssl-certificate curl

我希望curl能够与goDaddy签名的网站一起使用:如果我打电话

curl mypage.com/bla
Run Code Online (Sandbox Code Playgroud)

我收到证书验证错误。我尝试使用以下代码片段获取 ca 证书:

echo | openssl s_client -connect mysite.com:443 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > cert.pem
Run Code Online (Sandbox Code Playgroud)

然后打电话

curl mypage.com/bla --cacert cert.pem
Run Code Online (Sandbox Code Playgroud)

这也导致了验证错误。我检查了证书日期和主题,一切似乎都很好?

我缺少什么?我可能需要整个链条吗?如果是,是否有命令可以获取全部内容?

Fed*_*rra 9

根据文档:

默认情况下,curl 使用证书颁发机构 (CA) 公钥(CA 证书)“捆绑”执行 SSL 证书验证。如果默认捆绑文件不够,您可以使用该--cacert选项指定备用文件。

如果此HTTPS服务器使用由捆绑包中代表的CA签名的证书,则证书验证可能会因证书问题而失败(证书可能已过期,或者名称可能与 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
Run Code Online (Sandbox Code Playgroud)


gna*_*fou 4

cacert中的CA是证书颁发机构的意思。您应该指定签署您的证书的颁发机构的证书或证书路径,而不是您的证书本身

命令

openssl x509 -在 YourSitePemCert -文本

应列出发行人行。您应该获取颁发者证书并将其包含在 cacert pem 文件中

(在您的情况下,搜索 godaddy 证书链会导致https://certs.godaddy.com/repository