7.8. Tomcatで直接認証する場合の設定例

7.8.1. Tomcat Connectorのコンフィギュレーションの例

TomcatのConnectorの例は、以下を参照下さい。 例では用意した証明書を ${CATALINA_HOME}/conf/certs/ 配下に格納しています。

流用時はコメント部分は除外し、パラメータ類を用途に合った値に書き換えてください。

<Connector port="8443"     ... 通信に使用するポート
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="300"
           SSLEnabled="true"
           scheme="https"
           secure="true"
           defaultSSLHostConfigName="localhost">   ... defaultのホスト名
    <SSLHostConfig hostName="localhost"            ... 使用するホスト名
                   certificateVerificationDepth="5"
                   certificateVerification="optional"  ... クライアント証明書認証の使用
                                                           (必須: reuqired, オプション: optional, 使用しない: none)
                   truststoreType="jks"
                   truststoreFile="${catalina.base}/conf/certs/cacerts.jks"
                   truststorePassword="changeit"       ... TrustStoreのパスワード 作成時に指定した値を入力
                   certificateRevocationListFile="${catalina.base}/conf/certs/crl.pem"
                   revocationEnabled="true"
                   sslProtocol="TLS"
                   protocols="+TLSv1+TLSv1.1+TLSv1.2">
        <Certificate certificateKeystoreFile="${catalina.base}/conf/certs/localhost_server.jks"
                     certificateKeystorePassword="changeit"   ... KeyStoreのパスワード 作成時に指定した値を入力
                     certificateKeyAlias="tomcat"
                     certificateKeystoreType="JKS"
                     certificateKeystoreProvider="SUN"
                     type="RSA"/>
    </SSLHostConfig>
</Connector>

各要素の詳細は Apache Tomcat 10 Configuration ReferenceConnector を参照下さい。

警告

KeyStoreファイルは秘密鍵を含みます。適切なアクセス権を設定し、外部への漏えいが発生しないよう管理してください。

7.8.2. CRL更新用スクリプトの例

CRL更新用スクリプトの例は、以下の通りです。

#!/bin/sh

CONFIG_PATH=/opt/tomcat/conf/certs/
HOST=10.0.255.75
CRL_FILE=crl.pem
CRL_TMP_FILE=crl.pem.tmp

CRL_FILE_PATH=${CONFIG_PATH}/${CRL_FILE}
CRL_TMP_FILE_PATH=${CONFIG_PATH}/${CRL_TMP_FILE}

# 作業ファイルが残っていれば削除
if [ -e ${CRL_TMP_FILE_PATH} ]; then
    echo "remove old tmp crl"
    rm –f ${CRL_TMP_FILE_PATH}
fi

# サーバからCRLを取得
wget http://${HOST}/${CRL_FILE} -O ${CRL_TMP_FILE_PATH}

# 取得成功した場合
if [ $? -eq 0 ] && [ -e ${CRL_TMP_FILE_PATH} ]; then
    # 既にCRLファイルが存在する場合
    if [ -e ${CRL_FILE_PATH} ]; then
    if diff -q ${CRL_FILE_PATH} ${CRL_TMP_FILE_PATH} > /dev/null ; then
        # CRLファイルが更新されていなかった
            echo "no update"
        else
            echo "crl update. reload service"
        # CRLファイルが更新されていた場合はファイルを置き換えて再読み込み
            mv ${CRL_TMP_FILE_PATH} ${CRL_FILE_PATH}
            sudo service tomcat restart
        fi
    else
    # CRLファイルが存在しない場合はサービス起動に失敗している 再起動する
        echo "get crl first time. restart service."
        mv ${CRL_TMP_FILE_PATH} ${CRL_FILE_PATH}
        sudo service tomcat restart
    fi
else
    echo "failed to get new crl" 1>&2
fi