はじめに
こんにちは、酸素です。
近い将来、さらに有効期間が短くなっていくという噂のSSL証明書ですが、その有効期限を確認する方法として、ブラウザから確認する方法が有名かと思います。
ですが、今回はcurlコマンドを使って、有効期限や発行元をより簡単に調べる方法をご紹介します。
なお、本稿ではAlmaLinux9.5上にインストールした、curlコマンドで検証しております
$ curl --version
curl 7.76.1 (x86_64-redhat-linux-gnu) libcurl/7.76.1 OpenSSL/3.2.2 zlib/1.2.11 brotli/1.0.9 libidn2/2.3.0 libpsl/0.21.1 (+libidn2/2.3.0) libssh/0.10.4/openssl/zlib nghttp2/1.43.0
Release-Date: 2021-04-14
結論
curlコマンド一発で確認はできるとはいえ、見た目が少々複雑ですので、まずは結論だけ先に載せます。
$ curl -sv https://www.future.ad.jp 2>&1 1>/dev/null | awk '/Server certificate:/, /^\}/'
このコマンドを実行すると、下記のような出力となります。
* Server certificate:
* subject: CN=www.future.ad.jp
* start date: Apr 22 06:35:03 2024 GMT
* expire date: May 24 06:35:02 2025 GMT
* subjectAltName: host "future.ad.jp" matched cert's "future.ad.jp"
* issuer: C=BE; O=GlobalSign nv-sa; CN=GlobalSign GCC R3 DV TLS CA 2020
* SSL certificate verify ok.
* TLSv1.2 (OUT), TLS header, Unknown (23):
} [5 bytes data]
見事綺麗に証明書情報が確認できてますね。有効期限もちょうど一か月後というのも丸わかりです。
解説
それではコマンドの各オプションについて解説していきます。
-vオプション
curlコマンドの-vオプションはverbose(=詳細)を出力するという意味の頭文字である通り、http(s)通信時の3ハンドシェイクやヘッダ情報を見ることができます。
なお、-vオプションで表示されるものは、標準エラー出力として出力されるので、オプションを付けるだけではコンソール画面には出力されません。コンソール画面への出力については後述します。
-sオプション
-sオプションは、-vオプションによって出力されるプログレスメーターを非表示にすることができるオプションです。プログレスメーターとは下記のような、通信の進捗割合などを表すものです。
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 219.99.160.248:443...
今回のケースでは特に非表示にする理由はありませんが、折角の機会だったのでご紹介させていただきました。
2>&1
このリダイレクト表記は、ファイルディスクリプタ2を1にコピーするという意味です。
ファイルディスクリプタとは、Linuxが出力先を管理する際に用いられる番号であり、0~2は定義されています(それぞれ入力/標準出力/標準エラー出力)。
curlコマンドの-vオプションの出力は標準エラー出力として出力されるため、これをコンソール画面に表示させるために必要です。
1>/dev/null
前述の通り、ファイルディスクリプタ1は標準出力と定義されており、今回はその出力は必要ではないため/dev/nullに破棄させます。
ここまでのオプションやリダイレクトを記述することで、curlコマンドで詳細な情報を表示することができます。
awk '/Server certificate:/, /^\}/'
リダイレクトされた標準エラー出力には、証明書情報はもちろん、3ハンドシェイクの様子や、TLSバージョンなども含まれています。
全ての情報をコンソール画面に表示させてしまうと大変読みづらくなってしまうため、パイプでawkコマンドに渡すことで整形させています。
今回は証明書情報だけ欲しいため、"Sever certificate"という文字列を含む行から、"}"が先頭で始まる行までを切り抜いています。
まとめ
私自身、業務内でお客様のwebサイトに指定の証明書が設置されているか確認するときに、今回紹介させていただいたコマンドを利用しており、非常に助かっています。
また、ファイルディスクリプタやパイプなど、できることがたくさんあって意味を調べていて楽しかったです。
皆様もぜひご活用ください!