メニュー
【SSL証明書】FAQ/情報

openssl s_clientの使い方:SSL/TLS接続診断・証明書チェーン確認

ページ更新日:2026/06/11

openssl s_client は、SSL/TLS接続をコマンドラインから診断できる OpenSSL のサブコマンドです。
証明書チェーンの確認・有効期限のチェック・TLSバージョンのテスト・メールサーバーのSSL診断など、SSL証明書の運用に欠かせない使い方を実例つきで解説します。

基本の使い方(-connect と -servername)

openssl s_client -connect www.example.com:443 -servername www.example.com

-connect ホスト名:ポート で接続先を指定します。HTTPSの診断ではポート443を指定します。
-servername(SNI指定)は明示指定を推奨します。OpenSSL 1.1.1 以降は -connect のホスト名がDNS名であれば SNI に自動設定されますが、旧バージョン(1.1.1未満)や -connectIPアドレスを指定した場合は SNI が送信されません。現在のWebサーバーの多くは1つのIPアドレスで複数ドメインの証明書を運用(SNI: Server Name Indication)しており、SNI なしの接続ではデフォルト証明書(別ドメインの証明書)が返されて「証明書が違う」と誤診断する原因になります。互換性と誤診断防止のため、常に明示しておくのが安全です。

注意:-servername は「サーバーにどの証明書を要求するか」の指定であって、返された証明書のホスト名(SAN/CN)が接続先と一致するかの検証は行いません
s_client は既定では証明書チェーンの検証のみを行うため、チェーンが正しければ別ドメインの証明書でも Verify return code: 0 (ok) になります。ホスト名の一致まで検証するには -verify_hostname(OpenSSL 1.1.0以降)を、検証失敗時に接続を中断させるには -verify_return_error をあわせて指定します。

# ホスト名検証つきの接続テスト(SAN/CN 不一致なら verify エラーで停止)
openssl s_client -connect www.example.com:443 -servername www.example.com -verify_hostname www.example.com -verify_return_error

接続後は対話状態になるため、Q を入力するか、ワンライナーでは echo を標準入力に渡してすぐ切断します。

echo | openssl s_client -connect www.example.com:443 -servername www.example.com 2>/dev/null

証明書チェーンの確認(-showcerts):中間証明書の欠落を発見

openssl s_client -connect www.example.com:443 -servername www.example.com -showcerts 2>/dev/null

-showcerts を付けると、サーバーが送信する証明書チェーン(サーバー証明書+中間証明書)がすべてPEM形式で表示されます。
出力冒頭の Certificate chain セクションで、チェーンの階層を確認できます。

Certificate chain
 0 s:CN = www.example.com
   i:C = US, O = DigiCert Inc, CN = RapidSSL TLS RSA CA G1
 1 s:C = US, O = DigiCert Inc, CN = RapidSSL TLS RSA CA G1
   i:C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA

0 番(サーバー証明書)しか表示されない場合は中間証明書がインストールされていません。一部の環境で証明書エラーが発生する典型的な原因です。
中間証明書のインストール方法は 中間証明書のインストール をご参照ください。

有効期限の確認(ワンライナー)

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

s_client の出力を openssl x509 にパイプすると、証明書の内容を整形して取り出せます。-dates で有効期間(notBefore / notAfter)を表示します。

# 発行者・サブジェクト・有効期限をまとめて確認
echo | openssl s_client -connect www.example.com:443 -servername www.example.com 2>/dev/null | openssl x509 -noout -subject -issuer -dates

# SAN(サブジェクト代替名)を確認
echo | openssl s_client -connect www.example.com:443 -servername www.example.com 2>/dev/null | openssl x509 -noout -ext subjectAltName

TLSバージョン・暗号スイートの確認

# TLS 1.3 で接続できるか確認
openssl s_client -connect www.example.com:443 -servername www.example.com -tls1_3

# TLS 1.2 で接続できるか確認
openssl s_client -connect www.example.com:443 -servername www.example.com -tls1_2

# 旧バージョン(TLS 1.1)が無効化されているか確認(接続失敗が正常)
openssl s_client -connect www.example.com:443 -servername www.example.com -tls1_1

接続に成功すると出力末尾の ProtocolCipher でネゴシエートされたTLSバージョンと暗号スイートを確認できます。
旧バージョン(TLS 1.0/1.1)の無効化設定は TLSバージョンの確認・設定方法 をご参照ください。

メールサーバーのSSL/TLS診断(STARTTLS)

