SSL/TLS設定方法

目次

クイックスタート

以下の説明では、ほとんどの相対パスが解決されるベースディレクトリを参照するために変数名 $CATALINA_BASE を使用します。複数のインスタンスのために CATALINA_BASE ディレクトリを設定してTomcatを構成していない場合、$CATALINA_BASE はTomcatをインストールしたディレクトリである $CATALINA_HOME の値に設定されます。

TomcatにSSL/TLSサポートをインストールして構成するには、以下の簡単な手順に従う必要があります。詳細については、このハウツーの残りの部分をお読みください。

  1. サーバーの秘密鍵と自己署名証明書を保存するためのキーストアファイルを以下のコマンドを実行して作成します

    Windows

    "%JAVA_HOME%\bin\keytool" -genkey -alias tomcat -keyalg RSA

    Unix

    $JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA

    そしてパスワード値に「changeit」を指定してください。

  2. $CATALINA_BASE/conf/server.xml 内の「SSL HTTP/1.1 Connector」エントリのコメントを外し、以下の設定セクションで説明されているように変更してください。

SSL/TLSの概要

Transport Layer Security (TLS) およびその前身である Secure Sockets Layer (SSL) は、ウェブブラウザとウェブサーバーが安全な接続を介して通信できるようにする技術です。これにより、送信されるデータは一方の側で暗号化され、送信され、処理される前にもう一方の側で復号化されます。これは双方向プロセスであり、サーバーとブラウザの両方がデータを送信する前にすべてのトラフィックを暗号化することを意味します。

SSL/TLSプロトコルのもう一つの重要な側面は認証です。これは、安全な接続を介してウェブサーバーと通信しようと最初に試みる際、そのサーバーが「証明書」の形式で一連の資格情報をウェブブラウザに提示し、そのサイトが主張する通りのものであることを証明するという意味です。特定の場合には、サーバーはウェブブラウザから証明書を要求し、あなたが主張する通りの人物であることの証明を求めることもあります。これは「クライアント認証」として知られていますが、実際には個々のユーザーよりも企業間取引(B2B)で使用されることが多く、ほとんどのSSL対応ウェブサーバーはクライアント認証を要求しません。

SSL/TLSとTomcat

Tomcatをセキュアソケットを利用するように構成することは、通常、スタンドアロンのウェブサーバーとして実行する場合にのみ必要であることに注意することが重要です。詳細はセキュリティに関する考慮事項のドキュメントに記載されています。ApacheやMicrosoft IISのような別のウェブサーバーの背後でTomcatを主にサーブレット/JSPコンテナとして実行する場合、通常、プライマリウェブサーバーがユーザーからのSSL接続を処理するように構成する必要があります。一般的に、このサーバーはすべてのSSL関連機能をネゴシエートし、リクエストを復号化した後にのみTomcatコンテナ宛てのリクエストを転送します。同様に、Tomcatは平文のレスポンスを返し、それらはユーザーのブラウザに返される前に暗号化されます。この環境では、Tomcatはプライマリウェブサーバーとクライアント間の通信が安全な接続を介して行われていることを認識していますが(アプリケーションがこれについて問い合わせる必要があるため)、それ自体は暗号化または復号化に参加しません。

Tomcatは、基盤となる環境によって提供される任意の暗号化プロトコルを使用できます。Java自体は、JCE/JCAを介した暗号化機能と、JSSEを介した暗号化通信機能を提供します。準拠する暗号化「プロバイダ」は、Tomcatに暗号化アルゴリズムを提供できます。組み込みのプロバイダ(SunJCE)は、SSLv3、TLSv1、TLSv1.1などのさまざまなSSL/TLSバージョンをサポートしています。プロトコルとアルゴリズムのサポートに関する詳細は、ご使用のJavaバージョンのドキュメントを確認してください。

オプションの tcnative ライブラリを使用する場合、JCA/JCE/JSSE を介してOpenSSL 暗号化プロバイダを使用できます。これにより、SunJCE プロバイダと比較して、異なる暗号化アルゴリズムの選択やパフォーマンス上の利点が得られる場合があります。プロトコルとアルゴリズムのサポートに関する詳細は、お使いの OpenSSL バージョンのドキュメントを確認してください。

証明書

