1

我不是 SSL 方面的专家,如果我错误地使用了一些与 SSL 相关的术语,请见谅。出于某种原因,我无法通过 https 下载文件,而 curl 使用 --cacert 选项为它提供了该站点的证书。

我有一个可通过 https 访问的 Intranet 站点。接受不受信任(或自签名)的 SSL 证书后,可以在 Firefox 中打开此站点。我将此站点的证书从 Firefox 导出到一个文件中。我已经从 /etc/pki/tls/certs 中删除了所有证书,因此除了 --cacert 选项提供的文件中的证书之外,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>

你能给出任何解释吗?

谢谢你。

4

1 回答 1

1

使用自签名证书可能不太好,因为您会收到警告。

在任何情况下,您都应该确保服务器证书的 CN 包含服务器的 DNS 名称。另外,确保exported_certificate.cer 是PEM 格式。我的猜测是你的格式是 DER。如果是 PEM 格式,那么您在常规文本编辑器中阅读它,如果是 DER,它是二进制的。

最后,如果您不想验证服务器证书,那么您可以使用 curl 使用“-k”跳过此操作。所以在你的情况下,“curl -k -v https://some-intranet-site.com/repodata/repomd.xml

于 2012-11-06T15:35:57.153 回答