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ポートで使用可能!

 

以上