SSLを実装するためには、ウェブサーバーはセキュアな接続を受け入れる各外部インターフェース(IPアドレス)に対応する関連する証明書を持っている必要があります。この設計の背後にある理論は、特に機密情報を受信する前に、サーバーがその所有者があなたが思っている人物であるという合理的な保証を提供するべきだということです。証明書に関するより広範な説明はこの文書の範囲外ですが、証明書をインターネットアドレスの「デジタルパスポート」と考えてください。それは、サイトがどの組織に関連付けられているか、およびサイト所有者または管理者に関する基本的な連絡先情報を記載しています。

この証明書は所有者によって暗号学的に署名されており、そのため他者が偽造することは極めて困難です。訪問者のブラウザで警告なしに証明書が機能するためには、信頼された第三者によって署名されている必要があります。これらは認証局(CA)と呼ばれます。署名された証明書を取得するには、CAを選択し、選択したCAが提供する指示に従って証明書を取得する必要があります。無料の証明書を提供するものを含め、様々なCAが利用可能です。

Javaには、keytool と呼ばれる比較的シンプルなコマンドラインツールがあり、「自己署名」証明書を簡単に作成できます。自己署名証明書は、よく知られたCAによって署名されていない、ユーザー生成の証明書であり、そのため、まったく本物であると保証されているわけではありません。自己署名証明書は一部のテストシナリオでは有用ですが、いかなる種類の本番環境での使用には適していません。

SSL実行に関する一般的なヒント

SSLでウェブサイトを保護する際、攻撃者がJavaScriptファイルなどに悪意のあるコンテンツを注入してセキュリティを迂回できないように、サイトが使用するすべてのリソースがSSL経由で提供されるようにすることが重要です。ウェブサイトのセキュリティをさらに強化するために、HSTSヘッダーの使用を検討すべきです。これにより、サイトが常にHTTPS経由でアクセスされるべきであることをブラウザに伝えることができます。

セキュアな接続で名前ベースの仮想ホストを使用するには、単一の証明書で指定された名前、またはServer Name Indication (SNI) サポートが利用可能なTomcat 8.5以降での慎重な構成が必要です。SNIを使用すると、異なる名前を持つ複数の証明書を単一のTLSコネクタに関連付けることができます。

設定

証明書キーストアの準備

Tomcatは現在、JKSPKCS11、または PKCS12 フォーマットのキーストアでのみ動作します。JKS フォーマットはJava標準の「Java KeyStore」フォーマットであり、keytool コマンドラインユーティリティによって作成されるフォーマットです。このツールはJDKに含まれています。PKCS12 フォーマットはインターネット標準であり、OpenSSLやMicrosoftのキーマネージャーなどを介して操作できます。

キーストア内の各エントリは、エイリアス文字列によって識別されます。多くのキーストア実装ではエイリアスを大文字と小文字を区別しない方法で扱いますが、大文字と小文字を区別する実装も利用可能です。例えば、PKCS11 仕様では、エイリアスが大文字と小文字を区別することを要求しています。エイリアスの大文字と小文字の区別に関連する問題を避けるため、大文字と小文字のみが異なるエイリアスを使用することは推奨されません。

既存の証明書を JKS キーストアにインポートするには、keytool に関するドキュメント(JDKドキュメントパッケージ内)をお読みください。OpenSSLは鍵の前に読み取り可能なコメントを追加することがよくありますが、keytool はそれをサポートしていません。したがって、証明書が鍵データの前にコメントを持っている場合は、keytool で証明書をインポートする前にそれらを削除してください。

自身のCAによって署名された既存の証明書をOpenSSLを使用して PKCS12 キーストアにインポートするには、次のようなコマンドを実行します

openssl pkcs12 -export -in mycert.crt -inkey mykey.key
                       -out mycert.p12 -name tomcat -CAfile myCA.crt
                       -caname root -chain

より高度なケースについては、OpenSSLのドキュメントを参照してください。

単一の自己署名証明書を含む新しい JKS キーストアを一から作成するには、ターミナルコマンドラインから以下を実行します

Windows

"%JAVA_HOME%\bin\keytool" -genkey -alias tomcat -keyalg RSA

Unix

$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA

(RSAアルゴリズムは安全なアルゴリズムとして推奨され、これにより他のサーバーやコンポーネントとの一般的な互換性も確保されます。)

