×
最新の人気コンテンツ情報をまとめた
メールマガジンをお届けします

ページトップへ
Cisco社やAkamai社、Google社などがスポンサーとなって提供する無料SSLサーバー証明書サービスの「Let's Encrypt」は、2016年4月12日に正式サービスとなりました。
提供するSSLサーバー証明書は、標準的なドメイン認証(DV)証明書です。独自ドメインをお使いであれば、商用利用可能なSSLサーバー証明書を取得することができます。SSLサーバー証明書と言いますと、一般的には有料で1年や2年毎に更新するものですが、「Let's Encrypt」では有効期間が90日のため、定期的に更新する必要があります。ここでは有効期間を延長するプログラムについてもご紹介していきます。IDCFクラウドを使っていますが、ご紹介する内容は、IBM SoftLayerにも適用することができます。

サーバーの用意

「Let's Encrypt」は、独自ドメインを取得済みであり、自社あるいは自分が管理者となっているサーバーを用意する必要があります。サーバーを用意される場合はこちらの記事をご覧ください。また、最低限Webサーバーも必要です。ここでは、サーバーのOSとして、Ubuntu Server 14.04.5 LTS 64bit版を前提に進めていきます。単純にLinuxのシェアで、Ubuntuが最も多いという理由です。「Let's Encrypt」は、Linux(CentOSやUbbuntu、RedHat Enterprise Linuxなど)とWindows Server、MacOSX Serverに導入することができます。試していませんが、MacOSX Serverに入ることから、同じPOSIX互換であるAIXなどに入れることができるかもしれません。
Webサーバーを用意する場合は下記を実行することで、最低限のWebサーバーを用意することができます。一緒に「git」も入れておきます。「git」はソースコードをダウンロードするために使用します。
# apt-get install apache2 git

Let's Encryptの導入

ここでは、サーバーのOSとして、Ubuntu Server 14.04.5 LTS 64bit版を前提にしておりますので、SSH接続でサーバーにアクセスします。SSH接続には、定番の「Tera Term」を使用します。もしお手元のPCは、Macの方は「ターミナル」が使用可能です。

サーバーに接続しましたら、下記の各コマンドを実行し、Github上のソースコードから「Let's Encrypt」を導入していきます。
作業フォルダに移動します。
# cd /usr/local/src/
「Let's Encrypt」のソースコードをダウンロードします。ダウンロード後、インストーラーを起動します。
# git clone https://github.com/certbot/certbot
# cd certbot/
# ./letsencrypt-auto
./letsencrypt-auto を実行すると、SSLサーバー証明書の使用しているWebサーバーへの設定を自動で行います。

インストーラーで下記の画面が出ましたら、Webサーバーで使用するドメインを入力します。ここでは、ドメインとして「mautic.kolinzlabs.com」を使用しています。

次は、証明書更新のお知らせなどに用いるメールアドレスを入力します。

「Let's Encrypt」の利用規約に同意します。

常時SSLにするかどうか決めます。ここではHTTP接続とHTTPS接続の両方が使える「Easy」を選びました。
すべてSSL化し、HTTP接続を使用不可にする常時SSLには、デメリットもありますので慎重に判断しましょう。たとえば常時SSLによるデメリットとして、常時SSLの仕組みを悪用し、暗号化した通信に攻撃を仕込むみことでセキュリティ対策をパスするといったセキュリティ上の脅威もあります。

設定が完了しますと下記のような画面が表示されます。実際にWebブラウザでアクセスして、SSLが適用されているか動作確認します。

これで、「Let's Encrypt」の導入は出来ました。とはいえ、「Let's Encrypt」の証明書の有効期間は90日です。従って、90日以内の更新を定期的に実施する必要があります。毎回手動で更新することは非常に面倒なので、Linux環境の場合は、cronを使って自動化しましょう。

Cronによる証明書更新の自動化

「Let's Encrypt」のSSLサーバー証明書の有効期間は90日のため、90日以内に更新処理が必要です。そこでシェルスクリプトを作成し、有効期間延長のための更新処理を毎月あるいは2ヶ月毎に1回行うように設定します。

先ほど使用した作業フォルダに移動し、シェルスクリプトを作成するディレクトリを作成および移動します。
# cd /usr/local/src/
# mkdir cert
# cd cert 
証明書更新のプログラム(=シェルスクリプト)を作成します。エディタには「nano」を使用しました。
# nano renew_cert.sh
#! /bin/bash

# Apacheの停止
service apache2 stop

# 証明書の強制更新
cd /usr/local/src/certbot
./letsencrypt-auto renew --force-renew

# Apacheの起動
cd /home/
service apache2 start
上記のように記述するか、コピー&ペーストします。
./letsencrypt-auto renew --force-renew は、証明書の有効期間を待たずに強制的に証明書を更新することを指しています。

実行権限を付与します。
# chmod a+x /usr/local/src/cert/renew_cert.sh
crontabコマンドを使って、cronの設定を変更します。
# crontab -e
毎月あるいは2ヶ月毎に1回証明書を更新するように、cronの設定を追加します。
毎月1日の午前3時に、証明書を更新する場合
* 3 1 * * root /usr/local/src/cert/renew_cert.sh

2ヶ月毎に1日の午前3時に、証明書を更新する場合
* 3 1 1-12/2 * root /usr/local/src/cert/renew_cert.sh
Ctril + xキーを押し、yキーで保存します。
cronを再起動します。下記コマンドでを実行し、cronを再起動すれば設定完了です。
# service cron restart
もし証明書などがどこに入っているか気になる方は、下記コマンドを実行してみてください。取得された証明書と鍵がどこにあるかわかります。
# /etc/letsencrypt/live/Let' Encryptに適用したドメイン名
今回は、 # /etc/letsencrypt/live/mautic.kolinzlabs.com

# ls -l を実行

まとめ

IBM SoftLayerやIDCFクラウド、その他VPS等を使っていますと、SSLサーバー証明書の費用がサーバー費用よりも高くなることが一般的であり、低コストなSSLサーバー証明書を使いたいことは多々あります。「Let's Encrypt」は、有効期間の関係で前述のような自動更新プログラムを用意する必要がありますので、きちんと準備さえ出来れば、低コスト(=無料)なSSLサーバー証明書として利用することができます。