wget:它在哪里寻找证书?

时间:2018-02-23 13:30:49

标签: ssl openssl wget

我有一个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

2 个答案:

答案 0 :(得分:4)

根据wget

的联机帮助页
  

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

那是哪里的? Turns out, that's complicated。这取决于你的系统等。

找出wget实际执行的内容的简单方法是

  1. 阅读其输出:

      

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

  2. 使用strace

    strace wget https://your-url

    在输出中,您可以阅读哪些文件wget已打开,尝试打开等等。

  3. 由于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