我有一个 EC2 实例,正在尝试让本地 wget 运行。
我有自己的 CA 密钥集、crt、pem,我一直用它来签署我公司的证书请求,并且运行良好。在 Web 服务器 (AWS EC2) 上,我有一个标准的 Apache2 侦听器,它处理所有 TLS。然后我将 CA 加载到浏览器中,一切正常。
我甚至可以这样做:
sudo openssl verify -CAfile myCA.pem internal.crt
internal.crt: OK
所以我知道一切都没问题。我现在需要编写代码并像这样调用 wget:
wget https://internal.com
回复:
--2021-10-10 18:13:34-- https://internal.com/
Resolving internal.com (internal.com)... x.x.x.x
Connecting to internal.com (internal.com)|x.x.x.x|:443... connected.
ERROR: cannot verify internal.com's certificate, issued by ‘CN=myCA,OU=IT,O=myOrg CA,ST=FL,C=US’:
Unable to locally verify the issuer's authority.
ERROR: no certificate subject alternative name matches
requested host name ‘internal.com’.
我按照一些说明将我的 CA 添加到 ubuntu,我这样做了:摘自(https://askubuntu.com/questions/73287/how-do-i-install-a-root-certificate)
sudo mkdir /usr/local/share/ca-certificates/extra
sudo cp myCA.crt /usr/local/share/ca-certificates/extra/myCA.crt
sudo dpkg-reconfigure ca-certificates
这是输出:
Updating certificates in /etc/ssl/certs...
rehash: warning: skipping myCA.pem,it does not contain exactly one certificate or CRL
1 added, 0 removed; done.
Processing triggers for ca-certificates (20210119ubuntu0.21.04.1) ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
done.
运行上述程序后,/etc/ssl/certs 文件夹中会有一个 myCA.pem,但它是 myCA.crt 的 simlink
myCA.pem -> /usr/local/share/ca-certificates/extra/myCA.crt
.pem 指向 .crt,这不对吧?有什么建议吗?
答案1
文件.pem
扩展名不会使其成为 PEM 格式的文件,.crt
扩展名(以及 Unix 系统上的任何扩展名)也是如此。
我在 Debian 上尝试导入 DER 格式证书时遇到了这个问题。我通过运行以下命令将所有证书转换为 PEM 格式:
openssl x509 -inform der -in infile.cer -out outfile.cer
然后运行sudo update-ca-certificates
命令即可成功。
答案2
此消息告诉您问题:
rehash: warning: skipping myCA.pem,it does not contain exactly one certificate
myCA.pem
包含多个证书。将文件拆分为单个文件,您可以将它们全部放入myCA-1.pem
、myCA-2.pem
等。将它们放入/usr/local/share/ca-certificates/extra/
并重新运行sudo dpkg-reconfigure ca-certificates
然后您将看到/etc/ssl/certs
包含符号链接到您的证书文件的哈希值,wget
然后应该可以按预期工作。
lrwxrwxrwx 1 root root 13 Jul 13 10:40 6242745b.0 -> myCA-2.pem