Webセキュリティの小部屋

Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから
公開日:2016年4月13日
最終更新日:2016年10月1日

無料SSL/TLS証明書のLet's Encryptが正式版になったので自動更新を含めて試してみた

はじめに

2016年10月1日追記:
Let's Encrypt の実行方法が変更になったので、以下の記事を参考にするようにしてください。なお、この記事の方法も継続して実行できるので、既に設定された方は変更する必要はありません。

追記ここまで。

 

Let’s Encrypt とは、無償で SSL/TLS 証明書を発行してくれるサービスです。Web 全体を HTTPS化することを目指してサービスを行っており、非常に注目されています。

この Let's Encript は今までパブリックベータとして公開されていたのですが、この度、正式版としてリリースされました。

詳しいことは、以下のパブリックベータ時の記事を参照してください。若干、コマンドが変わっているところがありますが、それは後述します。

パブリックベータから変わった点

Let’s Encrypt Client のバージョンが 0.5 になり、コマンドが letsencrypt-auto に統一されました。

残念ながら、Let’s Encrypt の Get Started に書かれているサンプルはバージョンが 0.4 のものなので、まだコマンドが統一されておらずそのままでは動作しません。

なぜ分かったかというと、GitHub に掲載されているコードサンプルが  letsencrypt-auto に変わっていたためです。

また、パブリックベータでは未公開であった SSL/TLS 証明書の有効期限を更新するコマンドが公開されました。これで自動で証明書の更新ができるので、Let’s Encrypt の懸念点であった有効期間の短さが解消されますね。

なお、自動更新のスクリプトも数週間後に公開する予定だそうです。この記事では、サンプルスクリプトがあったので、それを元に変更して利用しています。

 

2016年4月14日追記:

CentOS 6 に Let's Encrypt をインストールしようとしましたが、うまくいきませんでした。解決方法については、後述の追記に記載します。

事前準備

事前に以下のパッケージをインストールしておきます。

デフォルトで、CentOS 7 は HTTP(80)/HTTPS(443) ポートを塞いでいるので、ファイアウォールのポートを開放します。

Apache を起動します。

Let’s Encrypt Client のインストール

Let’s Encrypt Client のインストールは簡単で、以下のように行います。最後のコマンドを実行すると、必要なツールが自動でインストールされます。それが嫌な場合は、Let’s Encrypt の採用は見送った方がよいかもしれません。

インストールが成功すると、以下のようなガイドが表示されます。ここをよく見れば、いろいろと分かるのではないでしょうか。

SSL/TLS 証明書のインストール

SSL/TLS 証明書のインストールでは、webroot プラグインを利用します。これを利用することで、Web サーバーを再起動することなく証明書をインストールすることができます。

ここでは、ドメイン名を aruse.top 、公開ディレクトリを /var/www/html として以下のコマンドを実行します。

インストールの途中でメールアドレスを聞かれるので、メールアドレスを入力して [了解] を押します。

Pic01

利用規約に同意する場合は <Agree> を押します。

Pic02

インストールが終了すると、以下のメッセージが表示されます。/etc/letsencrypt/live/aruse.top/fullchain.pem にサーバー証明書+中間証明書が作成されたことが分かります。同一ディレクトリに、サーバー証明書、中間証明書、秘密鍵も作成されています。

なお、Apache 2.4.8 未満の場合は、 サーバー証明書、中間証明書、秘密鍵 が必要で、Apache 2.4.8 以上の場合や Nginx の場合は、サーバー証明書+中間証明書、秘密鍵が必要になります。

CentOS の Apache はデフォルトで Apache 2.4.6 なので、サーバー証明書、中間証明書、秘密鍵 の指定が必要です。

Apache の設定

SSL の設定ファイルを以下のように変更します。

Apache の設定を以下のように変更します。

Apache の設定を反映させます。Apache の再起動は不要です。

Chrome で https://aruse.top にアクセスし証明書を確認すると、正しい証明書になっていることが分かります。

Pic03

SSL/TLS 証明書の自動更新

SSL/TLS 証明書の自動更新は renew というサブコマンドを使用します。

以下のような具合です。

なお、証明書の期限切れが近づくまで証明書は更新されないので、テストで強制的に証明書を最新にしたい場合は、--force-renewal を使用します。

実際に強制的に最新にしたのが以下のものです。時間が変わっていますね。

Pic04

さらに踏み込んで、スクリプトで自動更新を行うようにします。

その前に、Let’s Encrypt Client を /usr/local/bin に持ってきましょう。

それからスクリプトを /etc/cron.daily/ に作成します。これは更新した証明書の有効期間は30日なのですが、失敗することを考えて毎日行うよう公式が推奨しているためです。

Running letsencrypt renew will renew all certificates that are within the renewal window (by default, certificates within 30 days of expiry)

Once you’re happy with your script, you can run it with cron or systemd. We recommend running renewal scripts at least daily, at a random hour and minute. This gives the script many days to retry renewal in case of transient network failures or server outages.

以下のようにしてファイルを作成します。

スクリプトは以下のようになります。

スクリプトを保存したら、スクリプトを実行できるようパーミッションを変更します。

このスクリプトのコマンドに --force-renewal をつけて実行すると、以下のように時間が最新になります。Apache の再起動は行われていません。

Pic05

追記:CentOS 6 でインストールが失敗する対策方法

CentOS 6 だと、python のバージョンが 2.6 のため Let's Encrypt のインストールがうまくいきません。インストールのメッセージに以下のエラーが含まれます。

この問題を解消するには、python 2.7 をインストールする必要があります。インストールは以下のように行います。私の環境では、yum update を行わないでもうまくいきました。

また、/etc/cron.daily/letsencrypt_renew を以下のように変更します。

おわりに

ようやく、Let’s Encrypt も正式版になり本格的に利用することができるようになりましたね。

WordPress.com も独自ドメインは  Let’s Encrypt を使用して HTTPS 化するという話なので、これからどんどん利用範囲が広がっていくことが予想されます。

ブログや個人の Web サービスあたりは Let’s Encrypt で十分ではないかと思います。

注意点としては、コマンドの仕様が固まっていない感じがするところでしょうか。

ですが、使用方法も簡単なので積極的に使っていきたいですね。

参考サイト


スポンサーリンク




カテゴリー:ブログ

Twitter でも、いろんな情報を発信しています。



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA