ApacheTomcatをLet's EncryptのSSL証明書を使用してSSL化する
環境
OS
# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
JAVA
# java -version
openjdk version "11.0.14" 2022-01-18
OpenJDK Runtime Environment Temurin-11.0.14+9 (build 11.0.14+9)
OpenJDK 64-Bit Server VM Temurin-11.0.14+9 (build 11.0.14+9, mixed mode)
Apache Tomcat
# ${CATALINA_HOME}/bin/version.sh
Using CATALINA_BASE: /usr/local/java/apache-tomcat-9.0.58
Using CATALINA_HOME: /usr/local/java/apache-tomcat-9.0.58
Using CATALINA_TMPDIR: /usr/local/java/apache-tomcat-9.0.58/temp
Using JRE_HOME: /usr/local/java/jdk-11.0.14+9
Using CLASSPATH: /usr/local/java/apache-tomcat-9.0.58/bin/bootstrap.jar:/usr/local/java/apache-tomcat-9.0.58/bin/tomcat-juli.jar
Using CATALINA_OPTS:
NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
Server version: Apache Tomcat/9.0.58
Server built: Jan 15 2022 14:37:38 UTC
Server number: 9.0.58.0
OS Name: Linux
OS Version: 5.10.0-8-amd64
Architecture: amd64
JVM Version: 11.0.14+9
JVM Vendor: Eclipse Adoptium
Let's Encryptツール(certbot)のインストール
# apt-get install -y certbot
# certbot --version
certbot 1.12.0
# certbot certonly --webroot -w ドキュメントルートのPATH -d ドメイン名
鍵は、/etc/letsencrypt/live/ドメイン名 ディレクトリに格納される
# ls -l /etc/letsencrypt/live/ドメイン名
total 20
lrwxrwxrwx 1 root root 35 Jan 28 19:21 cert.pem -> ../../archive/ドメイン名/cert1.pem
lrwxrwxrwx 1 root root 36 Jan 28 19:21 chain.pem -> ../../archive/ドメイン名/chain1.pem
lrwxrwxrwx 1 root root 40 Jan 28 19:21 fullchain.pem -> ../../archive/ドメイン名/fullchain1.pem
lrwxrwxrwx 1 root root 38 Jan 28 19:21 privkey.pem -> ../../archive/ドメイン名/privkey1.pem
-rw-r--r-- 1 root root 692 Jan 28 19:21 README
cert.pem:サーバ証明書 (公開鍵)
chain.pem:中間証明書
fullchain.pem:サーバ証明書&中間証明書の結合ファイル
privkey.pem:秘密鍵
TomcatにLet's Encryptで取得した証明書を利用する場合は、JKS形式にする必要があるらしい・・・
取得した鍵を、そのまま利用できないのか???
/usr/local/java/apache-tomcat-9.0.58/conf/ディレクトリに、keystoreディレクトリを作成してLet's Encryptで取得した鍵をコピーして保存した。
そして、server.xmlファイルに鍵の場所を指定した。
# vi /usr/local/java/apache-tomcat-9.0.58/conf/server.xml
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateFile="conf/keystore/cert.pem"
certificateKeyFile="conf/keystore/privkey.pem"
certificateChainFile="conf/keystore/chain.pem" />
</SSLHostConfig>
</Connector>
ApacheTomcatを再起動!
# /usr/local/java/apache-tomcat-9.0.58/bin/shutdown.sh
# /usr/local/java/apache-tomcat-9.0.58/bin/startup.sh
ブラウザでアクセスしてみる。
8443ポートで使用可能!
以上