-->

Let's Encryptでkeystore.jksを自動作成

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

renewal-hooksを使ったkeystoreの更新

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

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

#!/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のシェルのテスト

実際に証明書が更新された時に、自動でシェルスクリプトが実行されるかテストしてみます。
以下のコマンドを打ち込んください。
Copy Code

sudo certbot renew --dry-run --run-deploy-hooks
成功すると以下のような文言が流れます
Copy Code

Congratulations, all simulated renewals succeeded:

以下のようなエラーが出る場合、certbotのversionが古い可能性があります。最新のcertbotに入れ替えてください。
Copy Code

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