Let’s Encryptは米国のInternet Security Research Group (ISRG)という財団が提供している、無償のTLSサーバ証明書提供サービスです。無償・自動・安全・透明・オープン・協調をモットーにするサービスで、財団自体は501(c)3の非営利団体1になっています。Technical Advisory Board のメンバーを見ると、Joe Hildenbrand とか Karen O’Donohue のようなお友達が並んでいますね。sakimura.org も、www.sakimura.org はTLS対応をしてきているのですが、証明書代をケチって&設定が面倒で、nat.sakimura.orgなどはTLS対応してきていませんでした。でも、こんなのが出てきたらもう言い訳できません。それでは、設定をしてみましょう。
Let’s Encrypt のインストール
設定するには、まず、Let’s Encryptをインストールしなければなりません。LinuxのDistributionによっては、パッケージとして提供されているようですが、今使っているUbuntuのリリースにはLet’s Encryptが入っていないので、まずはLet’s Encryptをインストールします。インストールには、gitを使って、githubからファイルを落としてくるところから始めます。
$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
$ ./letsencrypt-auto --help
おっと、色々エラーが出ますね。どうもPythonが古いようです。今入っているのはPython 2.7なので、SNIをサポートしていなかったりなど色々問題有りということのようです。なので、Python 3 をインストールしてみます。私は、aptitude で python3.4-venv をインストールしました。
さて、気を取り直してもう一度:
$ ./letsencrypt-auto --help
Updating letsencrypt and virtual environment dependencies......
Requesting root privileges to run with virtualenv: sudo /home/nat/.local/share/letsencrypt/bin/letsencrypt --help
letsencrypt-auto [SUBCOMMAND] [options] [-d domain] [-d domain] ...
The Let's Encrypt agent can obtain and install HTTPS/TLS/SSL certificates. By
default, it will attempt to use a webserver both for obtaining and installing
the cert. Major SUBCOMMANDS are:
(default) run Obtain & install a cert in your current webserver
certonly Obtain cert, but do not install it (aka "auth")
install Install a previously obtained cert in a server
revoke Revoke a previously obtained certificate
rollback Rollback server configuration changes made during install
config_changes Show changes made to server config during installation
plugins Display information about installed plugins
Choice of server plugins for obtaining and installing cert:
--apache Use the Apache plugin for authentication & installation
--standalone Run a standalone webserver for authentication
(nginx support is experimental, buggy, and not installed by default)
--webroot Place files in a server's webroot folder for authentication
OR use different plugins to obtain (authenticate) the cert and then install it:
--authenticator standalone --installer apache
More detailed help:
-h, --help [topic] print this message, or detailed help on a topic;
the available topics are:
all, automation, paths, security, testing, or any of the subcommands or
plugins (certonly, install, nginx, apache, standalone, webroot, etc)
今度は上手くいったようです。
証明書の取得とWebサーバの設定
さて、では証明書の取得です。Apacheを使っていると、便利なコマンドがあります。
./letsencrypt-auto –apache
でインストールができるというのですが、どうやってドメイン名を指定するのか分かりません。えい、ままよ、と走らせてみると、(図1)のような画面が出ました。どうやらここでTLS対応させるサイトを選べるようにするようです。TLS対応させなくて良いサイトは、半角スペースキーを押すことによって対象から外すことができます。(ちなみに全角スペースを入力するとソフトが落ちます。)
次の画面では、キーを無くしたりした時のための緊急連絡用のメールアドレスを指定し、その次の画面で利用規約2に同意をします。
本当はSecureを選ぶ(=HTTPSオンリーにする)べきであるような気もするんですが、そうすると、過去記事のせっかく集めたFacebook「いいね」などのカウントがゼロになってしまって寂しいので、Easy (=HTTP, HTTPS両方対応)を選びます。
すると、たったそれだけでTLSの証明書のインストールとWebサーバの設定完了です。スゴイ。Apacheのconfigを色々書かなきゃと思っていたのですが、全部自動でやってくれたようです。/etc/apache2/sites-enabled を見ると、cimbalom.jp-le-ssl.conf のような「ドメイン名-le-ssl.conf」という設定ファイルができています。これを見る限りでは、複数のバーチャルホストを持っている場合、そのHTTP版の設定ファイルを使って、SSL用の設定ファイルを自動生成してくれるようです。
設定のチェック
最後の仕上げは、QUALISのサイトに行って、TLSの設定の確認です。上の図にあるように、 https://www.ssllabs.com/ssltest/analyze.html?d=sakimura.org のように指定して、状況をテストします。このサイトのテスト結果はこんな感じでした。
まぁ、満点とは行きませんが、そこそこ良いのではないでしょうか。
3ヶ月後までに忘れずに
今回初めてLet’s encrypt を使ってみて、その便利さに感動しました。これまでのTLSの設定は何だったのかという感じです。もはや、TLSを使わない言い訳はあり得ないでしょう。
一方、これを便利に使いこなすには事前に準備も必要だなぁと思いました。その代表例は、サーバとしてアクセスさせることを意図していなくても、sakimura.org のようなドメイン名自体のWebサーバも設定しておいてLet’s Encryptを走らせたほうが良いということです。(この点、QUALISに「Confusing」といわれました。)Let’s Encryptで取得する証明書の有効期限は3ヶ月弱ですから、次回までにこの点を改善しようと思います。自動更新はまたその後ですね。
それでは、また!
脚注
@_Nat Zoneをもっと見る
購読すると最新の投稿がメールで送信されます。