wget: 基本証明書を強制的に使用しない

wget: 基本証明書を強制的に使用しない

wgetを使用してカスタムサーバーSSL証明書を検証する際に問題があります。

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

これは失敗するはずですが、そうではありません。理由は、wgetfromを含む効果が期待したものと同じであるためです/etc/sslcurl

互いに認証する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/certsWgetはOpenSSLのデフォルトの場所(Ubuntuではオプション./configureによって決まります--openssldir)で証明書を無条件にチェックします。これに加えて、コマンドラインで指定されたファイルとディレクトリがチェックされます(存在する場合)。デフォルトの場所を無効にするオプションはありません。

SSL_CTX_set_default_verify_pathswgetは無条件に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'.

おすすめ記事