江戸一番のジャスタウェイ職人のブログ

江戸一番のジャスタウェイ職人

Let's Encryptと透かし入り証明書(nginx-ct)を導入し、証明書の更新も自動化する手順

Let's Encrypt 自体は本当に簡単なんですが nginx-ct を入れるのが本当に億劫でした。

それはなぜか、まず パッケージ管理システムに慣らされた我々にはとてもつらい という気持ちがあります。

コマンド一つでバージョンアップでき、各ディストリビューションに最適化された起動スクリプトやコンフィグファイルが提供されるのですから極力これを使いたいのです。

インストール手順

# まずは最新の nginx パッケージを手に入れる ( http://nginx.org/en/linux_packages.html )
wget -O - http://nginx.org/keys/nginx_signing.key | sudo apt-key add -

sudo sh -c 'echo "deb http://nginx.org/packages/mainline/ubuntu/ trusty nginx" >> /etc/apt/sources.list'
sudo sh -c 'echo "deb-src http://nginx.org/packages/mainline/ubuntu/ trusty nginx" >> /etc/apt/sources.list'

sudo apt-get update

# そのままインストールしたいのを堪え、ビルドに必要なツールをインストールし、ソースを手に入れます
sudo apt-get build-dep nginx
sudo apt-get source nginx

# 次に、透かし入り証明書の導入に必要な nginx-ct を手に入れます
sudo wget https://github.com/grahamedgecombe/nginx-ct/archive/master.tar.gz
sudo tar xzvf master.tar.gz

# 更に、OpenSSL も最新版を手に入れます
sudo wget https://www.openssl.org/source/openssl-1.0.2g.tar.gz
sudo tar zxvf openssl-1.0.2g.tar.gz 

# 最初に手に入れた nginx の configure オプションに nginx-ct と OpenSSL の記述を記述します
cd nginx-1.9.14/
sudo cp debian/rules debian/rules.bak
sudo vi debian/rules
diff -u debian/rules.bak debian/rules

--- debian/rules.bak    2016-04-07 15:22:04.952848801 +0900
+++ debian/rules    2016-04-06 19:46:41.649867569 +0900
@@ -54,7 +54,9 @@
    $(WITH_HTTP2) \
    --with-cc-opt="$(CFLAGS)" \
    --with-ld-opt="$(LDFLAGS)" \
-   --with-ipv6
+   --with-ipv6 \
+   --with-openssl=/usr/local/src/openssl-1.0.2g \
+   --add-module=/usr/local/src/nginx-ct-master

# ビルドします
sudo dpkg-buildpackage -b
cd ..

# インストールします
sudo dpkg -i nginx_1.9.14-1~trusty_amd64.deb

# うっかり apt-get upgrade して nginx-ct を失わないように nginx を更新対象から除外します
sudo apt-mark hold nginx

これならまぁ OpenSSL のバージョンが上がる度に対応すると考えても数分で終わるので耐えられる...筈

証明書の更新の自動化

letsencrypt-auto コマンドの後に ct-submit.sh を叩くスクリプトを用意し、これを crontab にセットします。

install ct-submit

cd /usr/local/src
sudo wget https://github.com/grahamedgecombe/ct-submit/archive/master.tar.gz
sudo tar zxvf master.tar.gz
cd ct-submit-master/
sudo /usr/local/go/bin/go build
sudo install -s -m755 ./ct-submit-master /usr/local/bin/ct-submit

/home/aska/justaway.info/scripts/ct-submit.sh

#!/bin/sh -eu
KEY=/etc/letsencrypt/live/justaway.info/fullchain.pem
SCTS_DIR=/etc/letsencrypt/live/justaway.info/scts
CTSUBMIT=/usr/local/bin/ct-submit

echo 1
sudo sh -c "$CTSUBMIT ct.googleapis.com/aviator \
<$KEY \
>$SCTS_DIR/aviator.sct"
echo 2
sudo sh -c "$CTSUBMIT ct.googleapis.com/pilot \
<$KEY \
>$SCTS_DIR/pilot.sct"
echo 3
sudo sh -c "$CTSUBMIT ct.googleapis.com/rocketeer \
<$KEY \
>$SCTS_DIR/rocketeer.sct"

/home/aska/justaway.info/scripts/renew-cert.sh

#!/bin/sh -eu
# crontab 設定例(rootユーザーのcrontabに入れます)
# 0 4 1 * * /home/aska/justaway.info/scripts/renew-cert.sh

/usr/local/src/letsencrypt/letsencrypt-auto certonly --webroot -d justaway.info --webroot-path /home/aska/justaway.info/static --renew-by-default
/home/aska/justaway.info/scripts/ct-submit.sh

まとめて github で管理すると便利

github.com