SOFTELメモ

Softel Inc.

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
(以下結果出力)
......
......

関連するメモ

コメント