AWS EC2にLet's Encryptを導入してHTTPS化する

Mar 3, 2019 17:31 · 195 words · 1 minute read SSL AWS EC2

概要

EC2で運用しているポートフォリオサイトがこれまでHTTPだったのでセキュリティの改善としてHTTPS化しました。オンライン決済や重要情報を扱ってるサイトではないので必須な対応ではないですが、SEOや信頼性を意識して実施することにしました。

Let’s Encryptとは

SSL証明書を発行してくれるサービスです。無料で発行できます。AWSではコマンドベースで発行から設定までできるので小難しい画面操作がなく簡単に導入できました。

https://letsencrypt.org/

導入

環境

Amazon Linux AMI release 2018.03

Apache 2.4.37

EC2のセキュリティグループを設定する

AWSコンソール画面にアクセスしEC2の設定を行います。セキュリティグループのインバウンド設定でHTTP(80)に加えてHTTPS(443)も許可(0.0.0.0/0)します。

certbotをインストールする

certbotとはLet’s Encryptの自動化サービスです。 EC2にSSHログインし以下のコマンドを実行してインストールします。

// sudo権限
sudo su

// culrでcertbotをインストール
curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto

// パーミションを700に変更
chmod 700 /usr/bin/certbot-auto

SSL証明書を発行する

以下のコマンドを実行して証明書を発行します。各パラメータは自身の環境に合わせて変更します。

// 証明書生成コマンド
certbot-auto certonly --webroot -w [ドキュメントルート] -d [ドメイン名] --email [メールアドレス] -n --agree-tos --debug

-w…ドキュメントルート

-d…対象ドメイン

--email…連絡用メールアドレス

-n…対話の入力をスキップ

--agree-tos…利用規約に同意する

--debug…AWSの場合は記述

AWSでは–debugオプションがないとエラーになるようです。以下はエラーになった時の表示です。AWSではまだ正式なサポートではなく実験段階のため–debugオプションをつけてくださいとのこと。

FATAL: Amazon Linux support is very experimental at present...
if you would like to work on improving it, please ensure you have backups
and then run this script again with the --debug flag!
Alternatively, you can install OS dependencies yourself and run this script
again with --no-bootstrap.

証明書が正常に発行できると以下のような表示がされます。発行された証明書のパス、有効期限などが載っています。

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
  /etc/letsencrypt/live/nasufo.net/fullchain.pem
  Your key file has been saved at:
  /etc/letsencrypt/live/nasufo.net/privkey.pem
  Your cert will expire on 2019-05-22. To obtain a new or ...

mod_sslの設定をする

ApacheをSSL対応にするために必要なモジュールです。 インストールして証明書の設定を記述します。

// mod_sslのインストール
yum install mod24_ssl

// ssl.confを編集する
vi /etc/httpd/conf.d/ssl.conf

/etc/httpd/conf.d/ssl.confの内容を一部編集します。

// cert.pemのファイルパスを変更
SSLCertificateFile /etc/letsencrypt/live/[ドメイン名]/cert.pem

// privkey.pemのファイルパスを変更
SSLCertificateKeyFile /etc/letsencrypt/live/[ドメイン名]/privkey.pem

// chain.pemファイルのパスを変更、コメントアウトを外す
SSLCertificateChainFile /etc/letsencrypt/live/[ドメイン名]/chain.pem

Apacheを再起動する

service httpd restart 

以上の手順でHTTPS化の作業は完了です。https://[ドメイン名]でサイトが表示できているかと思います。

SSL証明書の更新をcronで自動化する

Let’s EncryptのSSL証明書は有効期限が3ヶ月となっています。期限が切れるたびにコマンドを実行して発行するのは手間なのでcronで処理を自動化します。

cronファイルを作成し以下を記述します。毎日0時にcronが実行されSSL証明書の確認・更新、Apacheの再起動が行われるようになります。

00 00 * * * root /usr/bin/certbot-auto renew --post-hook "service httpd restart"

renew…証明書の更新

--post-hook…更新完了後に実行するコマンドを指定できる

これで証明書の期限切れを気にすることなくサイトを運営できそうです。

参考記事

Let’s Encryptを使ってEC2にSSL証明書の発行から自動更新まで行う

AWS EC2にLet’s Encryptを導入してみた