ホーム
Sponserd by↑転職したい人向け、ベンチャー企業の採用動画があります

AWSのEC2で無料でhttps化(ELBなし)

備忘録です。

世の中のEC2で無料でhttps化する記事は

Elastic Load Balancing

という、月約2000円のサービスや

Amazon CloudFront

という、従量課金制のサービスを使ったものばかりだったので、AWSのドキュメントにも書かれている

Let’s Encrypt

という無料でSSL証明書を発行してくれているサービスを使って実装したいと思います。

前提条件

Amazon Linux2 Elastic IPで固定IPを設定済み httpdでアパッチを起動している状態。

参考文献

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/SSL-on-amazon-linux-2.html

実装方法

Certbotというツールを使用して実装します。

Lets Encryptは3ヶ月間という有効期限をもったSSL証明書の発行をしてくれます。

まず、EC2のインスタンスにssh接続しましょう。

秘密鍵.pemファイルがあるディレクトリで

$ ssh -i "*****.pem" ec2-user@12.345.678.910

EC2に入ったら

$ sudo wget -r --no-parent -A 'epel-release-*.rpm' http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/
$ sudo rpm -Uvh dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-*.rpm
$ sudo yum-config-manager --enable epel*
$ sudo yum repolist all

上記のコマンドでEPELというリポジトリパッケージをEC2にインストールします。

4つめのコマンドはrepolistが入ったかを確認するためのコマンドです。

ファイルの編集をします。

/etc/httpd/conf/httpd.conf

設定ファイルを編集するときには必ずバックアップを取りましょう。

cd /etc/httpd/conf
sudo cp httpd.conf httpd_bak.text
ls

cpはコピーのこと。1つめのファイルを2つ目のファイル名でコピーするというコマンドです。

lsでリストを表示、コピーされてるか確認しましょう。

では編集していきます。

sudo vim httpd.conf

(Listen 80の下に)

<VirtualHost *:80>
DocumentRoot "/var/www/html"
ServerName "example.com"
ServerAlias "www.example.com"
</VirtualHost>

を追記します。

ServerNameやServerAliasはそれぞれの環境に合わせて書き換えてください.

DocumentRootはindex.htmlがあるディレクトリに直してください。Laravelではpublicディレクトリのことです。

アパッチを再起動して、エラーが出ないか確認します。

sudo systemctl restart httpd

エラーが出る場合は間違っているので、一旦元のファイルに戻しましょう。

//エラーが出たら戻す。
sudo cp httpd_bak.text httpd.conf

バックアップファイルを編集してミスったファイルに上書きして戻すことができます。

Certbotのインストール

sudo yum install -y certbot python2-certbot-apache

依存パッケージも一緒にインストールしてます。

起動します。

sudo certbot

あとは質問に答えるだけで実装されます。

質問の内容は下記の通り。

①メールアドレスは? →自分のメールアドレス入れる

②規約に同意しますか? → A

③メーリングリストに登録しますか? → Y or N

④どっちの名前でhttpsする? → 空欄でEnter

⑤HTTP クエリを HTTPS にリダイレクトするどうかの確認 → HTTP 経由でサーバーに接続するには、「1」、HTTPS 経由の暗号化接続のみ受け入れる場合は、「2」(自分は2にしました)

⑥Congratulations! You have successfully とでたら成功です。

確認してみてください。

自動更新の設定

今実装したのは無料の3ヶ月が有効期限の証明書です。

3ヶ月後に自動的に新しい証明書を取りに行く設定をします。

sudo vim /etc/crontab

下の方に追記

39 1,13 * * * root certbot renew --no-self-upgrade

これでOKです。

sudo systemctl restart crond

再起動して反映させます。

この設定で自動更新が完了しました。

AWSのドキュメントによれば、このあとテストと強化を推奨しているので、ぜひやってみてください。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/SSL-on-amazon-linux-2.html#ssl_test

以上です!