wgetを使用してカスタムサーバーSSL証明書を検証する際に問題があります。
wget -O- --ca-certificate=myservercert.pem https://www.google.com
これは失敗するはずですが、そうではありません。理由は、wget
fromを含む効果が期待したものと同じであるためです/etc/ssl
。curl
互いに認証する2つの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など)に関連付けられている場合
/usr/lib/ssl/certs
WgetはOpenSSLのデフォルトの場所(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'.