Amazon Linux AMIでLets’s Encrypt

Googleの常時SSL化推奨などにより、最近はすっかり「SSLにあらずんば人にあらず…、じゃなくて安全なWebサイトにあらず」という感じになりつつあります。そこで、このサイトもココログからWordPressへの移行に合わせて、常時SSL化しました。

常時SSL化で困るのが、SSLサーバー証明書の取得費用。業務で運用しているサイトであれば、困るほどの費用ではありませんが、個人のサイトとなると、軽くない負担です。

そこで当サイトでは、無料でSSLサーバー証明書を発行してくれるLets’s Encryptを利用しました。Lets’s Encryptは、アメリカの公益法人で、Mozilla、Akamai、cisco、Googleなどがスポンサーになっているので、信頼して問題ない組織だと思います。ただ、自分で秘密鍵を生成する手間も必要なく、サーバーにLets’s Encryptのツールをインストールするだけで利用できるという形式は、楽で良いのですが、怖くもあります。

前置きはこのくらいにして、実際にAmazon Linux AMIでのLets’s Encryptを使った常時SSL化の手順を説明します。HTTPDはApache 2.4で、mod24_sslのインストールなど、SSL導入の準備は整っている状態であること前提とします。

まず、gitをインストールします。何でgitが必要なのかと言うと、GitHubからSSLサーバー証明書の設置を自動で実行してくれるLets’s Encryptのツールを取得する必要があるからです。

# yum install git

certbotをインストールします。certbotが、Lets’s Encryptのツールです。

# cd /usr/local/
# git clone https://github.com/certbot/certbot

cerbot-autoコマンドを実行します。Amazon Linux AMI環境はまだ検証段階らしく–debugを付けないと怒られるので、–debugと-nオプションを指定して実行します。pythonの仮想環境のインストールなどが行われるようです。

# cd ccertbot
# ./certbot-auto -n --debug

certbotの環境が整ったら、SSL証明書の発行を行います。example.comの部分は自分のサイトのドメインを指定してください。

# ./certbot-auto certonly --webroot \
> -w /var/www/www.example.com/wordpress -d www.example.com \
> -m info@example.com \
> --agree-tos -n

これだけで、既に証明書、秘密鍵、中間CA証明書の設置が完了しています。無茶苦茶楽です。

次にApacheのssl.confで、証明書、秘密鍵、中間CA証明書を指定します。

# cd /etc/httpd/conf.d
# vim ssl.conf

ssl.confの修正箇所は以下の三点です。

# 証明書
SSLCertificateFile /etc/letsencrypt/live/www.example.com/cert.pem
# 秘密鍵
SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
# 中間CA証明書
SSLCertificateChainFile /etc/letsencrypt/live/www.example.com/chain.pem

最後に忘れてはならないのは、証明書の自動更新の設定です。Lets’s Encryptの証明書の有効期限は90日間と短いので、cronで月に1回とか、証明書の自動更新処理を実行したほうが色々幸せだと思います。

# crontab -e

以下の例だと毎月3日の4時30分に、証明書の自動更新処理とApacheの再起動を実行しています。

30 4 3 * * /usr/local/certbot/certbot-auto renew --force-renewal && /sbin/service httpd restart