Let's Encrypt でサイトをHTTPS化する
Let's Encrypt が Public Beta になり事前申請なしで証明書の発行ができるようになったので、試しに使ってみました。
環境
事前準備
- EPEL が有効になっていること
- 後述の letsencrypt-auto スクリプトを実行する時に必要になります
- ポート番号 80 & 443 がセキュリティグループで空いていて、サーバ内で使われていないこと
- ACME プロトコルにおいて、Domain Validation の際にスタンドアロンの Web サーバが立ち上がり、80 と 443 ポートがバインドされます。
- cf. Let's Encrypt を支える ACME プロトコル
証明書を取得する
Let's Encrypt のドキュメントの通り、letsencrypt-auto
スクリプト一発で証明書を取得することが出来ます。
# EC2 内において $ git clone https://github.com/letsencrypt/letsencrypt $ cd letsencrypt $ ./letsencrypt-auto --debug certonly
letsencrypt-auto
を実行すると、Linux の設定画面のような TUI の青い画面が表示され、対話形式でメールアドレスやドメイン名を入力していきます。
この間に裏では ACME プロトコルによるチャレンジが行われており、問題なく終了すると /etc/letsencrypt/live/{domain}/ 以下に証明書等が作られます。
作られた証明書を見てみる
$ sudo ls /etc/letsencrypt/live/{domain} cert.pem chain.pem fullchain.pem privkey.pem
- cert.pem : 証明書
- chain.pem : 中間証明書
- fullchain.pem : cert.pem と chain.pem がくっついたもの
- privkey.pem : 秘密鍵
実際に取得した証明書を見てみると、確かに Let's Encrypt の CA による署名が付いていることがわかります。 証明書の有効期限は3ヶ月と短いですね。
$ sudo openssl x509 -in /etc/letsencrypt/live/{domain}/cert.pem -text -noout Certificate: Data: Version: 3 (0x2) Serial Number: 01:45:4d:37:ef:ab:46:11:f5:b9:8d:e5:d0:55:97:af:02:cc Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X1 Validity Not Before: Dec 26 06:00:00 2015 GMT Not After : Mar 25 06:00:00 2016 GMT ... ... ...
nginx に設定する
nginx.conf の server ディレクティブに証明書と秘密鍵のパスを指定します。 nginx をリロードして、ブラウザから https でアクセスできれば成功です。
server { listen 443; server_name localhost; root /var/www/html; ssl on; ssl_certificate /etc/letsencrypt/live/{domain}/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/{domain}/privkey.pem; location / { } }
Let's Encrypt を使うと、手作業でも最初の git clone からものの 10 分ほどでサイトをHTTPS化することができました。 いやー簡単だなー。