目次
- [#vJiCd7hDUDuKXp6j](#vJiCd7hDUDuKXp6j)
- Let’s Encrypt
- 導入していく
- おわり
こんにちは、ごみばこです
実はさらっと、ごみばこいんを https にしてました。 以前にも一度やっていたのですが、何かに詰まり、元に戻していました。またやったら特に問題なく出来てしまったので、何だったんだろう…。。
個人のひっそりページで証明書買うのもなあ、ということで Let’s Encrypt でhttps化を行いました。
そのやったことなんかを簡単に説明していきます。
https
http 通信ではなく https 通信にすると、クライアントとサーバ間の通信経路が暗号化されます。 暗号化することによって、なりすまし、改ざん、盗聴といった、第三者による介入を回避することが可能になります。 webを安全に、フリーに扱うことができるようになります。暗号化は、サーバから配送される証明書(=公開鍵)を用いて、サーバ上の鍵ファイル(=秘密鍵)を使った、公開鍵暗号方式となります。 もっと詳細な https プロトコルについてあまり詳しくはないので、
この証明書は、自分の手でも作ることができますが、信用された機関から発行されたものでないと、クライアントが証明書を信用することができません。 信用された機関も、むやみに証明書を発行することはなく、実在性や正当性を確認したうえで発行します。
具体的にはもっといろいろと計算やサーバ・クライアント間のやりとりがあるのですが、ぼくが https プロトコルに詳しくないので、このあたりで。。汗
こういったwebページが参考になるかもです。 https://www.symantec.com/ja/jp/ssl-certificates/
Let’s Encrypt
https://letsencrypt.org/Let’s Encrypt は無料で、自動で、オープンな証明機関です。さっきまでの話と異なりますね。
近年のインターネット、webの発達を受けて、もっと安全に利用できるように https を推進している団体(EFF)がいて、ここに web やセキュリティに強い企業が手伝って、いろいろないろいろが出来ているようです。 (詳しく見れていない。。。)
で、今回ごみばこいんは、こちらの Lets’s Encrypt を利用して https にしましたよー、という話です。
導入していく
Let’s Encrypt を利用するには ACME という証明書を発行するプロトコルを使って、証明書を発行する必要があります。 そのプロトコルでやりとりできるツールの一つが certbot です。ACME プロトコル https://ietf-wg-acme.github.io/acme/
certbot https://certbot.eff.org/
ごみばこいんでは、以前 Let’s Encrypt を試そうとしていたところもあったので、一度これを消去します。 ※ルートのホームディレクトリに居ただけ
# rm -rf ~/letsencrypt/
certbot を導入します。
# wget https://dl.eff.org/certbot-auto
# chmod a+x certbot-auto
起動確認
# ./certbot-auto
私の環境では Python 2.6 しかいなかったようなので(!?) Python 2.7 を入れました
# wget https://centos6.iuscommunity.org/ius-release.rpm
# rpm -ivh ius-release.rpm
# yum install python27 python27-devel python27-pip python27-setuptools python27-virtualenv
# rm ius-release.rpm
再び起動確認
# ./certbot-auto
certbot-auto が使えるようになったことが分かったので、プロパティを設定し、証明書を発行していきます
# ./certbot-auto certonly --webroot -w /var/www/html/ -d gomiba.co.in -m [email protected] --agree-tos
ごみばこいんでは nginx を利用しているので、この設定を変更し https を有効にします。
# vi /etc/nginx/conf.d/server.conf
↓こんな感じのものを書き足しました
server {
listen 443;
ssl on;
# ※certbotを実行したときにパスが出ると思うのでそれを使います!
ssl_certificate /etc/letsencrypt/live/gomiba.co.in/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/gomiba.co.in/privkey.pem;
# ※https で使える暗号方式ですが、古い暗号方式は脆弱性があるなどなので無効化するのが吉です
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:!DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!ECDHE-RSA-DES-CBC3-SHA:!ECDHE-ECDSA-DES-CBC3-SHA;
# 有効なプロトコル
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# セッションをキャッシュすることでCPUに余裕を持たせます
ssl_session_cache shared:SSL:5m;
# ※ドキュメントルートの設定など
}
※暗号方式のところは、設定後にチェックツールを利用するのがおススメです https://globalsign.ssllabs.com/
nginx を再起動
# service nginx restart
https で接続ができるか確認し、無事に出来たのでこれにておしまいです。
ちなみに Let’s Encrypt で発行した証明書は90日で期限が切れてしまうので、crontab で自動更新するのが良いです。これは certbot のユーザガイドにも書かれています。
# crontab -e
↓こんな内容を記述
# certbot
0 12 * * * /root/certbot-auto renew -q --no-self-upgrade --post-hook "service nginx reload"
これで Let’s Encrypt がサービス終了にならない限り、ずっと https が利用できます。
おわり
certbot を使うと、簡単に証明書を発行でき https を有効にすることができました。Let’s Encrypt で発行される証明書を有料の証明書と比べる比べると、企業や団体としての存在証明を行うことはできないので、より信頼性の高める必要のある web サイトで利用することは難しいかもしれませ。しかし、個人で利用する程度のものでは十分だと思います。
安全な web サイトにするためにも、ぜひ使っていきましょう!