つよく、やさしく、泥臭く生きていくブログ

日常とポエムと、ときどき技術

たくさんのWebページのSSL証明書の有効期限を確認する

ちょっと大量のドメイン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;
     }
}

参考

Perl で SSL 証明書の有効期限を取得する : あかぎメモ

OpenSSLをSSL/TLSクライアントとして使ってみる | Siguniang's Blog