このコマンドは、実行したユーザーのホームディレクトリに「.keystore」という名前の新しいファイルを作成します。異なる場所またはファイル名を指定するには、上記の keytool コマンドに -keystore パラメータと、その後にキーストアファイルへの完全なパス名を追加します。後述するように、この新しい場所を server.xml 設定ファイルにも反映させる必要があります。例:

Windows

"%JAVA_HOME%\bin\keytool" -genkey -alias tomcat -keyalg RSA
  -keystore \path\to\my\keystore

Unix

$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA
  -keystore /path/to/my/keystore

このコマンドを実行した後、まずキーストアのパスワードを求められます。Tomcatが使用するデフォルトのパスワードは「changeit」(すべて小文字)ですが、必要であればカスタムパスワードを指定できます。後述するように、カスタムパスワードを server.xml 設定ファイルにも指定する必要があります。

次に、会社名、連絡先名など、この証明書に関する一般情報の入力を求められます。この情報は、アプリケーションのセキュアなページにアクセスしようとするユーザーに表示されるため、ここで提供される情報がユーザーの期待と一致していることを確認してください。

最後に、キーパスワードの入力を求められます。これは、この証明書(同じキーストアファイルに保存されている他の証明書とは対照的に)専用のパスワードです。keytool のプロンプトでは、ENTERキーを押すとキーストアと同じパスワードがキーに自動的に使用されると表示されます。同じパスワードを使用することも、カスタムパスワードを選択することも自由です。キーストアパスワードとは異なるパスワードを選択した場合は、server.xml 設定ファイルにもカスタムパスワードを指定する必要があります。

すべてが成功した場合、これでサーバーで使用できる証明書を含むキーストアファイルが作成されました。

Tomcat設定ファイルの編集

TomcatはSSLの2つの異なる実装を使用できます

  • Javaランタイムの一部として提供されるJSSE実装
  • OpenSSLを使用するJSSE実装

正確な設定詳細は、使用されている実装に依存します。汎用的な protocol="HTTP/1.1" を指定してコネクタを構成した場合、Tomcatが使用する実装は自動的に選択されます。

必要に応じて、実装の自動選択を回避できます。Connectorprotocol属性にクラス名を指定することで行います。

APRライブラリがロードされているかどうかにかかわらず、Java (JSSE) コネクタを定義するには、以下のいずれかを使用します

<!-- Define an HTTP/1.1 Connector on port 8443, JSSE NIO implementation -->
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
           sslImplementationName="org.apache.tomcat.util.net.jsse.JSSEImplementation"
           port="8443" .../>

<!-- Define an HTTP/1.1 Connector on port 8443, JSSE NIO2 implementation -->
<Connector protocol="org.apache.coyote.http11.Http11Nio2Protocol"
           sslImplementationName="org.apache.tomcat.util.net.jsse.JSSEImplementation"
           port="8443" .../>

OpenSSL JSSE実装も、必要に応じて明示的に構成できます。Tomcat NativeライブラリまたはJava 22がインストールされている場合、sslImplementationName 属性を使用することで有効化できます。OpenSSL JSSE実装を使用する場合、設定はJSSE属性またはOpenSSL属性のいずれかを使用できますが、同じSSLHostConfigまたはConnector要素内で両方の種類の属性を混在させてはなりません。

Tomcat Nativeを使用する場合

<!-- Define an HTTP/1.1 Connector on port 8443, JSSE NIO implementation and OpenSSL -->
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="8443"
           sslImplementationName="org.apache.tomcat.util.net.openssl.OpenSSLImplementation"
           .../>

Java 22 FFM APIを使用する場合

<!-- Define an HTTP/1.1 Connector on port 8443, JSSE NIO implementation and OpenSSL -->
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="8443"
           sslImplementationName="org.apache.tomcat.util.net.openssl.panama.OpenSSLImplementation"
           .../>

または、個々のコネクタに sslImplementationName 属性を追加することなく、すべてのコネクタでOpenSSLを有効にするために、Server にリスナーを追加することもできます。

Tomcat Nativeを使用する場合

<Listener className="org.apache.catalina.core.AprLifecycleListener"/>

Java 22 FFM APIを使用する場合

<Listener className="org.apache.catalina.core.OpenSSLLifecycleListener"/>

