Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
ロードバランサーに接続する際、クライアントで SSL/TLS ネゴシエーションエラーが発生する理由を知りたいです。
Elastic Load Balancer (ELB) への接続時に発生する SSL/TLS ネゴシエーションエラーをトラブルシューティングしたいです。
簡単な説明
このエラーは、クライアントとロードバランサー間で安全な接続のネゴシエーションに失敗した場合に発生します。通常、この問題の要因はサポートされていない暗号またはプロトコルバージョンです。
TLS 接続を確立する際は、クライアントがロードバランサーのセキュリティポリシーで定義されている暗号とプロトコルを 1 つ以上サポートしていることを確認してください。
解決策
**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
ロードバランサーのセキュリティポリシーを特定する
ロードバランサーのセキュリティポリシーを特定するには、次の手順を実行します。
- Amazon Elastic Compute Cloud (Amazon EC2) コンソールを開きます。
- ナビゲーションペインの [ロードバランシング] で **[ロードバランサー]**を選択します。
- 該当するロードバランサーを選択し、[リスナー] を選択します。
- セキュリティポリシーが表示されます。
Application Load Balancer と Network Load Balancer については、[セキュリティポリシー] 列にセキュリティポリシーが表示されます。
Classic Load Balancer については、[暗号] 列の [変更] を選択するとセキュリティポリシーが表示されます。
AWS CLI を使用するには、次のいずれかのコマンドを実行します。
- Application Load Balancer と Network Load Balancer の場合は describe-listeners コマンドを実行します。
- Classic Load Balancer の場合は、describe-load-balancers コマンドを実行します。
サポートされているプロトコルと暗号を判別する
Classic Load Balancer はカスタムセキュリティポリシーをサポートしています。ただし、Application Load Balancer と Network Load Balancer はカスタムセキュリティポリシーをサポートしていません。
セキュリティポリシーの詳細については、次のドキュメントを参照してください。
- Application Load Balancer 用のセキュリティポリシー
- Network Load Balancer 用のセキュリティポリシー
- Classic Load Balancer 用の事前定義済み SSL セキュリティポリシー
(オプション) ロードバランサーのセキュリティポリシーをテストする
ロードバランサーのセキュリティポリシーでサポートされているプロトコルと暗号をテストするsslscan や openssl などのオープンソースのコマンドラインツールを使用します。
詳細については、GitHub のウェブサイトで「sslscan」を参照してください。
sslscan コマンドを使用する
sslscan コマンドをインストールし、Amazon Linux EC2 インスタンスまたはローカルシステムから実行します。ロードバランサーがソース IP アドレスからの TLS 接続を受け入れることを確認します。
Amazon Linux EC2 インスタンスで sslscan を使用するには、次の手順を実行します。
-
次のコマンドを実行します。
sudo yum install sslscan -
ロードバランサーにサポートされている暗号があるかどうかをスキャンするには、次のコマンドを実行します。example.com を実際のドメイン名に置き換えます。
[ec2-user@ ~]$ sslscan --show-ciphers example.com注: Amazon Linux 2023 (AL2023) は EPEL をサポートしていません。
openssl コマンドを使用する
openssl コマンドを使用してもロードバランサーのセキュリティポリシーをテストできます。openssl コマンドを Amazon Linux EC2 インスタンスまたはローカルシステムから実行します。
特定の SSL/TLS バージョンでサポートされている暗号を一覧表示するには、次のコマンドを実行します。
*$* openssl ciphers -v
次のコマンドを実行すると、TLS バージョン TLS 1.2 でサポートされている暗号が表示されます。
*$* openssl ciphers -V | grep "TLSv1.2"
s_client コマンドを実行し、TLS バージョンと暗号スイートをテストします。特定の暗号スイートの強度を調べるには、TLS Ciphersuite Search などのサードパーティウェブサイトのリポジトリを使用します。たとえば、次のコマンドを実行すると、出力には www.example.com 用の暗号が表示されます。
openssl s_client -connect example.com:443
スイート TLS_PSK_WITH_AES_128_CBC_SHA は低強度です。このスイートをサーバーに対して使用すると、次のエラーが発生します。
openssl s_client -connect example.com:443 -cipher PSK-AES128-CBC-SHA -quiet 140062732593056:error:140740B5:SSL routines:SSL23_CLIENT_HELLO:no ciphers available:s23_clnt.c:508:
スイート ECDHE-RSA-AES128-GCM-SHA256 は高強度です。このスイートをサーバーに対して使用すると、次のような成功メッセージが表示されます。
openssl s_client -connect example.com:443 -cipher ECDHE-RSA-AES128-GCM-SHA256 New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES128-GCM-SHA256 Session-ID: 73B49649716645B90D13E29656AEFEBF289A4956301AD9BC65D4832794E282CD Session-ID-ctx: Master-Key: C738D1E7160421281C4CAFEA49941895430168A4028B5D5F6CB6739B58A15235F640A5D740D368A4436CCAFD062B3338 Key-Arg : None Krb5 Principal: None PSK identity: None PSK identity hint: None Start Time: 1647375807 Timeout : 300 (sec) Verify return code: 0 (ok)
接続に使用する TLS プロトコルのバージョンを指定するには、openssl コマンドを実行します。次の例では、TLS 1.1 がサーバーでサポートされていることを確認するテストを示しています。
openssl s_client -connect example.com:443 -tls1_1 -quiet depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root G2 verify return:1 depth=1 C = US, O = DigiCert Inc, CN = DigiCert Global CA G2 verify return:1 depth=0 CN = *.peg.a2z.com verify return:1
(オプション) Application Load Balancer の接続ログと Network Load Balancer のアクセスログを確認する
クライアントが Application Load Balancer の HTTPS リスナーに接続する場合は、接続ログを参考にプロトコルと暗号を確認します。接続で使用するプロトコルと暗号は、tls_protocol および tls_cipher フィールドに表示されています。TLS ネゴシエーションに失敗した場合、tls_verify_status フィールドは Failed:$error_code に、tls_protocol および tls_cipher フィールドは - に設定されます。
クライアントが Network Load Balancer の TLS リスナーに接続する場合は、アクセスログを参考にプロトコルと暗号スイートを確認します。接続で使用するプロトコルと暗号は、tls_protocol_version および tls_cipher フィールドに表示されています。TLS ネゴシエーションが失敗した場合、アクセスログは記録されません。
詳細については、「Application Load Balancer の接続ログ」および「Network Load Balancer のアクセスログ」を参照してください。
ロードバランサーのセキュリティポリシーを更新する
サポートされているプロトコルまたは暗号を使用してセキュリティを強化するには、ロードバランサーのセキュリティポリシーを更新します。セキュリティポリシーを更新する方法の詳細については、次のドキュメントを参照してください。
- Application Load Balancer の場合は「セキュリティポリシーを更新する」を参照してください。
- Network Load Balancer の場合は「セキュリティポリシーを更新する」を参照してください。
- Classic Load Balancer の場合は「コンソールを使用して SSL ネゴシエーション設定を更新する」を参照してください。
- 言語
- 日本語

