証明書の有効期限を確認する方法(openssl / MySQL)

  • TLS
  • MySQL
  • openssl

この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。

証明書の有効期限を確認したくなる場面はいろいろあるが、対象によってコマンドが違うのでまとめておく。

ファイルとして持っている証明書を確認する

手元に証明書ファイル(.pem や .crt)がある場合。

openssl x509 -noout -dates -in example.crt

notBefore(有効開始日時)と notAfter(有効終了日時)が表示される。

稼働中のサーバーに対して確認する

証明書ファイルを持っていなくても、TLSで待ち受けているホストに対して直接確認できる。

openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -dates

s_client で証明書を取得して、そのまま x509 に渡している。-servername はSNI対応のサーバーで必要になる。

MySQLのSSLサーバー証明書を確認する

MySQLサーバー自体が使っているSSLサーバー証明書は、ファイルを探さなくてもSQLだけで確認できる。

SHOW STATUS LIKE 'Ssl_server_not%';
  • Ssl_server_not_before: サーバー証明書の有効開始日時
  • Ssl_server_not_after: サーバー証明書の有効終了日時

MySQLに接続できる状態であれば、証明書ファイルのパスを気にせずこれだけで期限が分かるのが楽。

使い分け

  • 証明書ファイルが手元にある → openssl x509
  • 外部のサーバーの証明書を確認したい → openssl s_client 経由
  • MySQLサーバー自身の証明書を確認したい → SHOW STATUS

未確認

MySQLの Ssl_server_not% は、SSL接続を強制していない環境や非SSL接続の状態でどう返るか(空になるのかNULL相当になるのか)は実機未確認。