WGET:它在哪里寻找证书



我有一个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实际做的是

  1. 阅读其输出:

    加载CA证书'/etc/ssl/certs/ca-certificates.crt'

  2. 使用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

最新更新