リスナーの SSLRandomSeed 属性は、エントロピーのソースを指定することを可能にします。本番システムには信頼できるエントロピーのソースが必要ですが、エントロピーの収集には多くの時間が必要となる場合があるため、テストシステムではTomcatの起動を迅速にするために「/dev/urandom」のような非ブロッキングのエントロピーソースを使用できます。

最終ステップは、$CATALINA_BASE/conf/server.xml ファイル内でコネクタを構成することです。ここで $CATALINA_BASE はTomcatインスタンスのベースディレクトリを表します。SSLコネクタの例である <Connector> 要素は、Tomcatとともにインストールされるデフォルトの server.xml ファイルに含まれています。JSSE設定スタイルでJSSEを使用するSSLコネクタを構成するには、コメントを削除し、以下のように編集する必要があります

<!-- Define an SSL Coyote HTTP/1.1 Connector on port 8443 -->
<Connector
    protocol="org.apache.coyote.http11.Http11NioProtocol"
    port="8443"
    maxThreads="150"
    SSLEnabled="true">
  <SSLHostConfig>
    <Certificate
      certificateKeystoreFile="${user.home}/.keystore"
      certificateKeystorePassword="changeit"
      type="RSA"
      />
    </SSLHostConfig>
</Connector>

OpenSSLの設定スタイルでは、多くのSSL設定、特に鍵と証明書について異なる属性を使用します。APR設定スタイルの例は以下の通りです

<!-- Define an SSL Coyote HTTP/1.1 Connector on port 8443 -->
<Connector
    protocol="org.apache.coyote.http11.Http11NioProtocol"
    port="8443"
    maxThreads="150"
    SSLEnabled="true" >
  <SSLHostConfig>
    <Certificate
        certificateKeyFile="conf/localhost-rsa-key.pem"
        certificateFile="conf/localhost-rsa-cert.pem"
        certificateChainFile="conf/localhost-rsa-chain.pem"
        type="RSA"
        />
  </SSLHostConfig>
</Connector>

設定オプションおよび必須属性に関する情報は、HTTPコネクタ設定リファレンスのSSLサポートセクションに記載されています。Tomcatは、すべてのTLSコネクタでJSSEまたはOpenSSLのいずれの設定スタイルもサポートしています。

port 属性は、Tomcatがセキュアな接続をリッスンするTCP/IPポート番号です。これを任意のポート番号に変更できます(例:https 通信のデフォルトポートである443)。ただし、多くのオペレーティングシステムでは、1024より小さいポート番号でTomcatを実行するには、特別な設定(このドキュメントの範囲外)が必要です。

ここでポート番号を変更した場合、非SSLコネクタの redirectPort 属性に指定されている値も変更する必要があります。これにより、サーブレット仕様で要求されているように、SSLが必須であることを指定するセキュリティ制約のあるページにアクセスしようとするユーザーをTomcatが自動的にリダイレクトできるようになります。

これらの設定変更を完了した後、通常通りTomcatを再起動する必要があります。そうすれば、TomcatがサポートするすべてのウェブアプリケーションにSSL経由でアクセスできるようになります。例えば、試してみてください。

https://:8443/

すると、通常のTomcatスプラッシュページが表示されるはずです(ROOTウェブアプリケーションを変更していない限り)。もしこれが動作しない場合、以下のセクションにいくつかのトラブルシューティングのヒントが記載されています。

認証局から証明書をインストールする

認証局(verisign.com、thawte.com、trustcenter.deなど)から証明書を取得してインストールするには、前のセクションを読んでから、以下の指示に従ってください。

ローカルの証明書署名要求 (CSR) の作成

選択した認証局から証明書を取得するには、いわゆる証明書署名要求 (CSR) を作成する必要があります。そのCSRは、認証局によってあなたのウェブサイトを「安全」であると識別する証明書を作成するために使用されます。CSRを作成するには、以下の手順に従ってください。

  • ローカルの自己署名証明書を作成します(前のセクションで説明されています)。
    keytool -genkey -alias tomcat -keyalg RSA
        -keystore <your_keystore_filename>
    注: 場合によっては、有効な証明書を作成するために、「名と姓」のフィールドにウェブサイトのドメイン(例:www.myside.org)を入力する必要があります。
  • CSRは以下で作成されます
    keytool -certreq -keyalg RSA -alias tomcat -file certreq.csr
        -keystore <your_keystore_filename>

