Let’s Encrypt で名前ベースのHTTPSバーチャルホスト(SNI)を設定してみる

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対応させなくて良いサイトは、半角スペースキーを押すことによって対象から外すことができます。(ちなみに全角スペースを入力するとソフトが落ちます。)

HTTPSに対応させるサーバの選択画面
(図1)HTTPSに対応させるサーバの選択画面

 

次の画面では、キーを無くしたりした時のための緊急連絡用のメールアドレスを指定し、その次の画面で利用規約2に同意をします。

(図2)サイトをSSLオンリーにするかどうかの選択
(図2)サイトをSSLオンリーにするかどうかの選択

 

本当はSecureを選ぶ(=HTTPSオンリーにする)べきであるような気もするんですが、そうすると、過去記事のせっかく集めたFacebook「いいね」などのカウントがゼロになってしまって寂しいので、Easy (=HTTP, HTTPS両方対応)を選びます。

(図3)完了画面。QUALIS SSLLabs でテストするようにそくされる
(図3)完了画面。QUALIS SSLLabs でテストするようにそくされる

 

すると、たったそれだけで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 のように指定して、状況をテストします。このサイトのテスト結果はこんな感じでした。

sakimura.org の QUALIS SSL Report
(図4)sakimura.org の QUALIS SSL Report

 

まぁ、満点とは行きませんが、そこそこ良いのではないでしょうか。

3ヶ月後までに忘れずに

今回初めてLet’s encrypt を使ってみて、その便利さに感動しました。これまでのTLSの設定は何だったのかという感じです。もはや、TLSを使わない言い訳はあり得ないでしょう。

一方、これを便利に使いこなすには事前に準備も必要だなぁと思いました。その代表例は、サーバとしてアクセスさせることを意図していなくても、sakimura.org のようなドメイン名自体のWebサーバも設定しておいてLet’s Encryptを走らせたほうが良いということです。(この点、QUALISに「Confusing」といわれました。)Let’s Encryptで取得する証明書の有効期限は3ヶ月弱ですから、次回までにこの点を改善しようと思います。自動更新はまたその後ですね。

それでは、また!

 

脚注

  1. 結構取得が難しいです。
  2. https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf.

コメントを残す

メールアドレスが公開されることはありません。

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください