我不是SSL的专家,如果我错误地使用了一些与SSL相关的术语,请原谅。出于某种原因,我无法通过https下载文件,curl通过--cacert选项为其提供此站点的证书。
我有一个可通过https访问的Intranet站点。在接受不受信任(或自签名)的SSL证书后,可以在Firefox中打开此站点。我将此站点的证书从Firefox导出到文件中。我已从/ etc / pki / tls / certs中删除了所有证书,因此除了--cacert选项提供的文件中的curl之外,curl无法找到任何证书。
当我使用--cacert选项运行curl指定证书文件时,它失败了:
curl -v https://some-intranet-site.com/repodata/repomd.xml --cacert exported_certificate.cer
* Peer certificate cannot be authenticated with known CA certificates
curl: (60) Peer certificate cannot be authenticated with known CA certificates
More details here: http://curl.haxx.se/docs/sslcerts.html
当我导出Google的证书并尝试使用curl访问https://gogole.com时,它可以正常运行:
curl https://google.com --cacert ~/dev/tmp/google.cert
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.com/">here</A>.
</BODY></HTML>
你能解释一下吗?
谢谢。
答案 0 :(得分:1)
使用自签名证书可能不太好,因为你收到警告。
在任何情况下,都应确保服务器证书的CN包含服务器的DNS名称。另外,请确保exported_certificate.cer是PEM格式。我的猜测是你的是DER格式。如果是PEM格式,那么你在常规文本编辑器中读取它,如果DER是二进制格式。
最后,如果您不想验证服务器证书,那么可以使用“-k”跳过curl。所以在你的情况下,“curl -k -v https://some-intranet-site.com/repodata/repomd.xml”