我有一个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
我遇到了 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)
或者您可以使用此命令将其附加到末尾:
Run Code Online (Sandbox Code Playgroud)printf "\nca_directory=/etc/ssl/certs" | sudo tee -a /etc/wgetrc
根据以下手册wget:
如果没有此选项,Wget将在OpenSSL安装时选择的系统指定位置查找CA证书。
那是哪 事实证明,那很复杂。这取决于您的系统等。
找出wget实际作用的简单方法是
读取其输出:
加载的CA证书'/etc/ssl/certs/ca-certificates.crt'
使用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)
而且它查找的位置甚至更多,它们甚至可能与您的系统有所不同。