Let's EncryptでサーバをHTTPS接続に対応させた
Amazon EC2で稼働させているサーバを、Let's Encryptを使ってHTTPS接続に対応させた。高いお金を払わなくても、無料でHTTPS接続が可能になるのだから便利な時代だ。
動作環境
- Amazon EC2
- Amazon Linux
- Apache 2.2
導入
下記の手順に従って導入すれば良く、問題は何も発生しなかった。
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が要求する接続条件を満たしていないのが原因と判明した。
実は,この状態でiOSのSafari等からサーバにアクセスしても,証明書はすぐには
Let's Encryptを使って,サーバとiOSでhttpsで通信できるようにする
受け入れてもらえません. これは,SSLの設定がiOSの信用条件を満たしていない
ことに起因するようです.
どのような接続方法までを許容し、何を拒否するのか?というのはサイト運営のポリシーに関わる内容であり、一律的な基準があるわけでも無いので判断が難しい。こちらは片手間にサーバの管理を行っているだけであり、常に最新動向を把握している専任の担当者ではないのだ。どこまでを許容して良いのか判断が出来ないのだ。
しかし、こんな悩める管理者に助言してくれるという、有り難いサービスがある。今回は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(クロステック)