取引先から「警告が出る」と電話が来た。ブラウザには証明書期限切れ。瀬名は背中に汗を感じた。
律はまず現状確認をした。
`openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -dates`
期限は昨夜で切れていた。`certbot certificates` では対象ドメインの更新に失敗履歴がある。原因はDNSの古いAAAAレコードで、IPv6側だけ認証が通らなかったことだった。
二人は一時的にAAAAを整理し、証明書を更新し、Nginxをreloadした。
「期限切れって、責められてる気分になりますね」
瀬名が言うと、律は画面から目を離さず答えた。
「でも気づいた人が直せば、次は守れます」
その言い方に、少し救われた。
人物紹介
瀬名悠真
- 男性、30代
- サーバ運用・インフラ担当
- 手は動くが、初動で少し焦りやすい
久坂律
- 女性、30代
- 監視、自動化、ログ解析、運用設計に強い
- 冷静で、原因調査の順序を大事にする
用語メモ
`openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -dates`
このワンライナーは、「Webサイト(TLS/SSL)の証明書の有効期限(開始日と終了日)をコマンドラインからサクッと確認する」ための非常に定番のワンライナーです。
パイプ(|)で前後2つのコマンドに分かれていますので、それぞれの役割と仕組みを分解して解説します。
🛠️ コマンド全体の流れ
-
前半(
openssl s_client ...):指定したWebサーバー(example.com:443)にTLS接続を確立し、サーバーから送信されてくるSSL/TLS証明書を取得します。 -
パイプ(
|):前半の通信結果(証明書のテキストデータなど)を、そのまま後半のコマンドに受け渡します。 -
後半(
openssl x509 ...):渡された証明書データの中から「有効期限(開始日時と終了日時)」の項目だけを抽出して画面に表示します。
🔍 詳細な解説(オプションごとの役割)
1. 前半部分:SSL/TLS接続と証明書の取得
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null
-
openssl s_clientOpenSSLの機能の1つで、汎用的なTLS/SSLクライアントとしてサーバーに接続を試みるコマンドです(Webブラウザの代わりに手動で接続するようなイメージです)。 -
-connect example.com:443接続先の「ホスト名(またはIPアドレス)」と「ポート番号」を指定します。HTTPS通信なので通常は443を指定します。 -
-servername example.comSNI(Server Name Indication) を有効にするための非常に重要なオプションです。1つのIPアドレスで複数のWebサイトをホストしている現代のサーバーに対し、「このドメインの証明書をください」と明示するために指定します。(これを抜かすと意図しないデフォルト証明書が返ってくることがあります) -
</dev/nulls_clientは接続後、キーボードからの入力待ち状態(対話モード)になります。それを防ぐため、即座に空の入力(/dev/null)を流し込んで接続処理を自動で終了(切断)させるテクニックです。 -
2>/dev/null通信時の標準エラー出力(接続プロセスのログやハンドシェイクの詳細メッセージなど)を破棄(静音化)し、純粋な証明書データだけを次のコマンドに渡せるようにします。
2. 後半部分:証明書情報の解析と有効期限の抽出
openssl x509 -noout -dates
-
openssl x509X.509形式(SSL/TLS証明書の標準規格)の証明書データを解析・表示・変換するためのコマンドです。 -
-nooutデフォルトで出力されてしまうエンコード済みの証明書本文(-----BEGIN CERTIFICATE-----から始まる暗号化テキストブロック)の出力を抑制します。 -
-dates証明書の「有効期限開始日(notBefore)」と「有効期限終了日(notAfter)」の2点のみを出力するように指定します。
📊 実行結果の出力例
コマンドを実行すると、以下のように開始日時と終了日時がUTC(協定世界時)でシンプルに返ってきます。
notBefore=Jan 1 00:00:00 2026 GMT
notAfter=Apr 1 23:59:59 2026 GMT
-
notBefore:有効期間の「開始日時」 -
notAfter:有効期間の「終了日時(この日時を過ぎると証明書切れエラーになる)」
💡 どういう時に使う?
-
証明書の更新作業後、正しく新しい期限の証明書が適用されているか確認したいとき
-
Shellスクリプトや監視ツール(Zabbixなど)に組み込んで、証明書の期限切れ(アラート)を自動検知したいとき
-
ブラウザを開かずに、ターミナルから爆速で有効期限を確認したいとき
非常に使い勝手がよく、インフラ運用やWebサイト管理において必須級のコマンドテクニックです!
