Let’s EncryptでCT aviatorサーバーが終了した影響でSSLエラーが発生したので対応した話

どうも段田です。

今回はKUSANAGIの話になります。
KUSANAGIでは無料で利用出来るSSL証明書のLet’s Encryptを使っていますが、
こちらでエラーが出た時に対処した話です。

AAスポンサーリンク

Let’s Encryptの自動更新ができなかったケース

12月18日日曜日にWordbench東京でLTをするにあたり動作を見せるため、
下記でデモページを用意していました。

当日の朝、デモページを確認したら「この接続ではプライバシーが保護されません」と表示される。
画面のキャプチャ撮るの忘れてましたので、こちらで画面イメージを確認してもらえればと思います。

察するにSSL証明書の期限が切れている模様。
Let’s Encryptは90日間の有効期限で自動更新ができます。
このサイトも自動更新するようにしていたのですが、どうやら更新ができていない様子。

自動更新が失敗していると思い、サーバーにログインしてkusanagiコマンドで手動でSSL更新を実施しました。

kusanagi ssl --email メールアドレス

そうすると下記の内容が表示されました。

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
Missing command line flag or config entry for this setting:
You have an existing certificate that contains a portion of the domains you requested (ref: /etc/letsencrypt/renewal/dandashokai.com.conf)

It contains these names: dandashokai.com

You requested these names for the new certificate: dandashokai.com, www.dandashokai.com.

Do you want to expand and replace this existing certificate with the new certificate?

(You can set this with the --expand flag)
Auto renewal certificate is already disabled. Nothing to do.
unexpected status 403 Forbidden from log server:

{
  "error_message": "This log is frozen, no further entries may be added.",
  "success": false,
  "i": "   __      ",
  "c": "-=(o '-    ",
  "e": "   `.-.\\   ",
  "p": "   /|  \\\\  ",
  "a": "   '|  ||  ",
  "l": "    _\\_):,_"
}
Cannot execute ct-submit ct.googleapis.com/aviator < /etc/letsencrypt/live/dandashokai.com/fullchain.pem
Enabling CT.
Modified nginx/httpd config files and restart.
Done.

エラーが出てますね。。。。

内容を読んでみるとct.googleapis.com/aviatorのところで処理がうまくいっていない様子なので、
色々ぐぐってみると

福田です。12/1をもってGoogle Certificate Transparency Aviatorサーバ…

Google Certificate Transparency Aviatorサーバー(ct.googleapis.com/aviator)での発行が12月で停止したようです。

対応手順

原因はわかったので対応になるのですが、
既にKUSANAGIではバージョンアップでの対応がされてます。

なので、これから対応する場合はKUSANAGIのバージョンアップを実施します。

yum update

そして、SSLエラーが既に発生している場合は下記のコマンドを実施して、
SSL証明書を更新します。その後、ミドルウェア再起動します。(私はnginx利用なのでnginx)

kusanagi update cert
kusanagi ssl --email メールアドレス
kusanagi nginx restart

これでSSLが更新されているかなあと思います。

今回の私のケースだと12月18日時点ではKUSANAGIのバージョンアップはまだだったので、
下記の手順で対応しました。
この手順も一応残しておきたいと思います。

手順は処理を実施しているシェルスクリプトからct.googleapis.com/aviatorの箇所を除去します。

シェルスクリプトは/usr/bin/ct-submit.shなので中身を見ると

#!
# /usr/bin/ct-submit.sh [SSL path]
# used certbot-auto renew --renew-hook /usr/bin/ct-submit.sh

SSLPATH=${1:-RENEWED_LINEAGE}

if [ -z "$SSLPATH" ] ; then
        exit 1
fi

if [ -d "$SSLPATH" -a -f "$SSLPATH/fullchain.pem" ] ; then
        SSLFILE="$SSLPATH/fullchain.pem"
else
        SSLFILE=$SSLPATH
        SSLPATH=${SSLFILE%/*}
fi

if [ -d $SSLPATH ] ; then
        [ -d "$SSLPATH/scts" ] || mkdir -p "$SSLPATH/scts" || exit 1
        for i in aviator pilot rocketeer
        do
                /usr/bin/ct-submit ct.googleapis.com/$i < ${SSLFILE} > ${SSLPATH}/scts/${i}.sct || \
                        ( echo "Cannot execute ct-submit ct.googleapis.com/$i < ${SSLFILE}" ; exit 1)
        done
fi

exit 0

となっていて
下記の部分でfor文使って処理しています。

for i in aviator pilot rocketeer
        do
                /usr/bin/ct-submit ct.googleapis.com/$i < ${SSLFILE} > ${SSLPATH}/scts/${i}.sct || \
                        ( echo "Cannot execute ct-submit ct.googleapis.com/$i < ${SSLFILE}" ; exit 1)
        done
fi

なので、
for i in aviator pilot rocketeerとなっている部分を
for i in pilot rocketeerにします。

for i in pilot rocketeer
        do
                /usr/bin/ct-submit ct.googleapis.com/$i < ${SSLFILE} > ${SSLPATH}/scts/${i}.sct || \
                        ( echo "Cannot execute ct-submit ct.googleapis.com/$i < ${SSLFILE}" ; exit 1)
        done
fi

そして、ct-submit.shを保存した後にSSL証明書を更新を実施します。

kusanagi update cert
kusanagi ssl --email メールアドレス
kusanagi nginx restart

これで私の場合はSSL更新ができるようになりました。

iPhoneのSafari等一部ブラウザで表示ができないケース

そして、iPhoneのSafari等一部ブラウザだけ表示ができないケースもあるそうで、
友人のサイトがまさにその状態になっていたので、お手伝いしました。
なので、手順を記載します。

対応手順

まずはKUSANAGIのバージョンアップを実施します。

yum update

この後、SSL証明書の更新をしたのですが、治りませんでした。

手詰まりになりググり、こちらのまどかの戯言集さんの記事を参考にしました。

mv /etc/letsencrypt/live/サイトドメイン名/scts/aviator.sct /tmp/aviator.sct
kusanagi restart

aviator.sctファイルが空ファイルでもあるとだめっぽいらしく、移動する処置になりました。
再起動したら対象のブラウザでも見られるようになり一安心でした。

まとめ

というわけで、Let’s EncryptでのSSLエラー関連の対応手順は以上になります。
文中には書きましたが、
KUSANAGIをバージョンアップしておけばよいかなと思います。
既にSSLエラー発生している場合は適宜SSL証明書の更新をしてください。

今後、同様なケースが発生しても

CTログサーバ登録失敗の処理
CTログサーバへ登録失敗したとき、エラーメッセージを表示して次のログサーバを登録するように変更しました。またCTログサーバへの登録に失敗したときに、空のSCTファイルが残らないように修正しました。

とKUSANAGIの更新履歴にありましたので、
失敗しても別のサーバーを見るように改修されているので一安心かなあと思います。

ちなみに私は移動中に対応して無事LTでデモページを使うことが出来たのですが、
ド緊張でカミカミの上時間オーバーになる酷いLTになりました。

資料やデモページが万全でも喋る私がどうしようもなかったので来年はもっとスムーズにできるよう努めたいと思います(涙)