ちょっと大量のドメインのSSL証明書を確認する必要があった。
openssl コマンドで確認する
$ openssl s_client -connect example.com:443 -showcerts < /dev/null 2>/dev/null | openssl x509 -dates -noout
各部分の説明
$ openssl s_client -connect ${domain}:443 -showcerts
このコマンドで、証明書情報とれる。
ただし、このコマンドだけでは接続中の状態になるので、 Ctrl + cとかで終わらせないと、次のパイプにつなげたときに上手くいかない。
ので、
< /dev/null 2>/dev/null
を付けて、終わらす&エラー出力は不要なので捨てる。 これ分かるまでなんかうまいことできなくて詰まった。
| openssl x509 -dates -noout
さっきのをパイプで繋げて証明書の中身を見る。
-datesを付けると有効期限とかが出てくる。notAfter=hogehoge って感じで書かれてるのが、有効期限である。
perl で回す
さっきので1ドメイン分が取れるので、普通にシェルの for で回してもいいんだけど、出力を適当に加工したりするかもしれないので融通の利くperlで回す。
for my $domain ( @domain_list ) { my $result = check( $domain ) // 'error'; print "$result : $domain \n"; } sub check { my $domain = shift; my $command = "openssl s_client -connect ${domain}:443 -showcerts < /dev/null 2>/dev/null | openssl x509 -dates -noout"; my $result = `$command`; chomp $result; if ( $result =~ /notAfter=(.*)/ ) { return $1; } }
参考