Tech Hotoke Blog

IT観音とは私のことです。

Vue×SpringでSPA作成 11 - 2【セキュアな通信で安心したい】

f:id:TechHotoke:20220224185505p:plain

まえがき

こちらの記事の続編です。

techhotoke.hatenablog.com

目的

VueとSpringで作成したプロジェクトの構築手順の備忘録。 備忘録のため、詳細な説明を省略している部分があります。

前提

  • 基本的なJavaの知識やSpring、Vueの知識があること
  • AWSに関する基本的な知識があること
  • ネットワークに関する基本的な知識があること
  • ドメインが取得されていること

環境

  • Java 11
  • Spring Boot2.5.6
  • Gradle 7.1.1
  • Vue2.6
  • IDESTS
  • AWS(EC2,RDS,ELBなど)

やること

  • クライアントからの通信のSSL
  • ALB-EC2間の通信のSSL

SSL(Secure Socket Layer)とは

ウェブブラウザとウェブサーバ間でのデータの通信を暗号化し、送受信させる仕組み。 http通信のままだと、パスワードなどの認証情報が平文のままネットワーク上を流れてしまうため、情報漏洩のリスクが常に付きまといます。 ただし、SSL化していても、プロキシサーバーなどを用いた中間者攻撃では盗聴・改ざんが出来るため注意は必要です。。。

クライアントーALB間のSSL

  • AWS Certificate Managerから証明書>証明書をリクエストを選択
  • ドメイン名を入力しリクエストを作成
  • 発行された証明書のリンクを押下
  • Route53でレコードを作成を押下
  • ロードバランサーのリスナーを選択
  • プロトコルがHTTP通信の項目を選択
  • プロトコルHTTPSに変更し(ポートは443のまま)で、画面下部の項目を添付画像のように変更します

f:id:TechHotoke:20220222173113p:plain

  • ELBに割り当てているセキュリティグループのインバウンドルールを80(HTTPのポート)から443(HTTPSのポート)に変更します

  • https通信でURLにアクセスし、南京錠のアイコンが表示されていればOKです(一応HTTP通信を試してみるとポートを開いていないのでアクセスできません)

f:id:TechHotoke:20220222181848p:plain

ALB-EC2間のSSL

つづいて、ALBとEC2間の通信もHTTPS化していきます。

  • EC2インスタンスに割り当てられているセキュリティグループのインバウンドルールをHTTPS443ポートに変更

  • ターゲットグループのリスナープロトコルは443、ルーティングプロトコルは8080に設定します

f:id:TechHotoke:20220222191122p:plain

  • statusがhealthyであることを確認し、再度URLにアクセスしてみます

  • 502エラーが出ているので対処します

  • リスナーに80番ポートを追加して、ターゲットグループに先ほどまでHTTP通信をおこなっていたインスタンスを選択。

  • EC2インスタンスに80番ポートを開けて、アクセスしてみます。

  • 502エラーは返されず、画面が表示されました。なのでHTTPS通信固有の問題のようです。

  • ALBのモニタリングタブを確認すると、ログにエラーが出力されているため、ALBがエラーを返却していることが分かります。

f:id:TechHotoke:20220222191453p:plain

  • 下記記事によると、ELB-EC2インスタンス間でHTTPS通信を行う場合、第三者制の証明書が必要になるようなので、ここが原因のような雰囲気が漂っていますね。。。

EC2 インスタンスとロードバランサー間の SSL 接続を有効にする

三者SSL証明書の取得

  • 今回はLet'sEncriptから取得したいと思います。(無料ですが、90日で期限が切れるので、自動更新設定などは別途行う必要があります)

はじめる - Let's Encrypt - フリーな SSL/TLS 証明書

  • シェルの管理者権限がある場合は、Certbot という ACME クライアントを使うのが推奨されているので、インストールします

f:id:TechHotoke:20220222191805p:plain

チュートリアル: Amazon Linux 2 に SSL/TLS を設定する - Amazon Elastic Compute Cloud

<ここの続きの部分ですが、EC2-ELB間の通信はプライベートIPアドレスにて行われるという点から通信をSSL化する必要性がそもそもあまりないということから実装は行わないこととしました。EC2-ELB間の通信をSSL化するためには第三者制の証明書が必要だいう学びなどがあったのでそのまま記事としては残しますが、悪しからず。。。>

参考

AWSでSSL化する方法を伝授!!! - Qiita

Application Load Balancerで設定する4種類のポート番号の意味を理解しよう | DevelopersIO