2017年 06月の投稿を表示しています

gomiba.co.in を https にした

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

目次

  • https
  • 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 webmaster@gomiba.co.in --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 サイトにするためにも、ぜひ使っていきましょう!