「SSL証明書の有効期限を確認したいけど、どこを見ればいいかわからない...」
Webサーバーを運用していると、証明書の期限切れや暗号スイートの設定ミスが原因でサービスが停止するトラブルは珍しくありません。
この記事では、
openssl コマンド の実践的な使い方を解説します。証明書の有効期限確認・リモートサーバーへの接続テスト・自己署名証明書の作成まで、現場で頻出する操作をカバーします。動作確認環境は RHEL 9.4 / Ubuntu 24.04 LTS です。
この記事のポイント
・openssl s_client でリモートサーバーのSSL/TLS接続状態を確認できる
・openssl x509 -dates で証明書の有効期限を即座に表示できる
・暗号スイートやプロトコルバージョンの確認も openssl s_client 一本で対応
・自己署名証明書の作成は openssl req -x509 で完結する
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
opensslとは?現場エンジニアが知っておくべき基礎
openssl は、SSL/TLS プロトコルの実装ライブラリ「OpenSSL」に付属するコマンドラインツールです。証明書の内容確認・暗号化・復号・署名の検証など、セキュリティ関連の操作を幅広くこなせます。主な用途を整理しておきましょう。
・s_client:リモートサーバーへTLS接続してハンドシェイクの詳細を確認する
・x509:証明書ファイルの内容(有効期限・発行者・SAN等)を表示する
・req:CSR(証明書署名要求)や自己署名証明書を生成する
・enc:ファイルを対称鍵暗号で暗号化・復号する
・genrsa / genpkey:秘密鍵を生成する
Red Hat系(RHEL/Rocky Linux)でも Debian 系(Ubuntu)でも標準でインストール済みのため、追加インストールは不要です。
opensslのバージョン確認とインストール
まず手元の環境で使えるバージョンを確認します。$ openssl version OpenSSL 3.2.2 4 Jun 2024 (Library: OpenSSL 3.2.2 4 Jun 2024)
# RHEL / Rocky Linux / AlmaLinux # dnf install openssl -y # Ubuntu / Debian # apt install openssl -y
SSL/TLS証明書の有効期限を確認する方法
サーバー管理で最も頻繁に使う操作が証明書の有効期限確認です。期限切れを事前に検知するために、定期的に実行するスクリプトに組み込む現場も多いです。1. リモートサーバーの証明書を確認する
openssl s_client でサーバーに接続し、openssl x509 -dates で有効期限だけを抽出します。$ echo | openssl s_client -connect www.linuxmaster.jp:443 -servername www.linuxmaster.jp 2>/dev/null | openssl x509 -noout -dates notBefore=Mar 11 00:00:00 2025 GMT notAfter=Apr 10 23:59:59 2026 GMT
-connect ホスト名:ポート番号:接続先を指定する(HTTPS は 443)・
-servername ホスト名:SNI(Server Name Indication)を指定する(同一IPで複数ドメインを運用している環境では必須)・
echo |:対話的な入力を閉じてコマンドを終了させるためのパイプ・
-noout -dates:証明書の有効期間(notBefore / notAfter)だけを表示する2. ローカルの証明書ファイルを確認する
サーバーにデプロイ済みの証明書ファイルを直接読む場合は次のようにします。$ openssl x509 -in /etc/pki/tls/certs/server.crt -noout -dates notBefore=Mar 11 00:00:00 2025 GMT notAfter=Apr 10 23:59:59 2026 GMT # 証明書の詳細情報(サブジェクト・発行者・SAN)も確認したい場合 $ openssl x509 -in /etc/pki/tls/certs/server.crt -noout -subject -issuer -ext subjectAltName subject=CN = www.linuxmaster.jp issuer=C = US, O = DigiCert Inc, CN = RapidSSL TLS RSA CA G1 X509v3 Subject Alternative Name: DNS:www.linuxmaster.jp, DNS:linuxmaster.jp
TLS接続の詳細情報を確認する(暗号スイート・プロトコルバージョン)
本番サーバーで「TLS 1.2以上のみ許可しているか」「脆弱な暗号スイートが使われていないか」を確認したい場面があります。openssl s_client の出力には接続時のネゴシエーション結果が含まれます。1. 接続時のプロトコルと暗号スイートを確認する
$ echo | openssl s_client -connect www.linuxmaster.jp:443 2>/dev/null | grep -E "Protocol|Cipher" Protocol : TLSv1.3 Cipher : TLS_AES_256_GCM_SHA384
2. 特定プロトコルバージョンのみ強制接続する
「TLS 1.2 での接続が通るか確認したい」という場合はオプションで強制できます。# TLS 1.2 のみ許可して接続テスト $ echo | openssl s_client -connect www.example.com:443 -tls1_2 2>&1 | grep -E "Protocol|alert" # TLS 1.1 が拒否されることを確認(セキュリティ強化チェック) $ echo | openssl s_client -connect www.example.com:443 -tls1_1 2>&1 | tail -5
alert handshake failure や接続拒否のメッセージが返ります。これを確認することで、古いプロトコルの無効化設定が正しく機能しているかを検証できます。実務Tips:証明書管理の現場ノウハウ
1. 有効期限が30日以内なら警告するスクリプト
証明書の期限切れによるサービス停止を防ぐためにcronで定期実行するスクリプトです。#!/bin/bash # check-cert-expiry.sh - SSL証明書の有効期限を確認して30日前に警告する HOST="www.linuxmaster.jp" WARN_DAYS=30 NOTIFY_EMAIL="admin@example.com" # 有効期限を取得(秒単位のUnixタイム) EXPIRY=$(echo | openssl s_client -connect "${HOST}:443" -servername "${HOST}" 2>/dev/null | openssl x509 -noout -enddate | sed 's/notAfter=//') EXPIRY_EPOCH=$(date -d "${EXPIRY}" +%s) NOW_EPOCH=$(date +%s) DAYS_LEFT=$(( (EXPIRY_EPOCH - NOW_EPOCH) / 86400 )) if [ "${DAYS_LEFT}" -le "${WARN_DAYS}" ]; then echo "警告: ${HOST} の証明書は残り ${DAYS_LEFT} 日で失効します" | mail -s "[SSL期限警告] ${HOST}" "${NOTIFY_EMAIL}" fi
2. 自己署名証明書を1コマンドで作成する
開発環境・検証環境用に自己署名証明書(オレオレ証明書)を手早く作りたい場面があります。# 秘密鍵と自己署名証明書を同時に生成(有効期間365日) $ openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes -subj "/CN=localhost" # 生成ファイルを確認 $ ls -lh server.key server.crt -rw------- 1 user user 1.7K Apr 13 10:00 server.key -rw-r--r-- 1 user user 1.1K Apr 13 10:00 server.crt
-nodes:秘密鍵をパスフレーズなしで保存する(サービス自動起動時に必要)・
-subj:証明書のサブジェクトをコマンドラインで指定する(対話入力をスキップ)・
rsa:2048:2048ビットのRSA鍵を生成する(本番環境では4096ビットを推奨)3. CSR(証明書署名要求)を作成する
商用認証局への申請時に必要なCSRを生成する手順です。# 1. 秘密鍵を生成 $ openssl genrsa -out server.key 2048 # 2. CSRを生成(認証局に提出するファイル) $ openssl req -new -key server.key -out server.csr -subj "/C=JP/ST=Tokyo/O=Example Inc./CN=www.example.com" # 3. CSRの内容確認(提出前に必ず確認する) $ openssl req -in server.csr -noout -text | head -10 Certificate Request: Data: Version: 1 (0x0) Subject: C=JP, ST=Tokyo, O=Example Inc., CN=www.example.com
トラブルシュート:よくあるエラーと対処法
「verify error:num=18:self-signed certificate」が表示される
自己署名証明書に接続したときに出るメッセージです。認証局に署名された証明書ではないため「検証できない」という意味で、接続自体は成功しています。証明書の内容確認が目的であれば、2>/dev/null でエラー出力を抑制してから openssl x509 にパイプすると有効期限等を取得できます。$ echo | openssl s_client -connect localhost:8443 2>/dev/null | openssl x509 -noout -subject -dates subject=CN = localhost notBefore=Apr 13 00:00:00 2025 GMT notAfter=Apr 13 00:00:00 2026 GMT
「CONNECTED(00000003)」のあとに何も出ない
ファイアウォールでポートがブロックされているか、STARTTLS を使うプロトコル(SMTPなど)で素の TLS を試みたときに発生します。# SMTPのSTARTTLSを使う場合は -starttls オプションを指定する $ openssl s_client -connect mail.example.com:587 -starttls smtp # ポートが開いているか先に確認する $ nc -zv mail.example.com 587
「no peer certificate available」が出て証明書が取得できない
証明書が設定されていないポートや、クライアント証明書が必要なサーバーに接続したときに表示されます。対象のポートがファイアウォールで許可されているかを先に確認しましょう。ファイアウォールの設定確認は firewall-cmd コマンド で行えます。本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| リモートサーバーの証明書有効期限を確認 | echo | openssl s_client -connect ホスト:443 -servername ホスト 2>/dev/null | openssl x509 -noout -dates |
| ローカル証明書ファイルの有効期限を確認 | openssl x509 -in cert.crt -noout -dates |
| 接続時のTLSプロトコルと暗号スイートを確認 | echo | openssl s_client -connect ホスト:443 2>/dev/null | grep -E "Protocol|Cipher" |
| 自己署名証明書を生成 | openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes -subj "/CN=localhost" |
| CSR(証明書署名要求)を生成 | openssl req -new -key server.key -out server.csr -subj "/CN=ホスト名" |
| 特定TLSバージョンで接続テスト | echo | openssl s_client -connect ホスト:443 -tls1_2 |
openssl コマンドは一見とっつきにくいですが、使う操作は「接続テスト(s_client)」「証明書確認(x509)」「鍵・証明書生成(req / genrsa)」の3系統に集中しています。特に証明書の有効期限確認は運用監視の必須スキルです。SSL/TLSで保護されたサーバーへの接続確認と合わせて、sshコマンド による安全なリモートアクセスの設定もあわせて確認しておくとよいでしょう。
opensslで証明書管理の基本はわかった。次はサーバー構築全体の流れを押さえませんか?
SSL/TLS証明書の管理はサーバー運用のほんの一部です。安全なサーバー構築全体を体系的に学ぶことが、障害を防ぐ本当の力になります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
