[FreeBSD10]Let’s Encrypt を導入する

Pocket

■例によってどうでもいい前置き

WebMail用途でSSLを使いたくて、以前 startssl を試してみたものの証明書が切れたまま更新が面倒で放置していたのだが、 Let’s Encrypt という無料証明書サービスが最近正式に始まったと偶然知った。証明書の自動更新ができるということなので、試してみた。

公式サイト  https://letsencrypt.org/
日本語サイト https://letsencrypt.jp/

サービス開始が4月12日で、なんかまだいろいろと固まっていないっぽい。
大まかな手順としては、

1.証明書発行用のクライアント(certbot)をインストール
2.サーバ上で証明書を発行
3.Webサーバに設定

でいけるらしい。クライアントの配布元は https://certbot.eff.org/

上記サイトで Webサーバ と OS を選択すると専用のドキュメントのページに飛ぶ。
Apache on FreeBSD を選択すると

pkg install py27-letsencrypt
$ letsencrypt --apache あるいは
$ letsencrypt --apache certonly

の2ステップで完了!(英語)と書いてあるが、嘘。
本来なら apache の設定までノンストップでやってくれるっぽいけど、動かない。
そもそもコマンドが certbot じゃないし。。。
日本語サイトとも矛盾。この辺はおいおい整備されていくんでしょうな。
ちなみにドキュメントのリンクをたどっていくと、以下の記述にたどりつく。

If you’re running Apache 2.4 on a Debian-based OS with version 1.0+ of 
the libaugeas0 package available, you can use the Apache plugin.

Linux(Debian) じゃないと apache プラグインは使えないってしっかり書いてありますやん。

■導入手順

クライアント(正式名certbot?) のインストール
パッケージからさくっと。

# pkg install py27-letsencrypt

え。。。これだけ?

■証明書の取得
一応、公式サイトに従ってみる。

# letsencrypt --apache certonly
The requested apache plugin does not appear to be installed

プラグインがないと怒られる。理由は前述の通り、Debian Linux じゃないから。
そもそもインストール時の最後に

The letsencrypt plugins to support apache and nginx certificate installation
will be made available soon in the following ports:

 * Apache plugin: security/py-letsencrypt-apache
 * Nginx plugin: security/py-letsencrypt-nginx

と表示されることから、これから開発される模様。がんばれ、公式サイト!

apache以外のプラグインは使えるようなので、証明書の発行だけを certbot で行って、Apache の設定は手動で行うことにする。

○プラグイン
certbot は証明書の発行時にこちらの80番、443番ポートと通信を行うため、両方のポートに外部から接続出来ることが前提。
Apacheが既に動いていて、止めたくないならば webroot 、証明書取得時にapacheを一時的に止めても構わないのなら standalone をプラグインとして指定。

○オプション

 -w   ドキュメントルートの指定 /var/www/html/ とか。
 -d   FQDNの指定               www.example.jp とか。

複数のサイトの証明書を一度に取得できるっぽい。

# letsencrypt certonly --webroot -w /var/www/html/ -d www.example.jp

画面上何の表示もなく、若干待たされる。裏でごちゃごちゃと頑張っている(はず)。
この時、ドキュメントルート下に .well-known/ ディレクトリが作成され、ここに一時ファイルが作られる模様。証明書の発行が完了するとディレクトリは空になる。

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /usr/local/etc/letsencrypt/live/www.example.jp/fullchain.pem.
   Your cert will expire on 2016-09-01. To obtain a new version of the
   certificate in the future, simply run Let's Encrypt again.
 - If you like Let's Encrypt, please consider supporting our work by:

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

証明書ができたか確認。

# ls /usr/local/etc/letsencrypt/live/www.example.jp/
cert.pem        chain.pem       fullchain.pem   privkey.pem

無事証明書が生成された。これを正しく apache 側に反映すれば作業完了。
一応関係箇所抜粋。ファイルのパスはシンボリックリンク張るなり適宜正しく。

SSLCertificateFile "cert.pem"
SSLCertificateKeyFile "privkey.pem"
SSLCertificateChainFile "chain.pem"

○エラーへの対処
なお、ここでメールアドレスの入力を求められる画面が表示された場合、-w で指定したディレクトリが正しくない可能性が高い(経験者)。エラーはこんな感じ。

IMPORTANT NOTES:
 - If you lose your account credentials, you can recover through
   e-mails sent to root@example.jp.
 - The following errors were reported by the server:

   Domain: www.example.jp
   Type:   unauthorized
   Detail: Invalid response from http://www.example.jp/.well-known
   /acme-challenge/Sqay0dRf_OUmZpgYchEvRICO_5q-KuBXxOGBiNfFtds:
   "
   

■証明書の更新

更新のテストを行う。

# letsencrypt renew --dry-run

-------------------------------------------------------------------------------
Processing /usr/local/etc/letsencrypt/renewal/www.example.jp.conf
-------------------------------------------------------------------------------
** DRY RUN: simulating 'letsencrypt renew' close to cert expiry
**          (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
  /usr/local/etc/letsencrypt/live/www.example.jp/fullchain.pem (success)
** DRY RUN: simulating 'letsencrypt renew' close to cert expiry
**          (The test certificates above have not been saved.)

IMPORTANT NOTES:
 - Your account credentials have been saved in your Let's Encrypt
   configuration directory at /usr/local/etc/letsencrypt. You should
   make a secure backup of this folder now. This configuration
   directory will also contain certificates and private keys obtained
   by Let's Encrypt so making regular backups of this folder is ideal.

問題なさげなので cron に登録しておく。

[letsencrypt.sh]
#!/bin/sh

/usr/local/bin/letsencrypt renew --quiet
/usr/local/sbin/apachectl restart

とりあえずこんな感じ。

この記事にコメントする

Powered by WordPress, WP Theme designed by WSC Project. ログイン