SSL/TLS通信が失敗する原因とは?【証明書エラー・ハンドシェイク失敗の診断手順】

  • URLをコピーしました!

「HTTPSに接続できない」
「証明書エラーが出て通信が確立しない」
「FWやLBを通すとSSL通信だけ失敗する」

これらのトラブルは、SSL/TLS通信の仕組みと証明書の役割を理解すると、 論理的に原因を切り分けられます。

本記事では、SSL/TLS通信が失敗する代表的な原因と、 実務で使える診断手順・確認コマンド・結果の読み方を解説します。

目次

SSL/TLS通信の基本構造

SSL/TLS通信は、大きく次のフェーズで構成されます。

  1. TCPコネクション確立(3ウェイハンドシェイク)
  2. TLSハンドシェイク
  3. 暗号化通信開始

証明書トラブルは②のTLSハンドシェイクで発生します。

TLSハンドシェイクで行われていること

  • サーバ証明書の提示
  • 証明書チェーンの検証
  • 有効期限・CN/SANの確認
  • 暗号スイートの合意

このどこかで失敗すると、SSL/TLS通信は確立しません。

SSL/TLS通信が失敗する代表的な原因

① 証明書の有効期限切れ

  • ブラウザで警告が表示される
  • 突然通信できなくなる

最も多い原因です。

② CN / SAN 不一致

証明書に記載されたホスト名と、アクセス先URLが一致しない場合、 検証エラーになります。

  • CN: www.example.com
  • アクセス: api.example.com

③ 中間証明書の欠落

サーバ証明書だけを設定し、 中間CA証明書を設定していないケースです。

  • 一部クライアントだけ接続不可
  • OSやブラウザ依存で失敗

④ 信頼されていない認証局(CA)

  • 自己署名証明書
  • 社内CAをクライアントが信頼していない

クライアント側の信頼ストア確認が必要です。

⑤ TLSバージョン不一致

  • サーバ:TLS1.2のみ許可
  • クライアント:TLS1.0のみ対応

レガシー機器で頻出します。

⑥ 暗号スイート不一致

共通で利用可能な暗号方式がない場合、 ハンドシェイクは失敗します。

確認手順①:TCPレベルの疎通確認

telnet <IP> 443

結果例

  • 接続できない → FW/経路問題
  • 接続できる → SSL/TLS層の問題

確認手順②:openssl による証明書確認

openssl s_client -connect example.com:443

確認ポイント

  • 証明書チェーンが最後まで表示されるか
  • Verify return code: 0 (ok) になっているか

よくあるエラー表示と意味

  • certificate has expired:有効期限切れ
  • unable to get local issuer certificate:中間証明書不足
  • hostname mismatch:CN/SAN不一致

FW・LBが絡む場合の注意点

  • SSLインスペクション有無
  • 証明書の再署名
  • クライアント側の信頼CA設定

FW/LBがSSL通信を終端しているかを必ず確認します。

実務での切り分けフロー

  1. TCP 443 接続確認
  2. openssl で証明書検証
  3. CN/SAN・期限確認
  4. 中間証明書確認
  5. TLS/暗号スイート確認

改善後の結果例

  • SSLエラーが解消
  • ブラウザ警告が消える
  • API通信が安定

まとめ

  • SSL/TLSトラブルの多くは証明書起因
  • opensslは最強の診断ツール
  • FW/LBが絡むと複雑化しやすい

SSL/TLS通信は「ブラックボックス」に見えがちですが、 構造を理解すれば容易に切り分け可能です。

目次