gensym

プログラミングと読書、勉強に関するメモ

Let's Encrypt で無料のSSL証明書を取得する[Ubuntu, Nginx]

今や SSL(TLS) はデフォルトとなりつつあり、いちユーザとしてみるとすばらしいことだ。
しかし運営する側にしてみると安くないコストとなってのしかかってくる。
一件当たり年間数万円、それがいくつもあるとバカにならない。
かといって SSL 非対応にすると検索エンジンでの順位が下がり、ブラウザが警告を発し、
何よりセキュアではなくなりユーザの安全性や信頼性が低下する。
そこで仕方なく安くない認証料を支払っていたわけだが、最近いくつかの無料サービスが登場している。
今回はその中の1つ Let's Encrypt を使ってみることにした。
日本語の公式サイトも存在する。Let's Encrypt の使い方
もちろんこのサイト自体も Let's Encrypt で認証されている。

サーバサイドの環境は Ubuntu 16.04, nginx 1.10.0 で行った。
尚以下の手続はドメインの指定するサーバで行う必要がある。
example.com は証明書を取得するドメインで、適宜置き換えて欲しい。
まずはソースコードを入手

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

必要なライブラリをインストールする。

$ cd certbot
$ ./certbot-auto

認証手続にはあらかじめ http, https 用のポートを開放しておく必要がある。
ドメインを指定して、クライアントを起動する。

./certbot-auto certonly --standalone -d example.com -d www.example.com

メールアドレスを入力して、規約に同意するとすぐに証明書が発行されダウンロードされる。

- Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/example.com/fullchain.pem. Your cert
   will expire on 2016-08-22. To obtain a new version of the
   certificate in the future, simply run Certbot again.

nginx の場合は conf ファイルのパスをここに合わせる。

# /etc/nginx/nginx.conf
server {
        server_name www.example.com;
        listen 443 default_server;

        ssl on;
        ssl_certificate /etc/letsencrypt/archive/example.com/fullchain1.pem; # 公開鍵
        ssl_certificate_key /etc/letsencrypt/archive/example.com/privkey1.pem; # 秘密鍵
...

これで nginx で https 通信が行えるようになる。
証明書の期限は三ヶ月と短いが、これと同じ事を繰り返すことで更新ができる。
自動更新の方法もあるらしいが、まだ調べていない。
とにかく無料でSSL証明書が取得できた。
良い時代になったものだ。