F5で「SSL Handshake Failed for TCP」が出る原因は?確認すべきポイント

目次

はじめに

「F5のログに『SSL Handshake Failed for TCP』と出ているけれど、どこを確認すればいいの?」
「証明書を設定したのにSSL通信が失敗するのはなぜ?」と困っていませんか。

F5 BIG-IPでHTTPS通信を設定したあと、クライアントからVirtual Serverへ接続できなかったり、F5からバックエンドサーバーへの通信だけ失敗したりすると、証明書とネットワークのどちらを調べるべきか迷ってしまいますよね。

この記事では、エラーが発生している通信区間を特定し、SSL Profileや証明書、TLS設定を確認しながら原因を切り分ける手順を紹介します。

F5の「SSL Handshake failed for TCP」とは何を示すエラー?

F5のログに「SSL Handshake failed for TCP」と表示された場合は、SSL/TLSハンドシェイクが途中で失敗し、正常に完了しなかったことを示しています。

そのため、ログが記録された時刻と実際のアクセス状況を照合し、利用者の接続失敗やWebサイトの表示エラーが発生しているかを確認してから原因を切り分けます。

SSL/TLSハンドシェイクが完了しなかったことを示すログ

「SSL Handshake failed for TCP」は、F5がSSL/TLS通信を確立するためのハンドシェイクを開始したものの、途中で失敗したことを示すログです。

SSL/TLSでは通信を始める前に、TLSバージョンや暗号方式などの条件を確認します。

このログが記録されている場合は、その接続でSSL/TLSハンドシェイクが正常に完了しなかったと考えられます。

このログだけでは失敗した原因を特定できない

「SSL Handshake failed for TCP」というログだけでは、ハンドシェイクに失敗した原因までは分かりません。

証明書やTLSバージョン、暗号スイートなど、さまざまな要因が考えられるためです。

原因を調べるときは、同じ時刻に記録されたほかのログや通信状況もあわせて確認しましょう。

ログが出たときに利用者への通信影響があるか確認する

ログが記録されたら、同じ時刻に利用者の接続失敗やWebサイトの表示エラーが起きていないか確認します。

たとえば13時10分にログが出ていれば、その前後のアクセス状況と照らし合わせてみましょう。

ログと通信障害の発生時刻を確認することで、実際に利用者へ影響していたか判断しやすくなります。

SSL Handshake failed for TCPが発生する主な原因

F5で「SSL Handshake failed for TCP」が発生する場合は、SSL/TLS通信に必要な設定がクライアント・F5・接続先サーバーの間で一致していない可能性があります。

SNIや接続先の設定、TCP接続や途中の通信経路にも問題がないか順番に切り分ける必要があります。

TLSバージョンやCipherが一致していない

クライアントとF5、またはF5と接続先サーバーで利用できるTLSバージョンやCipherが一致していないと、SSL/TLSハンドシェイクは成立しません。

たとえば、片方がTLS 1.2のみ、もう片方がTLS 1.3のみを許可している場合は、共通するTLSバージョンがないため接続できません。

Cipherについても、双方で利用できる暗号スイートがあるか確認しましょう。

証明書や証明書チェーンに問題がある

F5や接続先サーバーが提示する証明書に問題があると、検証の途中でSSL/TLSハンドシェイクが失敗することがあります。

主な原因として、証明書の有効期限切れや中間CA証明書を含む証明書チェーンの設定不備が挙げられます。

使用している証明書の有効期限と、証明書チェーンが正しく設定されているかを確認してみましょう。

Client SSL・Server SSLプロファイルの設定に問題がある

F5では、クライアントとF5間をClient SSLプロファイル、F5と接続先サーバー間をServer SSLプロファイルで制御します。

それぞれの証明書やTLS設定が通信相手の条件と合っていない場合、ハンドシェイクが失敗することがあります。

どちら側でエラーが起きているかを確認し、該当するプロファイルのTLSやCipherなどを見直しましょう。

SNIや接続先の設定が一致していない

SNIで指定するホスト名と接続先サーバーの設定が合っていない場合、適切な証明書やSSL/TLS設定が選択されず、ハンドシェイクに失敗することがあります。

特に、1つのIPアドレスで複数のHTTPSサイトを運用している環境では注意が必要です。

F5から送信するSNIと、接続先サーバーに設定されているホスト名が一致しているか確認しましょう。

TCP接続や通信経路に問題がある

SSL/TLSハンドシェイクの途中でTCP接続が切断されると、「SSL Handshake failed for TCP」が記録されることがあります。

クライアント・F5・接続先サーバー間で、TCPのRSTやタイムアウトが発生していないか確認してみましょう。

原因を切り分けるときは、F5までの経路とF5から接続先サーバーまでの経路を分けて確認すると分かりやすくなります。

F5でSSL Handshake failed for TCPの原因を切り分ける手順

