openssl:非公開で署名された証明書を検証するためにデフォルトのCA証明書を強制的に使用しない

openssl:非公開で署名された証明書を検証するためにデフォルトのCA証明書を強制的に使用しない

自己署名証明書を使用して、Webサーバーが正しく構成されていることを確認したいと思います。 Web サーバーには、通常購入される CA 署名証明書もあります。

私が直面している問題は、一般的な組み込みCA証明書を無効にできないことです。自己署名証明書をテストしても大丈夫ですかcnn.com? ! ?

openssl s_client -CAfile my.pem -CApath /dev/null -cert my.pem -connect cnn.com:443
[...]
Verify return code: 0 (ok)

一致する自己署名証明書がWebサーバーにインストールされていない場合、どのようにエラーが発生しますかopenssl

ベストアンサー1

s_client(1ssl)マニュアルページから:

s_clientユーティリティは、証明書検証エラーの後でもハンドシェイクを続行するように設計されたテストツールです。したがって、ピアが送信したすべての証明書チェーン(信頼できるか信頼できない)を受け入れます。テストされていないアプリケーションはMITM攻撃に対して脆弱になるため、これを行わないでください。この動作は、-verify_return_error オプションを使用して変更できます。その後、確認エラーが返され、ハンドシェイクが中断されます。

-verify_return_errorしたがって、証明書検証エラーを実際にキャッチするには、コマンドラインにオプションを追加する必要があります。

または、このシェル機能を使用して、TLSサーバーの証明書情報を人間が読める形式で直接表示できます。

tlscert() {
    openssl s_client -CApath /dev/null -connect "$@" </dev/null 2>/dev/null \
        | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' \
        | openssl x509 -noout -text -certopt no_pubkey,no_sigdump,no_header,ext_parse \
            -nameopt multiline,show_type
}

これをあなた.bashrcまたは同様のログアウトとログインに追加し、たとえば実行しますtlscert cnn.com:443。たとえば、リモートサーバーがStartTLSを使用している場合でも、このコマンドを使用できますtlscert imap.domain.example:143 -starttls imap

注:-starttlsオプションは次のとおりです。後ろにパラメータhostname:port

おすすめ記事