Let’s Encrypt(レッツエンクリプト)とは

無料で使えるSSL/TLS証明書発行サービスです。
2016年4月12日から正式サービスが開始しましたが、すでに、2015年9月のスタートから、170万以上の証明書を発行しているそうです。

Let’s Encrypt – Free SSL/TLS Certificates

SSL/TLSとは

SSL/TLSとは、インターネットを暗号化して、送受信できる仕組みです。
昔から、ネットショップなどで買い物をする際、クレジットカードなどの情報を安全にやり取りするために使われています。
そして、Googleが常時SSL/TLSを推奨し、普通のWebサイトでも暗号化が求められる時代になってきました。

SSL/TLSは、手続きが面倒で、有料であることが多いですが、Let’s Encryptは、違いました。

事前準備

ツクメモは、さくらVPSなので、そちらで作業いたします。
サーバーはApacheです。
Let’s Encryptを入れる前に、インストールされている必要があるパッケージを確認します。
バージョンの確認ができれば大丈夫でしょう。

$ httpd -v
(バージョン情報)
$ openssl version
(バージョン情報)
$ rpm -aq | grep mod_ssl
(バージョン情報)
$ git --version
(バージョン情報)

SSL/TLS通信のための443ポートを確認

SSL/TLS通信のための、443ポートが開いているか、確認します。
こんな感じででれば、大丈夫だと思います。

$ sudo iptables -L | grep https
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https

Let’s Encryptのインストール

Let’s Encryptでは、環境にあわせて、いくつかのプラグインが提供されています。
今回は、あまり環境に左右されないwebrootで証明書を取得します。

セットアップ

まず、ダウンロードとインストールを行います。

$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
$ ./letsencrypt-auto --help

証明書の取得

webrootコマンドで、ドキュメントルートドメイン名をオプションに設定します。

$ ./letsencrypt-auto certonly --webroot -w /var/www/html/tukumemo.com -d tukumemo.com -d www.tukumemo.com

lets_mail

コマンドで、メールアドレスを設定しませんでしたが、ここで聞かれました。

lets_agree

オプションについて

certonly 証明書の取得のみを行います。
–webroot ドキュメントルートに、認証用ファイルを生成します。
-w ドキュメントルートを指定します。
-d 証明書を取得するドメイン名を指定します。
複数設定できます。

証明書をサーバーに設定

以下の場所に証明書が取得されるので、vhosts.confssl.confなどに設定してください。

証明書
/etc/letsencrypt/live/tukumemo.com/cert.pem

証明書+中間CA証明書
/etc/letsencrypt/live/tukumemo.com/fullchain.pem

秘密鍵
/etc/letsencrypt/live/tukumemo.com/privkey.pem

中間CA証明書
/etc/letsencrypt/live/tukumemo.com/chain.pem

$vi /etc/httpd/conf.d/vhosts.conf

<VirtualHost *:443>
(略)
   SSLCertificateFile      /etc/letsencrypt/live/tukumemo.com/cert.pem
   SSLCertificateKeyFile   /etc/letsencrypt/live/tukumemo.com/privkey.pem
   SSLCertificateChainFile /etc/letsencrypt/live/tukumemo.com/chain.pem
</VirtualHost>

$ service httpd reload

Apacheのバージョンでも少し書き方が違うようなので、適宜確認してください。

confファイルのチェック

設定にエラーがないことを確認しましょう。

$ httpd -t
Syntax OK

自分に起きたエラー

私の場合、こんなエラーに遭遇しました。

mod_sslを有効にする
Invalid command 'SSLEngine', perhaps misspelled or defined by a module not included in the server configuration

confのどこかにmod_sslを有効にする記述を入れます。

LoadModule ssl_module modules/mod_ssl.so
証明書のパーミッション
SSLCertificateFile: file '/etc/letsencrypt/live/tukumemo.com/cert.pem' does not exist or is empty

証明書のパーミッションを変更しました。

.htaccessにリダイレクトを入れる

アクセスされたとき、httpsになるように.htaccessにリダイレクトの設定を記入します。

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

証明書を自動更新

証明書を自動更新するためにcrontabに登録します。
crontabとは、設定した時間になったらスクリプトなどを実行してくれるコマンドです。

$ crontab -u root -e
00 05 * * 5 /home/morisan/letsencrypt/letsencrypt-auto renew --force-renew && service httpd reload

SSL/TLSの問題

こうして、tukumemoがSSL/TLSになったのですが、いくつか問題が起きました。

Amazonのアフェリエイト

Amazonのアフェリエイトがhttpsに対応していないです。

そこで、iframeを利用した公式のものではなく、アフェリエイトタグを生成するWebサービスを利用します。
他にもいろいろありましたが、ツクメモでは、こちらを採用いたしました。

amazlet

出力されたタグは、書き換えできるので、httpsでない画像部分を書き換えます。

http://ecx.images-amazon.comhttps://images-na.ssl-images-amazon.comに変えると、大丈夫になります。

いまのところ、手動なので、全ページに適用しておりません。

はてなブックマーク

すごく困ることではありませんが、httpのときに頂いたブックマークが0になってしまいました。

まとめ

root権限でアクセスできるサーバーが必要になるので、それ自体の敷居は高いと思いますが、すでに環境があって、SSL/TLSにしていない場合、結構簡単にできるので、やってみてはいかがでしょうか。
では!

暗号技術入門 第3版 秘密の国のアリス
SBクリエイティブ (2015-09-17)
売り上げランキング: 13,941