Let’s Encryptを利用してEC2をHTTPSする方法

概要

無料のSSLサーバー証明書「Let’s Encrypt」を利用して、EC2 (Amazon Linux2)に適用する方法。

Let’s Encrypt
無料で利用できるサーバー証明書。有効期限は90日間であるが、再発行がいつでも可能。
スポンサーはシスコシステムズやFacebookなどIT最大手の企業で、信頼性も高い。

前提条件

・AWSアカウントを所持していること。
・EC2インスタンスがインターネットと通信できること。
・EC2インスタンスがLinuxOSで作成済みであること。
・Apacheがインストールされていること。

 

Let’s Encryptのインストール

① ターミナル経由でEC2インスタンスにSSHで接続します。

ssh -i "******.pem" ec2-user@xxx.xxx.xxx.xxx

② snapを利用して「certbot」をインストールします。

sudo yum install snapd

③ OSの再起動後にsnapが自動実行できるように以下のコマンドを入力します。

sudo systemctl enable snapd

④ シンボリックリンクを作成します。

sudo ln -s /var/lib/snapd/snap /snap

⑤ snapのcoreをインストールします。

sudo snap install core

⑥ SSL証明書を生成するコマンドを入力します。

sudo certbot certonly --webroot -w /var/www/html -d (FQDN名) --email (メールアドレス) -n --agree-tos

⑦ SSLを利用するために「mod_ssl」をインストールします。

sudo yum -y install mod_ssl

⑧ ssl.confのバックアップを取得します。(yyyymmddは西暦年月日)

sudo cp -p /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.bak.yyyymmdd

⑨ ssl.confを編集します。

sudo vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/letsencrypt/live/(FQDN名)/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/(FQDN名)/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/(FQDN名)/chain.pem

⑩ Apacheの再起動をします。

sudo systemctl restart httpd

⑪ Let’s Encryptが更新できるか確認します。

sudo certbot renew --post-hook "systemctl restart httpd"

⑫ crontabを利用しLet’s Encryptを自動更新できるようにします。

sudo crontab -u root -e

⑬ 以下、貼り付けて保存します。

30 2 * * * root certbot renew --post-hook "systemctl reload httpd" --no-self-upgrade

⑭ ブラウザからhttpsでサイトを開きます。

https://.....

httpsリダイレクト

httpをhttpsにリダイレクトすることで、httpでサイトを表示させないようにし「セキュリティ」を高めます。

① httpd.confのバックアップを取得します。(yyyymmddは西暦年月日)

sudo cp -p /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak.yyyymmdd

② httpd.confを編集します。

sudo vim /etc/httpd/conf/httpd.conf

③ 以下を一番下に貼り付けて保存します。

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

④ Apacheの再起動します。

sudo systemctl restart httpd

⑤ httpでサイトにアクセスし自動的にhttpsに切り替わるか確認します。

http://.....