wget:它在哪里寻找证书?

chr*_*s01 4 ssl openssl wget

我有一个HTTPS站点,需要一个中间证书来验证服务器的SSL证书。

如果我将中间证书放入/ etc / ssl / certs中(并进行哈希链接),则

openssl s_client -connect IP:PORT
Run Code Online (Sandbox Code Playgroud)

将工作。否则,我会收到验证错误。

wget在哪里寻找证书?只有在wget中显式设置--ca-directory时,我才能使它工作。

因此,似乎openssl会查看/ etc / ssl / certs,而wget不会。

谢谢!

编辑

如果我用-d运行wget,那么我看不到--ca-directory,它将加载约150个证书。随着选项它超过300。所以它必须是另一条路径,然后我认为openssl-default。

在Debian 10上的linux-gnu上的Wget 1.19.4

Jar*_*red 9

我遇到了 wget 找不到我的证书的问题,所以我安装了 ca-

sudo apt install ca-certificates
Run Code Online (Sandbox Code Playgroud)

然后我编辑:

sudo vi /etc/wgetrc
Run Code Online (Sandbox Code Playgroud)

并添加了

ca_directory=/etc/ssl/certs
Run Code Online (Sandbox Code Playgroud)

或者您可以使用此命令将其附加到末尾:

printf "\nca_directory=/etc/ssl/certs" | sudo tee -a /etc/wgetrc
Run Code Online (Sandbox Code Playgroud)


YSe*_*elf 5

根据以下手册wget

如果没有此选项,Wget将在OpenSSL安装时选择的系统指定位置查找CA证书。

那是哪 事实证明,那很复杂。这取决于您的系统等。

找出wget实际作用的简单方法是

  1. 读取其输出:

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

  2. 使用strace

    strace wget https://your-url

    在输出中,您可以读取wget打开,尝试打开的文件等。

由于strace产生了大量输出,因此您可能希望将其限制为某些系统调用。看起来wget用于openat读取文件,因此:

strace -e openat wget https://your-url
Run Code Online (Sandbox Code Playgroud)

包含有趣的内容:

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
Run Code Online (Sandbox Code Playgroud)

而且它查找的位置甚至更多,它们甚至可能与您的系统有所不同。