これで、認証局に提出できる certreq.csr というファイルができました(認証局のウェブサイトのドキュメントで提出方法を確認してください)。その結果、証明書を受け取ることができます。

証明書のインポート

証明書が手に入ったら、ローカルのキーストアにインポートできます。まず、いわゆるチェーン証明書またはルート証明書をキーストアにインポートする必要があります。その後、自分の証明書のインポートに進むことができます。

  • 証明書を取得した認証局からチェーン証明書をダウンロードします。
    Verisign.comの商用証明書については、以下にアクセスしてください: http://www.verisign.com/support/install/intermediate.html
    Verisign.comの試用版証明書については、以下にアクセスしてください: http://www.verisign.com/support/verisign-intermediate-ca/Trial_Secure_Server_Root/index.html
    Trustcenter.deについては、以下にアクセスしてください: http://www.trustcenter.de/certservices/cacerts/en/en.htm#server
    Thawte.comについては、以下にアクセスしてください: http://www.thawte.com/certs/trustmap.html
  • チェーン証明書をキーストアにインポートします
    keytool -import -alias root -keystore <your_keystore_filename>
        -trustcacerts -file <filename_of_the_chain_certificate>
  • そして最後に新しい証明書をインポートします
    keytool -import -alias tomcat -keystore <your_keystore_filename>
        -file <your_certificate_filename>

各認証局は他とわずかに異なる傾向があります。若干異なる情報を要求したり、証明書と関連する証明書チェーンを異なる形式で提供したりする場合があります。さらに、認証局が証明書を発行するために使用する規則は時間とともに変化します。その結果、上記のコマンドが変更される必要がある場合があります。支援が必要な場合は、Apache Tomcatユーザーメーリングリストを通じてサポートを受けることができます。

OCSP証明書の使用

Apache Tomcatにおけるオンライン証明書ステータスプロトコル(OCSP)のサポートはOpenSSLを使用します。これは、Tomcat NativeまたはJava 22以降のFFM APIを通じて使用できます。

OCSPを使用するには、以下が必要です

  • OCSP有効証明書
  • OpenSSL有効コネクタを持つTomcat
  • 構成済みのOCSPレスポンダー

OCSP有効証明書の生成

Apache Tomcatでは、OCSP対応証明書にOCSPレスポンダーの場所がエンコードされている必要があります。openssl.cnf ファイルにおける基本的なOCSP関連の認証局設定は以下のようになるでしょう


#... omitted for brevity

[x509]
x509_extensions = v3_issued

[v3_issued]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
# The address of your responder
authorityInfoAccess = OCSP;URI:http://127.0.0.1:8088
keyUsage = critical,digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment,keyAgreement,keyCertSign,cRLSign,encipherOnly,decipherOnly
basicConstraints=critical,CA:FALSE
nsComment="Testing OCSP Certificate"

#... omitted for brevity

上記の設定は、OCSPレスポンダーアドレス 127.0.0.1:8088 を証明書にエンコードします。以下の手順を実行するには、openssl.cnf とその他CAの構成が準備されている必要があることに注意してください。OCSP有効証明書を生成するには

  • 秘密鍵の作成
    openssl genrsa -aes256 -out ocsp-cert.key 4096
  • 署名要求 (CSR) の作成
    openssl req -config openssl.cnf -new -sha256 \
      -key ocsp-cert.key -out ocsp-cert.csr
  • CSRへの署名
    openssl ca -openssl.cnf -extensions ocsp -days 375 -notext \
      -md sha256 -in ocsp-cert.csr -out ocsp-cert.crt
  • 証明書を検証できます
    openssl x509 -noout -text -in ocsp-cert.crt

トラブルシューティング

TLSハンドシェイクの失敗に関する追加情報は、$CATALINA_BASE/conf/logging.properties に以下を追加して、専用のTLSハンドシェイクロガーがデバッグレベルのメッセージをログに記録するように設定することで取得できます

org.apache.tomcat.util.net.NioEndpoint.handshake.level=FINE
または
org.apache.tomcat.util.net.Nio2Endpoint.handshake.level=FINE
使用しているコネクタによって異なります。

