AWSでセキュアなWebサーバー構築！EC2× Route53でSSL/TLS対応サイトを作る

前回作成したEC2インスタンスにSSL/TLS証明書を導入し、HTTPSに対応したセキュアなWebサイトを構築していきます。
このチュートリアルでは、Route53を使用して、EC2インスタンスをHTTPS化する手順を詳しく解説していきます。

# 準備するもの
### 必要な環境
* AWSアカウント
* EC2インスタンス（Nginxまたは Apache インストール済み）
* 独自ドメイン

### 事前準備の参考記事
* EC2インスタンスの作成手順：[こちら](https://qiita.com/moeka-k0729/items/09eec46c6e855bfc3fe2#%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86)
* Webサーバーのインストール手順：[こちら](https://qiita.com/moeka-k0729/items/12b4bc88de32697a8464#%E3%82%B9%E3%83%86%E3%83%83%E3%83%971-nginx%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)


# ドメイン設定とSSL化の手順
### ステップ1: インスタンスの動作確認
まず初めに、作成したインスタンスが正常に動作しているか確認をします。
インスタンスのパブリックIPアドレスを使ってインスタンスにアクセスしてみましょう。
Nginxを使用している方は、下記のように表示がされるはずです。

:::note alert
重要: HTTPSの設定前に、必ずセキュリティグループで**443ポート**を開放してください。この設定を忘れると、後のSSL設定が正しくても接続できません。
:::
![スクリーンショット 2024-12-04 213214.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935088/8723f6a7-16cf-30c0-dc2a-f79cac429506.png)

### ステップ2: Route53でのドメイン設定
#### 1. ホストゾーンの設定
Route53でホストゾーンを作成していきます。

１. AWSコンソールにアクセス

    1. 検索バーに「Route53」と入力
    2. 検索結果から「Route53」を選択

![スクリーンショット 2024-12-04 213932.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935088/f64fe7d7-dca3-7cdc-e63a-206b942a4bdc.png)

２. ホストゾーン作成画面へ移動

    1. 左側メニューから「ホストゾーン」を選択
    2. 右上の「ホストゾーンの作成」をクリック
    
![スクリーンショット 2024-12-04 214227.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935088/46de71e6-42e1-d0cd-8f1e-6a8181ab4b96.png)

![スクリーンショット 2024-12-04 214350.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935088/705b9c4c-300c-b845-7888-cc2003af3fd2.png)

３. ホストゾーンの設定

    1. 「ドメイン名」欄に取得した独自ドメインを入力
    2.  他の設定はデフォルトのまま
    3. 「ホストゾーンの作成」ボタンをクリック

![スクリーンショット 2024-12-04 214714.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935088/465c966e-af49-1a44-ee19-9147d7edd7cb.png)

４. レコードの作成

    * ダッシュボードに戻り作成したホストゾーンを選択
    * 「レコード作成」ボタンをクリック
    * 「値」にEC2インスタンスのIPアドレスを入力
    * 「レコード作成」ボタンをクリック

![スクリーンショット 2024-12-04 220117.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935088/59d7f241-9c4a-c00a-aae6-398c8e5f5f37.png)

![スクリーンショット 2024-12-04 220223.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935088/777046af-5714-f485-da23-2714f180f92f.png)

#### 2. ネームサーバーの設定
ホストゾーンの設定ができたので、ネームサーバ情報を登録していきます。

1．Route53のホストゾーン画面でNSレコードを確認

    1. 作成したドメインのホストゾーンを選択
    2. 「ホストゾーンの詳細」で表示されるNSレコードの値をメモ
    3. 通常4つのネームサーバーが表示されます

![スクリーンショット 2024-12-04 220959.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935088/b7f4a405-89e4-eebf-ec2e-d45ab4013a9f.png)

2．ドメインプロバイダーでネームサーバーを設定

    1. ドメインプロバイダーの管理画面にログイン（例：Valueドメイン）
    2. 独自ドメインのネームサーバー設定を開く
    3. メモしたNSレコードを入力(４つ)
    4. 保存ボタンを押す

![スクリーンショット 2024-12-04 221727.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935088/ea576566-7a2a-6f6d-e94c-aca23a4570af.png)

:::note info
* ドメインプロバイダーによって設定画面は異なります
* DNSの変更反映には最大72時間程度かかる場合があります
:::


### ステップ3: SSL化
Let's Encryptから無料SSL証明書を発行するためのツールcertbotを使用してSSL化を行います。

１. Nginxの設定ファイルの準備

    1. インスタンスにログイン
    2. 設定ファイルを開き設定を追加する

インスタンスへのログイン方法は[こちら](https://qiita.com/moeka-k0729/items/d2c323c90fcbd5e70515#%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E6%89%8B%E9%A0%86)

#### 2. ネームサーバーの設定
ホストゾーンの設定ができたので、ネームサーバ情報を登録していきます。

1．Route53のホストゾーン画面でNSレコードを確認

    1. 作成したドメインのホストゾーンを選択
    2. 「ホストゾーンの詳細」で表示されるNSレコードの値をメモ
    3. 通常4つのネームサーバーが表示されます

![スクリーンショット 2024-12-04 220959.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935088/b7f4a405-89e4-eebf-ec2e-d45ab4013a9f.png)

2．ドメインプロバイダーでネームサーバーを設定

    1. ドメインプロバイダーの管理画面にログイン（例：Valueドメイン）
    2. 独自ドメインのネームサーバー設定を開く
    3. メモしたNSレコードを入力(４つ)
    4. 保存ボタンを押す

![スクリーンショット 2024-12-04 221727.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935088/ea576566-7a2a-6f6d-e94c-aca23a4570af.png)

:::note info
* ドメインプロバイダーによって設定画面は異なります
* DNSの変更反映には最大72時間程度かかる場合があります
:::
:::

### ステップ3: SSL化
Let's Encryptから無料SSL証明書を発行するためのツールcertbotを使用してSSL化を行います。

#### １. Nginxの設定ファイルの準備

    1. インスタンスにログイン
    2. 設定ファイルを開き設定を追加する

インスタンスへのログイン方法は[こちら](https://qiita.com/moeka-k0729/items/d2c323c90fcbd5e70515#%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E6%89%8B%E9%A0%86)をご覧ください。
ログインできたら、Nginx設定ファイルを下記コマンドで開きます。
```bash
sudo nano /etc/nginx/conf.d/default.conf
```

設定ファイルが開けたら下記を書き込み、nginxを再実行します。

```bash
server {
    listen 80;
    server_name 独自ドメイン;
}
```
(再実行コマンド)
```bash
sudo systemctl restart nginx
```


#### ２. SSL証明書を発行

    1. Let's Encryptから無料SSL証明書を発行するためのツールcertbotをインストール
    2. Certbotの確認
    3. 証明書の発行

(cerbotをインストールするコマンド)

```bash
sudo dnf install -y certbot python3-certbot-nginx
```
(Cerbotの確認)
```bash
certbot --version
```
(バージョンが表示される)
```bash
certbot 2.6.0
```
(証明書の発行)
```bash
sudo certbot --nginx -d 独自ドメイン
```

証明書の発行コマンドを入力すると、メールアドレスの入力が求められるので、入力して下さい。その後質問があるので、すべて「y」と入力します。
最後に、「Congratulations! You have successfully enabled HTTPS on～」とでてきたら無事SSL化できています。

![スクリーンショット 2024-12-04 224734.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935088/f663145f-5704-2f70-04d6-e284be9b9d26.png)


(SSLの有効期限切れてしまった場合)
```bash
sudo certbot renew --cert-name 独自ドメイン
```
(どんな証明書が存在するかの確認)
```bash
sudo certbot certificates
```

### ステップ4: 動作確認
サイトにアクセスして、以下の点を確認します：

    1. ブラウザのアドレスバーに https:// が表示されている
    2. アドレスバーの左側に鍵のマークが表示されている
    3. サイトが正常に表示される

以上の3点が確認できれば、SSL化は正常に完了しています。。

![スクリーンショット 2024-12-05 231105.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935088/d7c9ef91-4e04-ba79-4868-b0326b815a2f.png)


# おわりに
AWS上のインスタンスのSSL化は、セキュアなウェブサイトを運用する上で必須のスキルです。今回の手順が、みなさんのウェブ開発のお役に立てば幸いです。最後までご覧いただきありがとうございました！