【问题标题】:wget: where does it look for certificates?wget:它在哪里寻找证书?
【发布时间】:2018-02-23 13:30:48
【问题描述】:

我有一个 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 上的 Wget 1.19.4

【问题讨论】:

标签: ssl openssl wget


【解决方案1】:

根据wget的手册页:

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

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

找出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

包含有趣的行:

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

它查看的位置甚至更多,它们甚至可能因您的系统而异。

【讨论】:

    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      • 2011-08-01
      • 2015-07-28
      相关资源
      最近更新 更多