执行时
wget https://docs.conda.io/projects/conda/en/4.6.0/_downloads/52a95608c49671267e40c689e0bc00ca/conda-cheatsheet.pdf
我有这个错误:
--2020-06-03 20:55:06-- https://docs.conda.io/projects/conda/en/4.6.0/_downloads/52a95608c49671267e40c689e0bc00ca/conda-cheatsheet.pdf
Resolving docs.conda.io (docs.conda.io)... 104.31.71.166, 104.31.70.166, 172.67.149.185, ...
Connecting to docs.conda.io (docs.conda.io)|104.31.71.166|:443... connected.
ERROR: cannot verify docs.conda.io's certificate, issued by ‘CN=SSL-SG1-GFRPA2,OU=Operations,O=Cloud Services,C=US’:
Unable to locally verify the issuer's authority.
To connect to docs.conda.io insecurely, use `--no-check-certificate'.
我试图解决这个问题:
sudo update-ca-certificates -f
打开url时从浏览器中导出证书,保存在文件中
conda.cer
,然后执行openssl x509 -in conda.cer -inform der -outform pem -out conda.pem
,然后执行:wget --ca-certificate=conda.pem \ https://docs.conda.io/projects/conda/en/4.6.0/_downloads/52a95608c49671267e40c689e0bc00ca/conda-cheatsheet.pdf
=> 还是同样的错误
把文件放在下面
/etc/ssl/certs
,sudo cp conda.pem /etc/ssl/certs
=>仍然是同样的错误
我知道我可以使用--no-check-certificate
,但这不是我想要的。
其他一些网站也会出现此问题。有人知道原因吗?谢谢。
更新1
我已尝试以下步骤:1)sudo cp conda.crt /usr/share/ca-certificates/mozilla/
2)sudo vi /etc/ca-certificates.conf
并附加mozilla/conda.crt
在最后
3)运行sudo update-ca-certificates -f
4)我可以看到在 /etc/ssl/certs 下创建的符号链接,如下所示:conda.pem -> /usr/share/ca-certificates/mozilla/conda.crt
然而,它仍然不起作用!
UPDATE2 - 已删除。请参考更新3
更新3
上面 URL 中的证书链包含 4 个证书。
为了确保不遗漏任何一个,我将所有 4 个证书(即conda1.crt
, conda2.crt
, conda3.crt
, conda4.crt
)放入/usr/share/ca-certificates/mozilla/
并重复中提到的步骤更新1。
符号链接已在 中成功创建/etc/ssl/certs
。
确认:
openssl verify -no-CAfile -no-CApath -partial_chain -CAfile conda1.pem conda2.pem
conda2.pem: OK
openssl verify -no-CAfile -no-CApath -partial_chain -CAfile conda2.pem conda3.pem
conda3.pem: OK
openssl verify -no-CAfile -no-CApath -partial_chain -CAfile conda3.pem conda4.pem
conda4.pem: OK
结果:wget 仍然失败
更新4
部分原因已找到
拦截网络的 Bluecoat 服务是根本原因(仅对 VM Ubuntu 有问题,主机 Windows 使用 ssl 工作正常)。
这两项工作(conda1.crt
从浏览器中提取,应该来自 Bluecoat 服务):
wget --ca-certificates=/etc/ssl/certs/ca-certificates.crt https://docs.conda.io/projects/conda/en/4.6.0/_downloads/52a95608c49671267e40c689e0bc00ca/conda-cheatsheet.pdf
wget --ca-certificates=conda1.crt https://docs.conda.io/projects/conda/en/4.6.0/_downloads/52a95608c49671267e40c689e0bc00ca/conda-cheatsheet.pdf
当前状态
我已conda1.crt
按照/etc/ssl/certs
中描述的步骤进行安装更新1。conda1.crt
被认为是正确的,如wget
步骤中所示更新4。
然而,即使执行了这一步,连接仍然失败。
如果我强制禁用 Bluecoat 服务,ssl 问题就消失了。
但是,我需要使用 Bluecoat,因此非常感谢任何帮助解决 Bluecoat 下的问题!
答案1
元:不是真正的答案,但评论太多
UPDATE1 我尝试了以下步骤:
[使用浏览器导出的证书,这些证书实际上来自 Bluecoat,而不是真正来自 conda]
1) sudo cp conda.crt /usr/share/ca-certificates/mozilla/
2) sudo vi /etc/ ca-certificates.conf 并在末尾附加 mozilla/conda.crt
3) [] sudo update-ca-certificates -f
4) 我可以看到在 /etc/ssl/certs 下创建的符号链接,如下所示: conda.pem - > /usr/share/ca-certificates/mozilla/conda.crt
但是,它仍然无法正常工作! [未指定wget --ca-certificates=
]
这太令人惊讶了。它适用于 Ubuntu 18.04,使用我的测试证书(当然,因为我没有你的)。请注意每个证书都放在/etc/ssl/certs
三种方式:(1) 一个“友好”的文件名,例如 Digicert_something 或 Go_Daddy_whatever,链接回/usr/share/ca-certificates/
; (2) 链接到“友好”名称的“哈希名称”,例如3513523f.0 -> DigiCert_Global_Root_CA.pem
; (3) 单个串联文件ca-certificates.crt
,其中包含所有没有人类可读名称的证书的 PEM 块。wget
使用 OpenSSL,它使用来自 (2) 和/或 (3) 的证书数据,具体取决于代码——我没有时间下载和阅读代码——但从不使用 (1),因此检查 (1) 不会不能证明太多;检查(2)和(3)。如果这些是正确的,那么我会尝试openssl s_client
哪个应该使用相同的信任库和逻辑,但提供有关它发现的任何问题的更详细信息(被大量其他信息)。如果这没有帮助,我认为您必须获取 wget 的源代码,使用符号重建并调试它,这工作量太大了。
也就是说,虽然 update-ca-certificates(1) 手册页只是顺便提到了这一点,但我认为他们打算您之所以要添加添加项,/usr/local/share/ca-certificates
不是/usr/share/ca-certificates/mozilla
因为后者由包管理器维护,而前者是/usr/local
传统上和每个层次上用于站点或计算机本地添加的位置(7)。/usr/share/doc/ca-certificates/README.Debian
更具体的是:
If you want to install local certificate authorities to be implicitly
trusted, please put the certificate files as single files ending with
".crt" into /usr/local/share/ca-certificates/ and re-run
'update-ca-certificates'. ...
一些小问题
从浏览器导出证书...和
openssl x509 -inform der -outform pem ...
.
Windows 上的 Chrome 和 Internet Explorer 使用 Windows“证书向导”(或其中之一),它允许导出 DER 或“base-64”(实际上是 PEM)中的单个证书以及“p7b”,其中允许整个链条。 (它还可以选择包含某人的私钥自己的cert,但这不适用于此处。)Firefox 允许相同的选择,以及 PEM 中的链。据我所知,只有 Edge 仅限于在 DER 中导出,并且需要转换步骤——至少是我目前拥有的版本; Edge 本来应该在今年年初进入 Chromium,但我不知道我的是否真的做到了,因为 W10 的理念是阻止你知道(更不用说控制)你的计算机上发生了什么。
[拦截原因]仅 VM Ubuntu 出现问题,但主机 Windows 工作正常......
主机是否由网络所有者拥有或管理?例如是两个都企业的机器和网络?如果是这样,在安装像 Bluecoat 这样的拦截器时,通常会在需要信任它的计算机上自动安装根证书,尤其是可以使用“域”和“组策略”轻松集中管理的 Windows 计算机。 (请注意,这种类型的 Windows 域与 Internet 上使用的“域名”和“域名系统 DNS”无关 - 不要将它们混淆。)一个简单的信号是,如果您的登录名不是一个简单的名称,如fred
或电子邮件之类[email protected]
,但采用表格形式domain\fred
。
答案2
你犯了两个错误:
您混淆了服务器证书和 CA 证书。如果我理解正确,那么您已经下载了服务器证书并尝试放入 CA 池中(与 相同的问题
--ca-certificate=
)。我认为这是不可能的。阅读 的手册页
update-ca-certificates
。您需要一个带有扩展名的文件.crt
,您必须将其复制到不同的目录(可能取决于发行版),如果该工具不以交互方式提供该文件,那么您必须手动将该证书包含在配置文件中。
验证证书
当然,如果没有正确的 CA 证书,整个方法注定会失败。您可以用于openssl
验证某个服务器证书是否已由某个 CA 证书签名(如果缺少中间 CA 证书则不起作用):
openssl verify -no-CAfile -no-CApath -partial_chain -CAfile ca-cert.pem server-cert.pem