Let’s Encrypt が 2015-12-03より Public Beta になったので, 自分が趣味で運用しているWebサービス (CentOS 6.6 / Nginx 1.0.15) で試してみたのでメモ。
Let’s Encryptで SSL/TLS証明書を発行する
Closed Betaの時は, Let’s Encrypt Closed Beta Invite にドメインとメールアドレスを登録して, 承認メールが来るのを待っていたが, Public Betaでは./letsencrypt-auto 実行時に聞かれるので, この事前申請は必要なくなっている。
証明書の発行方法は Let’s Encrypt 総合ポータル を参考にして問題なく発行できた。
$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt/
$ ./letsencrypt-auto --server https://acme-v01.api.letsencrypt.org/directory --help
Nginx と uWSGIサーバー上で動かしている Webアプリケーションを停止させる。停止方法は適当。
$ ps aux | grep uwsgi
$ kill {PID}
$ service nginx stop
$ service nginx status
証明書を発行する。成功すると /etc/letsencrypt/live/{your-domain}/ 以下に証明書へのシンボリックリンクが張られる。
$ ./letsencrypt-auto certonly -a standalone -d {your-domain} --server https://acme-v01.api.letsencrypt.org/directory
$ cd /etc/letsencrypt/live/{your-domain}/
$ ls
cert.pem@ chain.pem@ fullchain.pem@ privkey.pem@
Nginx設定変更
Nginxの設定を 80 port へのアクセスの場合 443 port へ 301リダイレクト するように変更する。
$ vim /etc/nginx/nginx.conf
server {
listen 80;
server_name {your-domain};
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
ssl on;
ssl_certificate /etc/letsencrypt/live/{your-domain}/cert.pem;
ssl_certificate_key /etc/letsencrypt/live/{your-domain}/privkey.pem;
...
}
Nginxを起動する。
$ service nginx start
Chromeから https://{your-domain}/ に正常にアクセスでき, Chromeのデベロッパーツールから Security > Overview > view Certificate > サブジェクト > CN (Common Name, 通称) が ドメイン名 と一致していれば取り敢えずは問題ないと思われる。
ただ, Webアプリケーションで ractive.js を使っており CDNからリソースを取得しているのだけど cdn.ractivejs.org が無効な証明書なので読み込めないと言われたので, ractive.min.js は自分のドメインに配置するようにした。
手動更新
証明書の有効期限が 90日間 なので忘れずに更新しないといけない。証明書の有効期限の確認は openssl コマンドでできる。
$ openssl x509 -in /etc/letsencrypt/live/{your-domain}/cert.pem -noout -dates
notBefore=Apr 30 14:43:00 2016 GMT
notAfter=Jul 29 14:43:00 2016 GMT
手動更新の場合, letsencrypt-auto renew でできる。
$ service nginx stop
$ ./letsencrypt-auto renew
$ service nginx start
crontab で対話モードでない設定として自動更新 [1]もできるようだ。
また, iOSの Mobile Safariからアクセスすると, “信頼されていません” という確認画面が出たが なんちゃってWebサービス なので現状, 気にしていない。
より技術的な仕組みの話は Let’s Encrypt を支える ACME プロトコルが勉強になる。
[1] Let’s Encrypt サーバー証明書の取得と自動更新設定メモ
[2] Let’s EncryptのSSL証明書で、安全なウェブサイトを公開