opensslコマンドでサーバー証明書がSHA-1かSHA-2か確認する
問題
サーバー証明書がSHA-1版なのかSHA-2版なのか調べたい。
ホスト名のリストはあるので、opensslコマンドでまとめて調べたい。
答え
以下のコマンドで証明書を取得できる
openssl s_client -connect www.softel.co.jp:443 -showcerts < /dev/null
標準出力に出力された証明書を openssl x509 に渡すと証明書について調べることができる
openssl s_client -connect www.softel.co.jp:443 -showcerts < /dev/null | openssl x509 -text -in /dev/stdin
SHA-2対応かどうかについて必要な個所となると “Signature Algorithm” を含む行などを見ればよい
openssl s_client -connect www.softel.co.jp:443 -showcerts < /dev/null | openssl x509 -text -in /dev/stdin | grep "Signature Algorithm"
SHA-2対応だと以下のような出力
Signature Algorithm: sha256WithRSAEncryption Signature Algorithm: sha256WithRSAEncryption
SHA-1版だと以下のような出力
Signature Algorithm: sha1WithRSAEncryption Signature Algorithm: sha1WithRSAEncryption
調べたいホスト名、URLの一覧があって、まとめて調べたい場合、
以下のような内容のテキストファイルを作って、シェルスクリプトとして実行して、出力結果を解析するなどすれば、とりあえず可能。
openssl s_client -connect www1.example.com:443 -showcerts < /dev/null | openssl x509 -text -in /dev/stdin | grep "Signature Algorithm" openssl s_client -connect www2.example.com:443 -showcerts < /dev/null | openssl x509 -text -in /dev/stdin | grep "Signature Algorithm" openssl s_client -connect www3.example.com:443 -showcerts < /dev/null | openssl x509 -text -in /dev/stdin | grep "Signature Algorithm" openssl s_client -connect www4.example.com:443 -showcerts < /dev/null | openssl x509 -text -in /dev/stdin | grep "Signature Algorithm" openssl s_client -connect www5.example.com:443 -showcerts < /dev/null | openssl x509 -text -in /dev/stdin | grep "Signature Algorithm" ...... ......
↑上の内容を check,sh などの名前で保存して、
↓下のように実行。
$ bash check.sh (以下結果出力) ...... ......
コメント