自己署名証明書を使用して、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
。