AWS プログラミング

NLB経由でHTTPS通信しようとしたら「400 Bad Request」が表示された時

AWSのロードバランサーの設定をしていて、なぜか「400 Bad Request」が出たのでその対応です。

 

原因

なんともまあ情けない原因ですが、

リスナーをHTTPで受け付けてそのトラフィックをHTTPSに流そうとしていたことが原因でした。

 

エラーメッセージには以下のように表示されていました。

The plain HTTP request was sent to HTTPS port

 

対処法

LBのリスナーにHTTPSを追加してそのトラフィックを流して、証明書をアタッチして完了!

これだけ!と言いたいところでしたが、若干のつまりポイントがありました。

 

TCP:443とTLS:443

NLBではリスナーを設定するときにプロトコルとポートを指定します。

そのときにHTTPS通信をしたいと思ったら、以下の2通りがあります。

 

  • TCP: 443
  • TLS: 443

 

上記の違いは以下の通り。(間違ってたら誰かご指摘ください。。。)

 

  • TCP: 443

こちらはHTTPSで受け付けたリクエストをそのままターゲットに流す。

つまりSSLによる暗号化はNLBでは行われず、ターゲット先に委ねられる。(もはや証明書をリスナーにアタッチする項目がなかった)

 

  • TLS: 443

NLBで暗号化と復号化を行う。つまりリスナーにSSL証明書を1つ以上アタッチする必要がある。

 

完全にメモ書きでしかも正しいかわからないです。

-AWS, プログラミング
-,

© 2020 クラインの備忘壺