我有一个HTTPS站点,需要一个中间证书来验证服务器的SSL证书。
如果我将中间证书放入/ etc / ssl / certs(并制作哈希链接),那么
openssl s_client -connect IP:PORT
会奏效。否则我会收到验证错误。
wget在哪里寻找证书?如果我在wget中明确设置--ca-directory,我只能使它工作。
所以似乎openssl会查看/ etc / ssl / certs而wget不会。
谢谢!
修改
如果我用-d运行wget,那么我看到它加载了没有--ca-directory 大约150个证书。选项它超过300.所以它必须是另一条路径然后openssl-default我认为。
在Debian 10上的linux-gnu上获得1.19.4
答案 0 :(得分:4)
根据wget
:
那是哪里的? Turns out, that's complicated。这取决于你的系统等。如果没有此选项,Wget会在OpenSSL安装时选择的系统指定位置查找CA证书。
找出wget
实际执行的内容的简单方法是
阅读其输出:
加载的CA证书'/etc/ssl/certs/ca-certificates.crt'
使用strace
:
strace wget https://your-url
在输出中,您可以阅读哪些文件wget
已打开,尝试打开等等。
由于strace
会产生大量输出,因此您可能希望将其限制为某些系统调用。看起来wget使用openat
来读取文件,所以:
strace -e openat wget https://your-url
包含有用的行:
openat(AT_FDCWD, "/usr/share/ca-certificates/trust-source/mozilla.trust.p11-kit", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "/usr/share/ca-certificates/trust-source/anchors/CAcert.org_root.crt", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "/usr/share/ca-certificates/trust-source/anchors/CAcert.org_class3.crt", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "/etc/ssl/certs/ca-certificates.crt", O_RDONLY) = 3
它看起来有更多的位置,它们甚至可能与您的系统不同。
答案 1 :(得分:2)
我遇到wget找不到证书的问题,因此我安装了ca-
sudo apt install ca-certificates
然后我编辑:
sudo vi /etc/wgetrc
并添加
ca_directory=/etc/ssl/certs
或者您可以使用此命令将其附加到末尾:
printf "\nca_directory=/etc/ssl/certs" | sudo tee -a /etc/wgetrc