ロードバランサーに接続しようとすると、クライアント SSL/TLS ネゴシエーションエラーが発生するのはなぜですか?

所要時間2分
0

ロードバランサーに接続しようとすると、セキュアソケットレイヤー (SSL)/Transport Layer Security (TLS) のネゴシエーションエラーが表示されます。このエラーが表示されるのはなぜですか?

簡単な説明

クライアントの TLS ネゴシエーションエラーは、クライアントが開始した TLS 接続がロードバランサーとのセッションを確立できなかったことを意味します。TLS ネゴシエーションエラーは、ロードバランサーのセキュリティポリシーがサポートしていないプロトコルまたは暗号を使用してクライアントがロードバランサーに接続しようとしたときに発生します。TLS 接続を確立するには、クライアントが以下をサポートしていることを確認してください:

  • 1 つ以上の一致する暗号
  • セキュリティポリシーで指定されたプロトコル

解決策

**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、使用している AWS CLI が最新バージョンであることを確認してください

ロードバランサーのセキュリティポリシーを確認してください

AWS マネジメントコンソールから次のように行います:

1.    Amazon Elastic Compute Cloud (Amazon EC2) コンソールを開きます。

2.    ナビゲーションペインの [ロードバランシング] で、[ロードバランサー] を選択します。

3.    ロードバランサーを選択し、[リスナー] タブを選択してください。

4.    セキュリティポリシーを表示します。
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 はカスタムセキュリティポリシーをサポートしていません。そして、デフォルトのセキュリティポリシーを含むセキュリティポリシーの詳細については、以下を参照してください。

(オプション) ロードバランサーのセキュリティポリシーをテストします

ロードバランサーのセキュリティポリシーでサポートされているプロトコルと暗号をテストするには、sslscan などのオープンソースのコマンドラインツールを使用します。

sslscan コマンドを使用します

sslscan コマンドは、任意の Amazon EC2 Linux インスタンスまたはローカルシステムにインストールすることで実行可能です。テストするロードバランサーが発信元 IP アドレスからの TLS 接続を受け入れるかどうかを確認してください。Amazon Linux EC2 インスタンスで sslscan を使用するには、

1.    Extra Packages for Enterprise Linux (EPEL) リポジトリを有効化します。

2.    sudo yum install sslscan コマンドを実行します。

3.    次のコマンドを実行して、サポートされている暗号についてロードバランサーをスキャンします。example.com は自身のドメイン名に置き換えてください。

[ec2-user@ ~]$ sslscan --show-ciphers example.com

openssl コマンドを使用します

または、openssl コマンドを使用してロードバランサーのセキュリティポリシーをテストすることもできます。openssl コマンドは、任意の Amazon EC2 Linux インスタンスまたはローカルシステムから実行できます。

特定の SSL/TLS バージョンでサポートされている暗号を一覧表示するには、openssl ciphers コマンドを使用します:

*$* openssl ciphers -v

たとえば、次のコマンドを実行すると、TLS バージョン TLSv1.2 でサポートされている暗号が表示されます:

*$* openssl ciphers -V | grep "TLSv1.2"

s_client コマンドを使用して TLS バージョンと暗号スイートをテストします。特定の暗号スイートの強度を調べるには、 ciphersuites.info などのウェブサイトリポジトリを使用できます。たとえば、次のコマンドを実行すると 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)

openssl コマンドを使用して、接続に使用する TLS プロトコルのバージョンを指定することもできます。次の例は、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

必要に応じて、ロードバランサーのセキュリティポリシーを更新してください

サポートされているプロトコルまたは暗号を使用し、必要なセキュリティレベルを実現するようにロードバランサーのセキュリティポリシーを更新するには、以下のアクションを実行します。