開発用EC2インスタンスはhttpで使用していたのですが、セキュリティ対策を入れたりでステージング環境に近くなってきたので簡易的にSSLを導入しようとLet's Encryptを使用してみました。
思ったより簡単に導入できたので参考になれば幸いです。
Let's Encryptとは?
簡単に言うと無料でオープンな証明書を発行できるサービスです。手続きも不要で、サーバーとドメインさえ持っていれば即時発行可能です。(Chromeでも緑の鍵マークになるので安心です)
※私もどこかのタイミングで寄付します!
導入手順
さっそく導入してみましょう。
環境は AmazonLinux + CentOS6 + Apache2.4 です。(バージョン違いは適宜読み替えてください)
前提として上記は導入済みとします。まだの方はAWSのページなどを参考にインストールまで済ませてください。
1. AWSのセキュリティグループを設定する
セキュリティグループのインバウンドのHTTP(80)、HTTPS(443)を許可(0.0.0.0/0)にします。
これをやらないと後ほど証明書を自動取得する際にエラーになります。
→(2017/08/29追記)自分の環境では「urn:acme:error:connection」というエラーになりました
2. certbotインストール
対象のインスタンスにSSHでログインし、以下を実行します。(rootじゃなければsudoつける)
権限も変更しておきましょう。
# curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
# chmod 700 /usr/bin/certbot-auto
3. 証明書の発行
cerbotのインストールが成功したら以下のコマンドで自動生成します。
# certbot-auto certonly --webroot -w /var/www/html -d test.example.com --email hoge@example.com
オプション | 説明 |
---|---|
certonly | 証明書の作成 |
--webroot | ウェブサーバーモードを指定 |
-w /var/www/html | ドキュメントルートのパス(自環境に合わせてください) |
-d test.example.com | 認証対象のドメイン名(ここでは例として左記) |
--email hoge@example.com | 連絡用のメールアドレス(ここも例として左記) |
|
###4. 利用規約
青い画面で利用規約の同意を求められるのでAgreeする
###5. 成功確認
以下のメッセージが出れば成功です。
IMPORTANT NOTES:
- Congratulations! ...
###6. 生成された証明書の確認
しばらくすると以下のディレクトリに証明書が生成されます。
/etc/letsencrypt/live/test.example.com/
cert.pem
privkey.pem
chain.pem
###7. mod_sslインストール
Apacheにmod_sslを未インストールならインストールします。
# yum install -y mod24_ssl
###8. ssl.confに証明書パス設定
/etc/httpd/conf.d/ssl.confに先ほど取得した証明書のパスを設定します。
...
SSLCertificateFile /etc/letsencrypt/live/test.example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/test.example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/test.example.com/chain.pem
...
###9. Apache再起動
Apacheを再起動すれば反映完了です!ブラウザでhttps://~ で確認してみてください!
###10. その他
上記の後に、http→httpsの強制リダイレクトや、証明書の自動更新設定などやっておいたほうがよい操作がありますが、ここでは導入までとします。
今まで証明書と言えば高いお金を払い、電話などで確認必須なのでとても時間がかかるイメージでしたが
非常に簡単にSSL化出来たのでとてもテンション上がりました!ぜひみなさんもお試しください!