「SSL Handshake failed for TCP」の原因を切り分けるときは、まずログに記録された送信元・宛先IPとポートを確認し、どの通信で失敗したのかを特定します。

さらに、証明書とSNIの設定を確認し、最後にF5から接続先サーバーまで正常に通信できるかを順番に確認します。

ログから送信元・宛先IPとポートを確認する

まずF5のログを確認し、「SSL Handshake failed for TCP」が記録された通信の送信元・宛先IPとポートを特定します。

これらの情報から、どのクライアントからどのVirtual Serverや接続先サーバーへ向かった通信なのかを絞り込めます。

あわせて発生時刻も確認し、調査する通信を特定しておきましょう。

Client SSL側とServer SSL側のどちらで失敗しているか確認する

次に、ハンドシェイクの失敗がClient SSL側とServer SSL側のどちらで起きているかを確認します。

クライアントからF5までならClient SSL側、F5から接続先サーバーまでならServer SSL側が調査対象です。

どちらで失敗しているかを切り分けると、確認するSSLプロファイルを絞り込みやすくなります。

SSLプロファイルとTLS・Cipherの設定を確認する

失敗している側が分かったら、適用されているClient SSLまたはServer SSLプロファイルを確認します。

通信相手が使用するTLSバージョンが許可されているかを照合し、Cipherについても双方で共通して利用できる暗号スイートがあるか確認しましょう。

設定が合っていなければ、ハンドシェイクが成立しない原因になります。

TLSやCipherを確認しても原因が分からない場合は、SSL/TLSハンドシェイク自体がどの段階で失敗しているのかを確認すると切り分けやすくなります。
▶SSL/TLSハンドシェイクとは?仕組みと通信の流れをわかりやすく解説

証明書とSNIの設定を確認する

SSLプロファイルに設定されている証明書の有効期限や証明書チェーンに問題がないか確認します。

SNIを使用している場合は、F5で指定されているServer Nameと対象のホスト名も照合しましょう。

設定が一致していないと想定した証明書が選択されないことがあるため、実際の接続先に合わせて確認することが大切です。

接続先サーバーまで正常に通信できるか確認する

Server SSL側を調べる場合は、F5から接続先サーバーのIPアドレスとHTTPSポートまでTCP接続できるか確認します。

RSTが返されたり、応答がなくタイムアウトしたりすると、SSL/TLSハンドシェイクを正常に進められません。

まずTCP接続が成立していることを確認してから、SSL/TLSの設定を切り分けていくと分かりやすいでしょう。

ログだけで原因を特定できない場合の調査方法

F5のログを確認してもSSL/TLSハンドシェイクが失敗した箇所を特定できない場合は、対象の通信をパケット単位で調査します。

取得した結果をSSLプロファイルや証明書などの設定と照合し、変更が必要な箇所を判断します。

tcpdumpで対象の通信をキャプチャする

F5のログだけで失敗箇所を特定できない場合は、tcpdumpで対象の通信をキャプチャします。

ログで確認した送信元・宛先IPやTCPポートを条件に指定すると、調査に必要なパケットを絞り込めます。

取得したパケットから、TCP接続後にTLSハンドシェイクがどこまで進んでいるか確認してみましょう。

tcpdumpで通信を取得したものの、どのパケットを見ればよいか迷う場合は、基本的な見方や解析方法も確認しておきましょう。
▶tcpdumpの使い方とは?パケットキャプチャの基本と確認方法

SSLdumpなどでTLSハンドシェイクの失敗箇所を確認する

キャプチャした通信をSSLdumpなどで解析し、TLSハンドシェイクがどの段階で止まっているかを調べます。

Client HelloやServer Hello、Certificateなどを時系列で追うと、通信が終了した箇所を絞り込みやすくなります。

TLS Alertが返されている場合は、その内容もあわせて確認しましょう。

調査結果から設定変更が必要な箇所を判断する

パケット調査の結果を、F5のSSLプロファイルや証明書などの設定と照らし合わせます。

TLSバージョンやCipherの段階で失敗していればSSLプロファイル、証明書の処理で失敗していれば証明書や証明書チェーンを中心に確認します。

原因となる設定を絞り込んでから、必要な変更を進めるとよいでしょう。

まとめ

F5で「SSL Handshake Failed for TCP」が記録されても、ログだけを見て原因を判断するのは難しいため、まずはどの通信でハンドシェイクが失敗しているのかを切り分けることが大切です。

Client SSL側とServer SSL側を分けて確認し、TLSやCipher、証明書、SNIなどを順番に見直していきましょう。

それでも原因が分からない場合は、tcpdumpなどで実際の通信を確認すると、ハンドシェイクが止まった段階を絞り込みやすくなります。

すぐに設定を変更するのではなく、失敗している箇所を確かめてから必要な部分を見直すことで、落ち着いて原因を切り分けられます。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

目次