即使将证书添加到本地信任库后,SSL 握手仍然失败

即使将证书添加到本地信任库后,SSL 握手仍然失败

执行时

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

上面 URL 中的证书链包含 4 个证书。

我为解决这个问题做了以下尝试:

0)打开 URL 时,从 Chrome 中提取链中的 4 个证书

1)为了确保不丢失证书,我把所有4个证书(即,,,)conda1.crt都放进去了conda2.crtconda3.crtconda4.crt/usr/share/ca-certificates/mozilla/sudo cp conda*.crt /usr/share/ca-certificates/mozilla/

2)并在末尾sudo vi /etc/ca-certificates.conf附加mozilla/conda1.crt, mozilla/conda2.crt, mozilla/conda3.crt,mozilla/conda4.crt

3)运行sudo update-ca-certificates -f

4)我可以看到在 /etc/ssl/certs 下创建的符号链接,如下所示:conda1.pem -> /usr/share/ca-certificates/mozilla/conda1.crt,,conda2.pem -> /usr/share/ca-certificates/mozilla/conda2.crt等等。

确认:

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 仍然失败

附言 自一个月前以来,我在很多方面和很多 URL 上都遇到了这个 SSL 问题(之前没有问题):

  1. 我无法执行 conda search a_package
  2. 我无法在 python 代码中执行 request.get(url)
  3. 我无法在我的 ubuntu 系统内的浏览器中打开它(只能在 windows 中访问)
  4. 我无法在 Scala 中执行 fromUrl

看来问题不仅仅出在一两个证书上,而是我的 ubuntu 系统中的系统问题。看起来我的信任库中缺少证书列表。

uname=> Linux 用户 5.3.0-53-通用 #47~18.04.1-Ubuntu SMP 2020 年 5 月 7 日星期四 13:10:50 UTC x86_64 x86_64 x86_64 GNU/Linux

我正在使用 Oracle VirtualBox。

相关内容