-->

SSLのkeystoreを自動更新

SSLのkeystoreを自動更新

Let's EncryptのSSL証明書の自動更新と共にkeystore.jksも自動作成する方法。

関連ページ 参考URL
Let's Encryptは SSL証明書 を自動更新してくれますが、Tomcatでは、その証明書からkeystoreを作らないと結局サイトが動かなくなります。
いろいろ調べて、renewal-hooksディレクトリ以下に シェルスクリプト を置くと、証明書の自動更新直後にそれを実行してくれる事が分かりました。

renewal-hooksを使ったkeystoreの更新

Ubuntu環境であれば、
etc/letsencrypt/renewal-hooks/deploy
の下にシェルスクリプトを置くと、SSL更新と連動してそれが実行されます。
このシェルの中にkeystoreを作成する処理すれば、ユーザーは一切SSLを気にせずにサイトを運用できます。

自分の場合はサイトの運営にTomcatを使っているので、シェルの中身は下のような内容になります。
#!/bin/bash

#

LIVE_PATH=
[letsencrypt/live下のサイトフォルダ]

TOMCAT_PATH=
[tomcatのconfフォルダ]

PASS=
[パスワードの文字列]


CHAIN_PATH="${LIVE_PATH}"
[fullchainのファイル名]

PEM_PATH="${LIVE_PATH}"
[privkeyのファイル名]

P12_PATH="${LIVE_PATH}"
[pkcs12のファイル名]

JKS_FROM_PATH="${LIVE_PATH}"
[keystoreのファイル名]

JKS_TO_PATH="${TOMCAT_PATH}"
[keystoreのファイル名]


sudo rm -r "${P12_PATH}"

#pkcs12ファイルを作成

sudo openssl pkcs12 -export -in "${CHAIN_PATH}" -inkey "${PEM_PATH}" -out "${P12_PATH}" -password pass:"${PASS}"
#keystoreを作成

sudo keytool -importkeystore -destkeystore "${JKS_FROM_PATH}" -srckeystore "${P12_PATH}" -srcstoretype PKCS12 -srcstorepass "${PASS}" -deststorepass "${PASS}"
#keystoreをtomcatへコピー

sudo mv -f "${JKS_FROM_PATH}"  "${JKS_TO_PATH}"
#tomcatを再起動

sudo service tomcat restart

# EOF
keystoreの作成と、その前のpkcs12ファイルの作成には本来サーバ管理者によるパスワードの入力が必要です。
ただパスワードを入力する必要があるならそれは自動更新と言わないので、コードの中にパスワードも押し込んでます。

ルートの実行権限を付与しないとこのシェルスクリプトの実行は成功しません。
また今回の場合パスワードを内部に打ち込むので、セキュリティ上の観点から、chmodでアクセス権限を700にしましょう。

deployのシェルのテスト

実際に証明書が更新された時に、自動でシェルスクリプトが実行されるかテストしてみます。
以下のコマンドを打ち込んください。
sudo certbot renew --dry-run --run-deploy-hooks
成功すると以下のような文言が流れます
Congratulations, all simulated renewals succeeded:

以下のようなエラーが出る場合、certbotのversionが古い可能性があります。最新のcertbotに入れ替えてください。
Certbot can obtain and install HTTPS/TLS/SSL certificates.  By default,
it will attempt to use a webserver both for obtaining and installing the
certificate.
certbot: error: argument -v/--verbose: ignored explicit argument 'ersion'
0
0