opensslコマンドでSSL/TLS証明書を確認する方法|有効期限・暗号スイート・接続テストも


この記事の監修:宮崎智広(Linux教育歴15年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips > opensslコマンドでSSL/TLS証明書を確認する方法|有効期限・暗号スイート・接続テストも
「opensslコマンドって何ができるの?」
「SSL証明書の有効期限を確認したいけど、どこを見ればいいかわからない...」
Webサーバーを運用していると、証明書の期限切れや暗号スイートの設定ミスが原因でサービスが停止するトラブルは珍しくありません。

この記事では、openssl コマンド の実践的な使い方を解説します。
証明書の有効期限確認・リモートサーバーへの接続テスト・自己署名証明書の作成まで、現場で頻出する操作をカバーします。動作確認環境は RHEL 9.4 / Ubuntu 24.04 LTS です。

この記事のポイント

・openssl s_client でリモートサーバーのSSL/TLS接続状態を確認できる
・openssl x509 -dates で証明書の有効期限を即座に表示できる
・暗号スイートやプロトコルバージョンの確認も openssl s_client 一本で対応
・自己署名証明書の作成は openssl req -x509 で完結する


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

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

openssl 1.1.x から 3.x に変わった環境では、一部の古いオプション(-des3 等)の動作が変わっています。バージョンを把握してから作業を始める習慣をつけましょう。

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

有効期限が近い場合に警告を出すシェルスクリプトへの組み込み例は後の「実務Tips」セクションで紹介します。

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

「TLSv1.3」「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

TLS 1.1 が無効化されていれば 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

このスクリプトをcronに登録すれば、更新作業を忘れていても30日前にメール通知が届きます。

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

CSRを認証局に提出すると、署名済み証明書が返ってきます。秘密鍵(server.key)は外部に漏らさず安全に保管してください。

トラブルシュート:よくあるエラーと対処法

「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

ポート確認には nc(netcat)コマンド が便利です。

「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日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。


暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。