ここでは、SSL通信を設定する際に遭遇する可能性のある一般的な問題と、それらに対する対処法をリストアップします。

  • Tomcatの起動時に、「java.io.FileNotFoundException: {some-directory}/{some-file} not found」のような例外が発生します。

    考えられる説明としては、Tomcatが探している場所にキーストアファイルが見つからないというものです。デフォルトでは、TomcatはキーストアファイルがTomcatが実行されているユーザーのホームディレクトリ(あなたのホームディレクトリと同じであるとは限りません :-))に .keystore という名前で存在することを期待します。キーストアファイルが他の場所にある場合は、Tomcat設定ファイル<Certificate> 要素に certificateKeystoreFile 属性を追加する必要があります。

  • Tomcatの起動時に、「java.io.FileNotFoundException: Keystore was tampered with, or password was incorrect」のような例外が発生します。

    誰かが実際にキーストアファイルを改ざんしていないと仮定すると、最も可能性が高い原因は、Tomcatがキーストアファイルの作成時に使用したパスワードとは異なるパスワードを使用していることです。これを修正するには、キーストアファイルを再作成するか、Tomcat設定ファイル<Connector> 要素に keystorePass 属性を追加または更新することができます。注意 - パスワードは大文字と小文字を区別します!

  • Tomcatの起動時に、「java.net.SocketException: SSL handshake error javax.net.ssl.SSLException: No available certificate or key corresponds to the SSL cipher suites which are enabled.」のような例外が発生します。

    考えられる説明としては、Tomcatが指定されたキーストア内でサーバーキーのエイリアスを見つけられないというものです。Tomcat設定ファイル<Certificate> 要素に正しい certificateKeystoreFile および certificateKeyAlias が指定されていることを確認してください。注意 - keyAlias の値は大文字と小文字を区別する場合があります!

引き続き問題が発生する場合は、TOMCAT-USER メーリングリストが役立ちます。このリストの過去のメッセージのアーカイブへのポインタ、および購読・購読解除情報は、https://tomcat.dokyumento.jp/lists.html で確認できます。

アプリケーションでのセッショントラッキングにSSLを使用する

これはServlet 3.0仕様の新機能です。物理的なクライアント-サーバー接続に関連付けられたSSLセッションIDを使用するため、いくつかの制限があります。それらは次のとおりです

  • Tomcatは、属性 isSecuretrue に設定されたコネクタを持っている必要があります。
  • SSL接続がプロキシまたはハードウェアアクセラレータによって管理されている場合、SSLセッションIDがTomcatに表示されるように、SSLリクエストヘッダーに情報を設定する必要があります(SSLValveを参照)。
  • TomcatがSSL接続を終了する場合、各ノードでSSLセッションIDが異なるため、セッションレプリケーションを使用することはできません。

SSLセッショントラッキングを有効にするには、コンテキストリスナーを使用して、コンテキストのトラッキングモードをSSLのみに設定する必要があります(他のトラッキングモードが有効になっている場合、そちらが優先して使用されます)。以下のようなものになるでしょう

package org.apache.tomcat.example;

import java.util.EnumSet;

import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletContextEvent;
import jakarta.servlet.ServletContextListener;
import jakarta.servlet.SessionTrackingMode;

public class SessionTrackingModeListener implements ServletContextListener {

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        // Do nothing
    }

    @Override
    public void contextInitialized(ServletContextEvent event) {
        ServletContext context = event.getServletContext();
        EnumSet<SessionTrackingMode> modes =
            EnumSet.of(SessionTrackingMode.SSL);

        context.setSessionTrackingModes(modes);
    }

}

その他のヒントと情報

リクエストからSSLセッションIDにアクセスするには、以下を使用します

String sslID = (String)request.getAttribute("jakarta.servlet.request.ssl_session_id");

この領域に関する追加の議論については、Bugzilla を参照してください。

SSLセッションを終了するには、以下を使用します

// Standard HTTP session invalidation
session.invalidate();

// Invalidate the SSL Session
org.apache.tomcat.util.net.SSLSessionManager mgr =
    (org.apache.tomcat.util.net.SSLSessionManager)
    request.getAttribute("jakarta.servlet.request.ssl_session_mgr");
mgr.invalidateSession();

// Close the connection since the SSL session will be active until the connection
// is closed
response.setHeader("Connection", "close");