我有一个HTTPS站点,需要中间认证来验证服务器SSL-CERTIFICATE。
如果我将中间字母放入/etc/ssl/certs(并制作散布链接(,然后
openssl s_client -connect IP:PORT
将起作用。否则我会遇到验证错误。
WGET在哪里寻找证书?如果我明确设置 - wget中的ca-directory。
因此,OpenSSL似乎会探索/etc/ssl/certs,而WGET则没有。
谢谢!
编辑
如果我用-d运行WGET大约150个证书。使用该选项超过300。
linux-gnu上的wget 1.19.4 debian 10
根据 wget
的manpage:
没有此选项WGET在系统指定位置寻找CA证书,在OpenSSL安装时间选择。
那在哪里?事实证明,这很复杂。这取决于您的系统,等等。
简单的方法来找出wget
实际做的是
-
阅读其输出:
加载CA证书'/etc/ssl/certs/ca-certificates.crt'
-
使用
strace
:strace wget https://your-url
在输出中,您可以阅读哪些文件
wget
打开,尝试打开等等。
由于strace
产生了很多输出,因此您可能需要将其限制为某些SYSCALL。看起来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
还有更多的位置,您的系统甚至可能有所不同。
我在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