SMTP・IMAP・POP3 のメールサーバーは、平文接続から STARTTLS コマンドでTLSに切り替える方式が一般的です。-starttls オプションでプロトコルを指定して診断できます。

# SMTP(ポート25/587)
openssl s_client -connect mail.example.com:587 -starttls smtp

# IMAP(ポート143)
openssl s_client -connect mail.example.com:143 -starttls imap

# POP3(ポート110)
openssl s_client -connect mail.example.com:110 -starttls pop3

# SMTPS / IMAPS / POP3S(最初からTLSのポート)は -starttls 不要
openssl s_client -connect mail.example.com:465
openssl s_client -connect mail.example.com:993

メールサーバーの証明書有効期限の確認にも、上記の | openssl x509 -noout -dates パイプがそのまま使えます。

verify エラーの読み方

s_client の出力には証明書検証の結果(Verify return code)が表示されます。代表的なエラーと原因は次のとおりです。

エラー表示 原因と対処
unable to get local issuer certificate (20) 中間証明書がサーバーに未インストール、またはクライアント側にルート証明書ストアがない。-showcerts でチェーンを確認し、中間証明書をインストール
certificate has expired (10) 証明書の有効期限切れ。証明書の更新 が必要。
self signed certificate (18) 自己署名証明書が返されている。SNI未指定でデフォルト証明書が返っている場合もあるため -servername を確認。
Hostname mismatch (62) 証明書のコモンネーム/SANと接続ホスト名が不一致。このエラーは -verify_hostname ホスト名 を指定した場合のみ検出されます(既定の s_client はホスト名を検証しないため、不一致でも 0 (ok) になります)。-ext subjectAltName でSANを確認。
Verify return code: 0 (ok) 検証成功(正常)。

※ ブラウザに表示される証明書エラーの対処は SSL証明書エラーの原因と対処 もご参照ください。

コマンドが使えない環境では(GUIツール)

openssl s_client 相当の診断をブラウザで実行
【ツール】SSL証明書インストールチェッカー(証明書チェーン・有効期限・TLSバージョン・HSTS・OCSP・STARTTLS まで日本語で一括診断)
【ツール】証明書確認ツール(証明書ファイル PEM/DER の内容解析・信頼ストア検証)

よくある質問

Q. openssl s_client で -servername を明示指定すべきなのはなぜですか?
OpenSSL 1.1.1以降は -connect のホスト名がDNS名であればSNIに自動設定されますが、旧バージョン(1.1.1未満)や -connect にIPアドレスを指定した場合はSNIが送信されず、SNI運用サーバーからデフォルト証明書(別ドメインの証明書)が返されることがあります。互換性と誤診断防止のため、-connect と同じホスト名を -servername で明示することを推奨します。なお -servername はSNI(どの証明書を要求するか)の指定であり、返された証明書のホスト名(SAN/CN)が一致するかの検証は行いません。ホスト名検証まで行うには -verify_hostname を、検証失敗で接続を中断するには -verify_return_error を併用します。
Q. 中間証明書の欠落を openssl s_client で確認するには?
openssl s_client -connect ドメイン名:443 -servername ドメイン名 -showcerts を実行し、出力の Certificate chain セクションを確認します。0番(サーバー証明書)しか表示されない場合は中間証明書が未インストールです。また Verify return codeunable to get local issuer certificate (20) の場合も中間証明書の欠落が疑われます。
Q. メールサーバー(SMTP/IMAP/POP3)のSSL証明書を openssl s_client で確認するには?
STARTTLS方式のポートでは -starttls オプションを使います。例:openssl s_client -connect mail.example.com:587 -starttls smtp(SMTP)、-starttls imap(IMAP/143)、-starttls pop3(POP3/110)。SMTPS(465)やIMAPS(993)のように最初からTLSのポートでは -starttls は不要です。出力を openssl x509 -noout -dates にパイプすれば有効期限も確認できます。
Q. リモートサーバーのSSL証明書の有効期限をコマンド1行で確認するには?
echo | openssl s_client -connect www.example.com:443 -servername www.example.com 2>/dev/null | openssl x509 -noout -dates を実行すると、notBefore(発行日)とnotAfter(有効期限)が表示されます。echoを標準入力に渡すことで対話状態にならず、すぐに切断されます。

📌 関連ページ:
OpenSSLとは?インストール・基本コマンドから証明書管理まで完全ガイド
OpenSSLコマンド集:CSR生成・証明書確認・有効期限チェック
中間証明書のインストール
証明書ファイルの形式(PEM・DER・PKCS#12など)と変換方法
SSL証明書インストール後の動作確認
TLSバージョンの確認・設定方法