我在 Windows Subsystem for Linux 2 上运行 Ubuntu 18.04。我正在curl
使用自签名证书向在 Windows 端运行的 Web 服务发出请求。我收到此错误:
curl:(60)SSL 证书问题:无法获取本地颁发者证书
我想将证书添加到本地存储。我有一个.pfx
可用的文件。我知道我可以使用-k
,但我想针对此服务器使用其他命令行工具。
我该怎么做呢?
我自己的试验
openssl s_client -showcerts -servername server -connect server:443 > foo.pem
openssl x509 -in foo.pem -inform PEM -out foo.crt
sudo cp foo.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
这看起来似乎有道理,但没有起作用,curl
仍然有同样的抱怨。
我也尝试使用一个DER
版本。
sudo rm /usr/local/share/ca-certificates/windows_cert.crt
openssl x509 -in windows_cert.pem -inform PEM -out windows_cert_der.crt -outform DER
sudo cp windows_cert_der.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
放弃
别担心,我开始关注这里的一些回复。
https://askubuntu.com/questions/73287/how-do-i-install-a-root-certificate
但却无果而终,这显然是计算机世界中一个非常困难的问题。
我发现几个月前他们在我需要使用的命令行工具中添加了一个开关,可以忽略证书问题。
答案1
您可以使用该openssl
命令将几乎任何证书格式转换为另一种格式。PFX 是 pkcs12 容器的另一个名称。
如果您可以提取 PEM 格式的证书,curl 应该可以使用它。
openssl pkcs12 -in cert.pfx -clcerts -out cert.pem
这可能会要求你输入密码,该密码将用于保护 PKCS12 文件
您想要使用curl 命令行选项cert.pem
的输出文件--cacert
而不是-k
答案2
在 Debian 家族中分配处理信任证书的方式如下(通过查看 update-ca-certificates 进行逆向工程):
我将使用米卡作为你的 CA(或自签名)证书的替代名称,以及myca文件作为包含证书的文件(DER或PEM)。.crt是必需的。
- 在 /usr/share/ca-certificates 下创建目录
mkdir /usr/share/ca-certificates/myca
- 将 ca.crt 放入其中
cp ./ca.crt /usr/share/ca-certificates/myca/
- 运行 dpkg-reconfigure ca-certificates,选择问选择性地添加新的信任锚,并在第二个屏幕中选择新的 myca/myca.crt,然后按好的
dpkg-reconfigure ca-certificates
以更程序化的方式进行
创建目录并将证书放入后:
echo myca/myca.crt >> /etc/ca-certificates.conf
/usr/sbin/update-ca-certificates
最后一种方法不会在 /var/cache/debconf/config.dat 中记录配置设置,因此如果您运行 dpkg-reconfigure ca-certificates 或更新 ca-certificates 包,您的新信任锚可能会再次消失。运行 update-ca-certificates 是安全的。
要仅从具有自签名证书的 pfx 获取证书:
openssl pkcs12 -in my.pfx -nokeys -out myca.crt
并输入密码打开pfx。
将自签名证书添加到根级中央信任存储库确实意味着拥有其私钥的每个人都可以对您的服务器进行 MITM 攻击。