Let’s Encryptの使い方。standaloneとwebroot


Let's encrypt(Let's Encrypt 認証局)とは

まずはここから簡単に解説を。「無料のSSL」です。通常、年間3万円程度費用がかかるイメージでしたが、そのために普及が遅れてしまっては、インターネットの発展がなかなか進まない、ということもあってインターネット界隈の主要な会社たちが集まって、無料の認証局を作ろうということになりました。

以下、日本語訳抜粋。

Let's Encrypt を運営している Internet Security Research Group (略称:ISRG) は、アメリカ合衆国カリフォルニア州にある公益法人で、アメリカ合衆国内国歳入法 Section 501(c)(3) による非課税法人として、アメリカ合衆国内国歳入庁 (IRS) による承認を受けています。
インターネットを介した安全な通信を行う際の、経済面・技術面・教育面での障壁を減らすことが、ISRG の使命です。

※ココ最近、2018年3月時点で、ワイルドカード証明書が使えるようになりました。1つの証明書で複数のサブドメインを運用可能ということです。この設定方法については、また改めて書きます。

簡単な使い方については、Let's Encrypt 総合ポータルにあります。
けっこうドキュメント量が多いので、まず設定する前に、大事なポイントがあります。
そこで一番重要になるのは、証明書取得時、および更新時にサーバーを停止する必要があるかどうか、という点です。それが、standaloneだったりwebrootとなります。

standaloneとwebrootとは

Let's Encryptでの証明書はstandaloneとwebrootがあります。

standalone

standaloneって何なん?ってことで、
【Let's Encrypt 総合ポータル-ユーザーガイド-Standalone プラグイン】
ここに書いてあります。

これは、Let's Encryptのコマンドであるcertbot-autoがwebserverとしての機能も持っているため、それを使って設定するってことです。standaloneという名前の通り、webserverがなくても証明書の取得設定ができるよ、というものです。

standaloneの場合、このcertbot-autoが持っているweb serverを利用する、つまり、
設定するのに80(HTTP)と443(HTTPS)のポートを使用するので、すでにapacheやnginxでWebサーバが動いていると動きません。←ここ重要

ということは現在稼働しているウェブサービスを一度停止させる必要があり、停止させるということは、運用上の問題が出る場合があります。
そこでwebrootモードを使うのです。
稼働中のサービスを落とさずにSSL証明書の発行および更新ができるのです。

webroot

コマンドは、certbot-auto
です。古いドキュメントでは、letyencryptだったりcertbotだったりしますが、最新は、certbot-autoだと思ってくださればOKです。

私の場合は、certbot-autoを実行可能な、/usr/local/sbinに配置してどでも実行できるようにしました。

おっと、その前に、準備が必要です。
今回SSLを設定する必要のある、ドメイン名で(今回はnginx)にhttpでアクセスできる状態としておくことです。
DNSの設定と、nginx(apache)の設定が終わっていることが条件です。

コマンド実行の初回のみいろいろきいてくるのですが、コマンドは、新しいものを登録するときも一つだけ。以下。
rootで実行。

command
certbot-auto certonly --webroot -w /var/www/sample/public -d xxxx.sample.com

-w は、webrootのディレクトリを指定。この中にファイルを書き込みます。そのファイルをhttp(80)でアクセスするのでアクセスできる状態としておくこと。

-dは、ドメイン名。複数指定可能。複数指定するときは、-d xxx.sample.com -d xxx2.sample.comと書いていく。

実行するとメッセージがでてきて、FaildやErrorの文字がなくSuccessという文字が見えたら成功です。

以下の2つのファイルができているので、nginxやapacheの設定ファイルで読み込むように設定して、webserverをリスタートすればOKです。

/etc/letsencrypt/live/xxxx.ample.com/fullchain.pem
/etc/letsencrypt/live/xx2.ample.com/privkey.pem