spring
SSL
spring-boot
letsencrypt

Spring bootでSSL(HTTPS)を有効にする~Let's Encrypt編~

More than 1 year has passed since last update.

Spring bootでSSL(HTTPS)を有効にするのつづき


はじめに

Let's Encryptがベータ版から正式版になったので、Spring Bootサーバーの証明書を入れ替えてみた。


Let's Encryptの実行

Let's Encryptの使い方は公式を見たほうがいいと思いますが、一応一連のコードを書いておきます。前提としては「自分のドメインを持っていて、そのドメインにIPアドレスが割り振られていること」です。ドメインはお名前ドットコムかなんかで購入できます。今回はその辺の話は省略します。実行前に80ポートと443ポートで動いているサービスは停止しておいてください。

git clone https://github.com/letsencrypt/letsencrypt

cd letsencrypt
./letsencrypt-auto --help
./letsencrypt-auto certonly --standalone -d example.com

example.comには自分のドメインやサブドメインを入力してください。メールアドレスを聞かれるので入力し、規約に合意するか聞かれるので規約を読んで判断してください。正常に完了すれば、/etc/letsencrypt/live/example.com/以下に各種証明書が格納されます。

証明書は90日間有効なので、都度更新します。更新はまだ試していないのですが、下記コマンドで大丈夫だと思います。

if !./letsencrypt-auto renew > /var/log/letsencrypt/renew.log 2>&1 ; then

echo Automated renewal failed:
cat /var/log/letsencrypt/renew.log
exit 1
fi


Spring Boot用にPKCS12に変換する

※他に良いやり方があったら教えて下さい

Let's Encryptで出力されるのはPEMファイルです。少し調べましたがそのままではSpring Bootに使えないようなので、以前の記事で紹介したように、PEMからPKCS12ファイルを用意します。

sudo openssl pkcs12 -export -in /etc/letsencrypt/live/example.com/cert.pem -inkey /etc/letsencrypt/live/example.com/privkey.pem -out keystore.p12 -name tomcat -CAfile /etc/letsencrypt/live/example.com/chain.pem -caname root

パスワードを求められるので入力します。このパスワードは以前の記事server.ssl.key-store-passwordに使います。


終わりに

簡単ですが、以上で完了です。自己証明だとWarningが出ていましたが、出なくなりました。なんか少しセキュアになった気分。

Tomcatでやる場合は簡単に証明書の更新ができるみたいです。今回紹介した私のやり方だと、PKCS12ファイルを作るのにパスワードの入力を手でやらないといけません。つまりcron等で証明書の自動更新ができないです。誰かこのあたり良いやり方を知っている方がいれば教えていただければ幸いです。