一些小问题

一些小问题

执行时

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'.

我试图解决这个问题:

  1. sudo update-ca-certificates -f

  2. 打开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
    

    => 还是同样的错误

  3. 把文件放在下面/etc/ssl/certssudo 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中描述的步骤进行安装更新1conda1.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

你犯了两个错误:

  1. 您混淆了服务器证书和 CA 证书。如果我理解正确,那么您已经下载了服务器证书并尝试放入 CA 池中(与 相同的问题--ca-certificate=)。我认为这是不可能的。

  2. 阅读 的手册页update-ca-certificates。您需要一个带有扩展名的文件.crt,您必须将其复制到不同的目录(可能取决于发行版),如果该工具不以交互方式提供该文件,那么您必须手动将该证书包含在配置文件中。

验证证书

当然,如果没有正确的 CA 证书,整个方法注定会失败。您可以用于openssl验证某个服务器证书是否已由某个 CA 证书签名(如果缺少中间 CA 证书则不起作用):

openssl verify -no-CAfile -no-CApath -partial_chain -CAfile ca-cert.pem server-cert.pem

相关内容