Let's EncryptでサーバをHTTPS接続に対応させた

Amazon EC2で稼働させているサーバを、Let's Encryptを使ってHTTPS接続に対応させた。高いお金を払わなくても、無料でHTTPS接続が可能になるのだから便利な時代だ。

動作環境

導入

下記の手順に従って導入すれば良く、問題は何も発生しなかった。

sudo curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
sudo chmod 700 /usr/bin/certbot-auto
certbot-auto certonly --webroot -w /var/www/html -d [server] --email [mail_address] --debug

Apacheの設定/etc/httpd/conf.d/ssl.confに追記した。

SSLCertificateFile /etc/letsencrypt/live/[server]/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/[server]/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/[server]/chain.pem

動作確認

動作確認を行ったところ、下記の問題が判明した。

贅沢を言うつもりはないけれど、iOSから接続できないのは困る。調べたところ、Safariが要求する接続条件を満たしていないのが原因と判明した。

実は,この状態でiOSSafari等からサーバにアクセスしても,証明書はすぐには
受け入れてもらえません. これは,SSLの設定がiOSの信用条件を満たしていない
ことに起因するようです.

Let's Encryptを使って,サーバとiOSでhttpsで通信できるようにする

どのような接続方法までを許容し、何を拒否するのか?というのはサイト運営のポリシーに関わる内容であり、一律的な基準があるわけでも無いので判断が難しい。こちらは片手間にサーバの管理を行っているだけであり、常に最新動向を把握している専任の担当者ではないのだ。どこまでを許容して良いのか判断が出来ないのだ。

しかし、こんな悩める管理者に助言してくれるという、有り難いサービスがある。今回はSSL Server Testというサービスを使って暗号化の検証を行った。具体的には、サイトのURLを入力するだけで良く、後は自動的にHTTPS接続して一連の暗号化の設定状況を確認してくれる。その結果は"A+"のような指標で示されるので、判断の根拠として活用できそうだ。

This free online service performs a deep analysis of the configuration of any SSL web server on the public Internet.

https://www.ssllabs.com/ssltest/analyze.html

試行錯誤しつつ、Apacheの設定は下記の様に変更した。

# セキュリティに問題があるプロトコルを除外する
SSLProtocol all -SSLv2 -SSLv3
SSLProxyProtocol all -SSLv2 -SSLv3
# 暗号化方法を限定する
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!EXP:!LOW:!aNULL:!eNULL:!ADH:!DSS:!MD5:!PSK:!SRP:!RC4:!3DES
# サーバ側の暗号化方法を優先する
SSLHonorCipherOrder On
# 常時HTTPS通信を行う
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains" 

結論

この状態で再度上記のサービスを使って確認したところ、今度は"A+"の評価が付いた。Chromeはもちろん、Safariでも正常に接続できることを確認した。昔のウェブブラウザや古いJavaではアクセス出来ないようだが、セキュリティ上の問題を抱えるよりは良いので、問題なしと判断した。

教訓

昔はSSL接続が出来ていればOKと言うのどかな時代だったけど、最近はセキュリティホールが見つかり暗号化方法として非推奨扱いに変わったり、新しい暗号化の方法が加わったりして変化が激しい(そもそもSSL自体が過去のものなのだ)。上記に記載した設定も、きっと1年後には時代遅れの設定となり、"A+"の判定は得られないのだろう。兼務管理者には辛い時代ではあるけれど、無料で支援してくれるツールを上手く活用しつつ、時代の変化にキャッチアップして行きたいと思っている。

多くの人は、「SSLが使われているサインだ」と理解しているはずだ。ところが実際は異なる。この場合のほとんどはSSLの後継のプロトコルTLS」を使っている。なぜか? SSLが「使用禁止」になったためだ。安全な通信手段の代名詞は今後、TLSとなる。

SSLはなぜ「もう古い」なの? | 日経 xTECH(クロステック)