読者です 読者をやめる 読者になる 読者になる

望月いちろうのREADME.md

書き溜めておいた技術記事や旅行記のバックアップです。

Let's encryptで無料のSSL証明書を発行してhttpsを導入する

Let's encrypt

f:id:mochizuki_p:20161009233349p:plain

無料でSSL証明書が導入できる?

昔からの話ですがGoogleはサイトの常時https化を推奨しておりまして、サイトの表示順位にもそれを反映させることを明言しています。 つまり、とっととSSLを導入しろよ。 ということでありますが、実際のところSSL化をするのにもいろいろと面倒なことがあります。

まず最初に面倒なのはSSL証明書を導入するという点です。いままではSSLを導入するにも認証局にお金を払って、有料の証明書をもらわなければいけませんでした。

しかし問題はそのお値段で、安くても数千円、高いものでは数十万円もすることがあります。もちろんこの値段は認証局の信用性に比例するものでして、シマンテック社などのセキュリティ専門会社から証明書を頂くとかなりお高くなり、逆に海外の得体の知れない会社から買うと安くなります。まあそれでもアクセスの少ない個人サイトにとってわざわざ数千円もかけてまでSSLを導入するのは、もったいない気がしてきます。

しかし、最近では無料でSSL証明書を発行してくれるありがたいサービスが出てくれるようになりました。 Let’s Encryptと言う名のこの団体、決して怪しい組織ではありません。この団体のスポンサーになっているのは、mozilla、アカマイ、シスコ、ヒューレット・パッカードFacebookといったテック業界の有名企業ばかりです、かなりの信頼性があります。

さて今回はこのLet’s Encryptから無料でSSL証明書を導入してWEBサイトをhttps化することにしましょう

今回使用するOSはLinux Ubuntu 14.04、サーバーはnginxを利用します。

最初にやるのはCertbotの導入です。

念のため、apt-getをアップデート

apt-get update 

gitを使用するのでインストール

apt-get install git

gitHubのレポジトリからcertbotをクローン、その前にoptフォルダに移動しておきましょう

cd opt
git clone https://github.com/certbot/certbot
$ cd certbot

インストールする前にオプションを確認

$ ./certbot-auto --help
Usage: certbot-auto [OPTIONS]

A self-updating wrapper script for the Certbot ACME client. When run, updates

to both this script and certbot will be downloaded and installed. After

ensuring you have the latest versions installed, certbot will be invoked with

all arguments you have provided.



Help for certbot itself cannot be provided until it is installed.



  --debug                                   attempt experimental installation

  -h, --help                                print this help

  -n, --non-interactive, --noninteractive   run without asking for user input

  --no-self-upgrade                         do not download updates

  --os-packages-only                        install OS dependencies and exit

  -v, --verbose                             provide more output



All arguments are accepted and forwarded to the Certbot client when run.

こんな感じのメッセージがでてきます。今回は特に設定しませんが、各自に任意の設定をお願いします。

 ./certbot-auto

インストール開始です。

まあいろいろ出てきますが、特に問題なければ次に,

./letsencrypt-auto certonly --standalone -d example.com

ここでエラーが出る場合はHTTPSの443ポートが開いていない場合がほとんどなのでiptablesをこのように設定しましょう。

iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT

次に

./letsencrypt-auto certonly --standalone -d example.com

これで成功したら、メールアドレスを入れろだの色々と出てくるので、それに従って情報を入力、すると次のように表示されるはずです。

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
   expire on 2016-08-14. To obtain a new version of the certificate in
   the future, simply run Certbot again.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

何が書いてあるかというと、/etc/letsencrypt/live/{サイト名} フォルダ以下にSSL通信に必要な鍵ファイルがダウンロードされましたよ。という内容が書いてあります。 このフォルダを覗いておきましょう。 4つのファイルがあるはずです

cert.pem  chain.pem  fullchain.pem  privkey.pem

最後に、nginxの設定ファイルを弄ってhttpsを有効化させましょう。

ここではhtmlファイルを配信するだけですが、nginxをリバースプロキシとして、Ruby on railsなどを動かす場合も多いので、その場合はこれを参照してください。

さて続きを見ましょう。

/etc/nginx/sites-available フォルダにある設定ファイル、ここではdefaultを開きます

cd /etc/nginx/sites-available
sudo vim default

自動更新

/certbot/letsencrypt-auto renew

だけで自動的にすべての証明書を更新できます。 ただしここで更新されるのは有効期限が30日未満の証明書のみです。有効期限がそれ以上残っている場合はスキップされます。

--force-renewを追加することで強制的に証明書を更新することも可能ですが、Letsencrypt側のRate limitを超えるとペナルティを課せられる場合があるかもしれません。

Cronを使用して1週間ごとにコマンドを実行させれば十分でしょう。