AWSでデプロイしたアプリにhttpsで接続できるようにする為、ELBを使いSSL認証しました。
今回は設定の際の大まか流れと、細かい用語などを整理してみます。
実際の手順などは参考サイトに詳しく載っているので、ここでは割愛します。
目的
アプリのhttps接続を可能にしたい。
構成はELB + ACM + Route53 でhttps化。
まず、SSL通信が成立するまでの流れを整理
- ブラウザ:SSL通信をリクエストする
- サーバー:SSL証明書を送付する
- ブラウザ:電子署名の検証により「SSL証明書に記載されたドメイン」と「通信先のドメイン」が同じであることを確認する
- ブラウザ/サーバー:SSL通信を行うために共通鍵を交換する
- ブラウザ/サーバー:共通鍵を使って送受信するデータを暗号化・復号してSSL通信を成立させる
用語の整理
共通鍵
個々の公開鍵や秘密鍵は必要なく、サーバーとブラウザで同じ鍵(共通鍵)を使ってデータを暗号化、復号してやり取りを行います。SSLでは、この共通鍵で安全にやり取りするために、電子署名の検証によるドメイン認証と鍵交換が行われます。
httpsとは
「HyperText Transfer Protocol Secure」の略称で、インターネット上のHTTP (HyperText Transfer Protocol)通信が、SSLによって暗号化されたプロトコルのことです。SSLによって通信データは保護され、第三者が盗み見しようとしてもデータの内容を解読することができません。
SSLとは
SSL(Secure Sockets Layer)とは、インターネット上におけるウェブブラウザとウェブサーバ間でのデータの通信を暗号化し、送受信させる仕組みのことです。SSLは悪意ある第三者による盗聴を防いだり、送信される重要な情報の改ざんを防ぐ役割を持っています。https://jp.globalsign.com/ssl-pki-info/ssl_beginner/aboutssl.html
SSL(https)を導入するには
ウェブサイトでSSL(https)を利用する場合、通信の暗号化に必要な鍵とウェブサイトの運営者の情報が含まれた「SSLサーバ証明書」を、サーバにインストールする必要があります。SSLサーバ証明書は、信頼のおける第三者機関(GMOグローバルサインのような認証局)にて、ウェブサイトの運営者が正しい運営者であるかどうかの審査を行い発行されます。SSLサーバ証明書を導入することにより、ユーザは証明書を通じてウェブサイトの運営者情報や通信の暗号化によって保護されていることを確認することが可能です。
SSLサーバー証明書(以下、SSL証明書)を利用するには
参考サイト
https://ssl.sakura.ad.jp/column/ssl/
なんかいっぺんに理解しようと思うと、こんがらがりそうですが、、、
実際の大まかな流れ
1のドメインの取得に関しては「お名前.com」を使いました。(1年間で1円のドメインを取得)
お名前.comでのドメイン取得後のNSの変更に関しては下記のqiita記事を参考にするといいと思います。
https://qiita.com/ysKey2/items/0545e13ec05def42ad55
2~4の流れに関しては下記サイトを参考にしました。
https://dev.classmethod.jp/articles/aws-web-server-https-for-beginner/#toc-6
https://recipe.kc-cloud.jp/archives/11084
5. ロードバランサーのリスナーに80ポートを追加し、httpsにリダイレクトさせるよう設定。
AWSの公式ドキュメントだと説明文が途中、理解できず(泣)、結局個人のブログを拝見して、設定しました。
にしてもAWSの公式ドキュメントの日本語難しくありません、、?
https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/configuring-https-httpredirect.html
https://zenn.dev/shota_imazeki/books/7a0f8e2f4cccd846fb16/viewer/4797fc
以上。
感想
実際、やってみて一番詰まったのはドメインのNSサーバの変更の部分でした。大体ドメイン取得サイトとして「freenom」を紹介している記事が多かったのですが、自分はfreenomでのログインが何故かうまくいかず(泣)、「お名前.com」に切り替え、ドメイン取得からNSサーバを変更するまでの流れが一番時間がかかりました。。
その後は特に詰まる部分はなかったので、AWSのそれぞれの機能が理解できていれば、そこまで難しい作業ではないと思います。
httpのリダイレクト設定は、当初予定してなかったものの、設定ができているか確認しようとした際、「ページが表示されない」という事態になり、nslookupなど使って疎通できているか調べたりしていたのですが、結論httpでアクセスしてしまっていた事が原因でした。
ので、httpをリダレクトさせる設定を行うことにしました。