AWS EC2にLet's Encryptを導入してHTTPS化する
Mar 3, 2019 17:31 · 195 words · 1 minute read
概要
EC2で運用しているポートフォリオサイトがこれまでHTTPだったのでセキュリティの改善としてHTTPS化しました。オンライン決済や重要情報を扱ってるサイトではないので必須な対応ではないですが、SEOや信頼性を意識して実施することにしました。
Let’s Encryptとは
SSL証明書を発行してくれるサービスです。無料で発行できます。AWSではコマンドベースで発行から設定までできるので小難しい画面操作がなく簡単に導入できました。
導入
環境
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
…更新完了後に実行するコマンドを指定できる
これで証明書の期限切れを気にすることなくサイトを運営できそうです。