curlコマンドで証明書情報を調べる方法

酸素
2025-04-23
2025-04-23

はじめに

こんにちは、酸素です。

近い将来、さらに有効期間が短くなっていくという噂の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サイトに指定の証明書が設置されているか確認するときに、今回紹介させていただいたコマンドを利用しており、非常に助かっています。

また、ファイルディスクリプタやパイプなど、できることがたくさんあって意味を調べていて楽しかったです。

皆様もぜひご活用ください!