wget:强制没有默认证书

wget:强制没有默认证书

我在验证自定义服务器 SSL 证书和 wget 时遇到问题。

 wget -O- --ca-certificate=myservercert.pem https://www.google.com

这应该会失败,但实际上并没有失败,因为wget不知何故还包括来自/etc/ssl.使用curl,效果与预期相同。

我怎样才能拥有两个相互验证的 SSL 点信任违约?

答案1

答案取决于 wget 所链接的 SSL 库。它还可能取决于版本,但在 wget 1.13 和 1.15 之间,行为没有改变。

如果 wget 与 GnuTLS 链接(例如 Debian)

Wget 可以从文件或目录中的文件读取证书。要关闭所有默认受信任 CA(在 中/etc/ssl/certs),请同时传递--ca-certificate--ca-directory

wget -O- --ca-directory=/empty --ca-certificate=myservercert.pem https://www.google.com

(创建/empty以避免错误消息,但即使该目录不存在,wget 也会继续运行。)

如果 wget 与 OpenSSL 链接(例如 Ubuntu)

Wget 无条件检查 OpenSSL 默认位置中的证书(/usr/lib/ssl/certs在 Ubuntu 上,./configure--openssldir选项决定)。除此之外,还会检查命令行上指定的文件和目录(如果有)。没有选项可以禁用默认位置。

SSL_CTX_set_default_verify_paths由于 wget无条件地从 OpenSSL调用该函数,因此会检查默认位置。您可以使用LD_PRELOAD使呼叫无效。

$ cat no_openssl_default_verify_paths.c 
int SSL_CTX_set_default_verify_paths(void *ctx) {
    return 0;
}
$ gcc -Wall -fPIC -shared -o no_openssl_default_verify_paths.so no_openssl_default_verify_paths.c
$ wget -nv -O /dev/null https://www.google.com 
2015-05-04 14:31:02 URL:https://www.google.fr/?gfe_rd=cr&ei=hmZHVa_DD5Tu8wex3IC4BQ [18613] -> "/dev/null" [1]
$ LD_PRELOAD=~/no_openssl_default_verify_paths.so wget -nv -O /dev/null https://www.google.com
ERROR: cannot verify www.google.com's certificate, issued by ‘/C=US/O=Google Inc/CN=Google Internet Authority G2’:
  Unable to locally verify the issuer's authority.
To connect to www.google.com insecurely, use `--no-check-certificate'.

相关内容