HTTPコネクタ

目次

はじめに

**HTTPコネクタ**要素は、HTTP/1.1プロトコルをサポートする**コネクタ**コンポーネントを表します。これにより、CatalinaはサーブレットやJSPページを実行する機能に加えて、スタンドアロンのWebサーバーとして機能できます。このコンポーネントの特定のインスタンスは、サーバー上の特定のTCPポート番号で接続を待ち受けます。このような**コネクタ**は、1つのService内に複数設定でき、それぞれ関連付けられたEngineに転送してリクエスト処理を行い、レスポンスを作成します。

AJPプロトコル(Apache 1.3のmod_jk 1.2.xコネクタなど)を使用してWebサーバーへの接続に使用する**コネクタ**を設定する場合は、AJPコネクタのドキュメントを参照してください。

非同期ではない各着信リクエストには、そのリクエストの期間中、1つのスレッドが必要です。現在使用可能なリクエスト処理スレッドで処理できる数よりも多くの同時リクエストが受信された場合、構成された最大数(maxThreads属性の値)まで追加のスレッドが作成されます。それでもさらに同時リクエストが受信された場合、Tomcatは、現在の接続数がmaxConnectionsに達するまで新しい接続を受け入れます。接続は、**コネクタ**によって作成されたサーバーソケット内で、スレッドが接続の処理に使用可能になるまでキューに入れられます。maxConnectionsに達すると、オペレーティングシステムはさらに接続をキューに入れます。オペレーティングシステムが提供する接続キューのサイズは、acceptCount属性で制御できます。オペレーティングシステムのキューがいっぱいになると、さらに接続要求が拒否されるか、タイムアウトする可能性があります。

属性

共通属性

**Connector**のすべての実装は、次の属性をサポートしています。

属性説明
allowBackslash

これがtrueの場合、「\」文字がパスデリミタとして許可されます。

指定されていない場合、デフォルト値のfalseが使用されます。

allowTrace

TRACE HTTPメソッドを有効または無効にするために使用できるブール値です。指定されていない場合、この属性はfalseに設定されます。RFC 7231セクション4.3.8に従って、Cookieヘッダーと認証ヘッダーはTRACEリクエストへのレスポンスから除外されます。これらを組み込む場合は、ターゲットサーブレットのdoTrace()メソッドを実装して、レスポンスを完全に制御できます。

asyncTimeout

非同期リクエストのデフォルトタイムアウト(ミリ秒単位)。指定されていない場合、この属性は、サーブレット仕様のデフォルト値である30000(30秒)に設定されます。

discardFacades

コンテナの内部リクエスト処理オブジェクトを分離するファサードオブジェクトのリサイクルを有効または無効にするために使用できるブール値です。trueに設定すると、ファサードはリクエストごとにガベージコレクション用に設定されます。それ以外の場合は再利用されます。この設定は、セキュリティマネージャーが有効になっている場合、効果がありません。指定されていない場合、この属性はtrueに設定されます。

enableLookups

request.getRemoteHost()への呼び出しでDNSルックアップを実行してリモートクライアントの実際のホスト名を返す場合は、trueに設定します。DNSルックアップをスキップして代わりにIPアドレスを文字列形式で返す場合は(これによりパフォーマンスが向上します)、falseに設定します。デフォルトでは、DNSルックアップは無効になっています。

encodedSolidusHandling

rejectに設定されている場合、%2fシーケンスを含むリクエストパスは、400応答で拒否されます。decodeに設定されている場合、%2fシーケンスを含むリクエストパスでは、そのシーケンスは他の%nnシーケンスがデコードされると同時に/にデコードされます。passthroughに設定されている場合、%2fシーケンスを含むリクエストパスは、%2fシーケンスが変更されないまま処理されます。指定されていない場合、デフォルト値はrejectです。

enforceEncodingInGetWriter

これがtrueの場合、文字エンコーディングが指定されていない場合のResponse.getWriter()への呼び出しは、その後のResponse.getCharacterEncoding()への呼び出しでISO-8859-1を返し、Content-Typeレスポンスヘッダーにはcharset=ISO-8859-1コンポーネントが含まれます。(SRV.15.2.22.1)

指定されていない場合、デフォルトの仕様準拠値であるtrueが使用されます。

maxCookieCount

リクエストで許可されるCookieの最大数です。0未満の値は制限なしを意味します。指定されていない場合、デフォルト値の200が使用されます。

maxParameterCount

クエリ文字列から取得されるリクエストパラメーター(アップロードされたファイルを含む)の合計最大数と、POSTリクエストの場合、コンテンツタイプがapplication/x-www-form-urlencodedまたはmultipart/form-dataの場合のリクエスト本文です。この制限を超えるリクエストパラメーターは無視されます。0未満の値は制限なしを意味します。指定されていない場合、デフォルトの10000が使用されます。FailedRequestFilter フィルターを使用して、制限を超えるリクエストを拒否できます。

maxPostSize

コンテナのFORM URLパラメーター解析によって処理されるPOSTの最大サイズ(バイト単位)。この属性を0未満の値に設定することにより、制限を無効にできます。指定されていない場合、この属性は2097152(2MiB)に設定されます。FailedRequestFilterを使用して、この制限を超えるリクエストを拒否できます。

maxSavePostSize

FORM認証またはクライアント証明書認証中、またはHTTP/1.1アップグレード中に、コンテナによって保存/バッファリングされるリクエスト本文の最大サイズ(バイト単位)。両方のタイプの認証では、ユーザーが認証される前にリクエスト本文が保存/バッファリングされます。クライアント証明書認証の場合、リクエスト本文はSSLハンドシェイクの期間中バッファリングされ、リクエストが処理されるときにバッファが空になります。FORM認証の場合、ユーザーがログインフォームにリダイレクトされている間、POSTが保存され、ユーザーが正常に認証されるまで、または認証リクエストに関連付けられたセッションが期限切れになるまで保持されます。HTTP/1.1アップグレードの場合、リクエスト本文はアップグレード処理の期間中バッファリングされます。この属性を-1に設定することにより、制限を無効にできます。属性を0に設定すると、認証とHTTP/1.1アップグレード中のリクエスト本文データの保存が無効になります。指定されていない場合、この属性は4096(4キロバイト)に設定されます。

parseBodyMethods

application/x-www-form-urlencodedを使用するリクエスト本文について、POSTと同様にリクエストパラメーターが解析されるHTTPメソッドのカンマ区切りのリストです。これは、PUTリクエストに対してPOSTスタイルのセマンティクスをサポートする必要があるRESTfulアプリケーションで役立ちます。POST以外の設定は、Tomcatがサーブレット仕様の意図に反する動作をする原因になります。HTTP仕様に従って、HTTPメソッドTRACEはここで具体的に禁止されています。デフォルトはPOSTです。

port

この**コネクタ**がサーバーソケットを作成して着信接続を待つTCPポート番号です。オペレーティングシステムでは、特定のIPアドレス上の特定のポート番号をリッスンするサーバーアプリケーションを1つだけ許可します。特別な値0(ゼロ)を使用すると、Tomcatはこのコネクタに使用する空きポートをランダムに選択します。これは通常、組み込みアプリケーションやテストアプリケーションでのみ役立ちます。

protocol

着信トラフィックを処理するプロトコルを設定します。デフォルト値はHTTP/1.1で、Java NIOベースのコネクタを使用します。
明示的なプロトコルを使用するには、次の値を使用できます。
org.apache.coyote.http11.Http11NioProtocol - 非ブロッキングJava NIOコネクタ
org.apache.coyote.http11.Http11Nio2Protocol - 非ブロッキングJava NIO2コネクタ
カスタム実装も使用できます。
コネクタの比較チャートをご覧ください。Javaコネクタの設定は、httpとhttpsで同じです。

proxyName

この**コネクタ**をプロキシ構成で使用している場合、request.getServerName()への呼び出しで返すサーバー名を指定するようにこの属性を構成します。詳細については、プロキシサポートを参照してください。

proxyPort

この**コネクタ**をプロキシ構成で使用している場合、request.getServerPort()への呼び出しで返すサーバーポートを指定するようにこの属性を構成します。詳細については、プロキシサポートを参照してください。

redirectPort

この**コネクタ**が非SSLリクエストをサポートしており、一致する<security-constraint>がSSLトランスポートを必要とするリクエストを受信した場合、Catalinaはリクエストをここに指定されたポート番号に自動的にリダイレクトします。

rejectSuspiciousURIs

この**コネクタ**は、URIがサーブレット6.0仕様で特定された疑わしいURIパターンのいずれかに一致する場合、リクエストを拒否する必要がありますか?デフォルト値はfalseです。

scheme

request.getScheme()への呼び出しで返すプロトコルの名前をこの属性に設定します。たとえば、SSLコネクタの場合は、この属性を「https」に設定します。デフォルト値は「http」です。

secure

この属性をtrueに設定すると、このコネクタで受信したリクエストに対してrequest.isSecure()の呼び出しがtrueを返すようになります。これは、SSLコネクタ、またはSSLアクセラレータ(暗号化カード、SSLアプライアンス、Webサーバーなど)からデータを受信する非SSLコネクタで使用することをお勧めします。デフォルト値はfalseです。

URIEncoding

これは、URLの%xxデコード後にURIバイトをデコードするために使用される文字エンコーディングを指定します。デフォルト値はUTF-8です。

useBodyEncodingForURI

これは、URIクエリパラメータにURIEncodingではなくcontentTypeで指定されたエンコーディングを使用するかどうかを指定します。この設定は、contentTypeで指定されたエンコーディング、またはRequest.setCharacterEncodingメソッドを使用して明示的に設定されたエンコーディングがURLのパラメータにも使用されていたTomcat 4.1.xとの互換性のために存在します。デフォルト値はfalseです。

注記: 1) この設定は、リクエストのクエリ文字列のみに適用されます。URIEncodingとは異なり、リクエストURIのパス部分には影響しません。2) リクエスト文字エンコーディングが不明な場合(ブラウザから提供されず、SetCharacterEncodingFilterまたはRequest.setCharacterEncodingメソッドを使用する同様のフィルタによって設定されていない場合)、デフォルトエンコーディングは常に「ISO-8859-1」になります。URIEncoding設定はこのデフォルトには影響しません。

useIPVHosts

この属性をtrueに設定すると、Tomcatはリクエストが受信されたIPアドレスを使用して、リクエストを送信するホストを決定します。デフォルト値はfalseです。

xpoweredBy

この属性をtrueに設定すると、Tomcatは仕様で推奨されているヘッダーを使用して、Servlet仕様のサポートをアドバタイズします。デフォルト値はfalseです。

標準実装

標準のHTTPコネクタ(NIOとNIO2)は、上記の共通のコネクタ属性に加えて、次の属性もすべてサポートしています。

属性説明
acceptCount

maxConnectionsに達したときの、着信接続要求に対するオペレーティングシステムが提供するキューの最大長です。オペレーティングシステムはこの設定を無視し、キューに異なるサイズを使用する場合があります。このキューがいっぱいになると、オペレーティングシステムは追加の接続を積極的に拒否するか、それらの接続がタイムアウトする可能性があります。デフォルト値は100です。

acceptorThreadPriority

アクセプタースレッドの優先度。新しい接続を受け入れるために使用されるスレッドです。デフォルト値は5java.lang.Thread.NORM_PRIORITY定数の値)です。この優先度の意味の詳細については、java.lang.ThreadクラスのJavadocを参照してください。

address

複数のIPアドレスを持つサーバーの場合、この属性は、指定されたポートでリスンするために使用されるアドレスを指定します。デフォルトでは、コネクタはすべてのローカルアドレスでリスンします。システムプロパティを使用してJVMが別様に構成されていない限り、Javaベースのコネクタ(NIO、NIO2)は、0.0.0.0または::で構成されている場合、IPv4とIPv6の両方のアドレスでリスンします。

allowHostHeaderMismatch

デフォルトでは、Tomcatはリクエスト行にホストを指定し、ホストヘッダーに異なるホストを指定するリクエストを拒否します。この属性をtrueに設定することで、このチェックを無効にできます。指定しない場合、デフォルトはfalseです。
この設定はTomcat 11以降で削除され、falseにハードコードされます。

allowedTrailerHeaders

デフォルトでは、Tomcatはチャンクされた入力の処理時にすべてのトレーラーヘッダーを無視します。ヘッダーを処理するには、このコンマ区切りのヘッダー名リストに追加する必要があります。

bindOnInit

コネクタで使用されるソケットのバインド時期を制御します。trueに設定すると、コネクタの初期化時にバインドされ、コネクタの破棄時にアンバインドされます。falseに設定すると、コネクタの開始時にソケットがバインドされ、停止時にアンバインドされます。指定しない場合、デフォルトはtrueです。

clientCertProvider

クライアント証明書の情報がjava.security.cert.X509Certificateのインスタンス以外の形式で提示される場合、使用前に変換する必要があります。このプロパティは、変換を実行するために使用されるJSSEプロバイダを制御します。

compressibleMimeType

値は、HTTP圧縮に使用できるMIMEタイプのコンマ区切りのリストです。デフォルト値は text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json,application/xml です。明示的にタイプを指定すると、デフォルトは上書きされます。

compression

コネクタは、サーバー帯域幅を節約するためにHTTP/1.1 GZIP圧縮を使用できます。パラメータの許容値は、「off」(圧縮を無効にする)、「on」(圧縮を許可する。これによりテキストデータが圧縮される)、「force」(すべてのケースで圧縮を強制する)、または数値の整数値(「on」と同等だが、出力の圧縮を開始する前のデータの最小量を指定する)です。コンテンツ長が不明で、圧縮が「on」以上に設定されている場合、出力も圧縮されます。指定しない場合、この属性は「off」に設定されます。

注記: 圧縮の使用(帯域幅の節約)とsendfile機能の使用(CPUサイクルの節約)の間にはトレードオフがあります。コネクタがsendfile機能をサポートしている場合(NIOコネクタなど)、sendfileを使用すると圧縮よりも優先されます。その症状は、48 KiBより大きい静的ファイルが非圧縮で送信されることです。以下に説明されているように、コネクタのuseSendfile属性を設定してsendfileをオフにしたり、デフォルトのconf/web.xmlまたはWebアプリケーションのweb.xmlにあるDefaultServletの設定でsendfileの使用しきい値を変更したりできます。

compressionMinSize

compressionが「on」に設定されている場合、この属性を使用して、出力が圧縮される前のデータの最小量を指定できます。指定しない場合、この属性は「2048」がデフォルトになります。単位はバイトです。

connectionLinger

このコネクタで使用されるソケットが閉じられたときに保持される秒数です。デフォルト値は-1で、ソケットの保持を無効にします。

connectionTimeout

このコネクタが接続を受け入れた後、リクエストURI行が表示されるまで待機するミリ秒数です。タイムアウトなし(つまり無限)を示すには-1の値を使用します。デフォルト値は60000(つまり60秒)ですが、Tomcatに付属の標準のserver.xmlではこれが20000(つまり20秒)に設定されていることに注意してください。disableUploadTimeoutfalseに設定されていない限り、このタイムアウトはリクエスト本文(存在する場合)の読み取り時にも使用されます。

connectionUploadTimeout

データのアップロード中に使用するタイムアウト(ミリ秒単位)を指定します。これは、disableUploadTimeoutfalseに設定されている場合にのみ有効になります。

continueResponseTiming

Expect: 100-continueヘッダーを含むリクエストに対して、100中間応答コードでいつ応答するかを指定します。次の値を使用できます。

  • immediately - 中間100ステータス応答は、できるだけ早く返されます。
  • onRead - 中間100ステータス応答は、Servletがリクエスト本文を読み取る場合にのみ返されます。これにより、Servletはヘッダーを検査し、ユーザーエージェントが可能性のある大きなリクエスト本文を送信する前に応答できます。

defaultSSLHostConfigName

クライアント接続がSNIを提供しない場合、またはSNIが提供されているが構成されたSSLHostConfigと一致しない場合に、(このコネクタがセキュア接続用に構成されている場合)セキュア接続に使用されるデフォルトのSSLHostConfigの名前です。指定しない場合、デフォルト値の_default_が使用されます。提供された値は常に小文字に変換されます。

disableUploadTimeout

このフラグにより、サーブレットコンテナは、データアップロード中に異なる、通常はより長い接続タイムアウトを使用できます。指定しない場合、この属性はtrueに設定され、このより長いタイムアウトは無効になります。

executor

Executor要素の名前への参照です。この属性が設定されていて、指定されたexecutorが存在する場合、コネクタはexecutorを使用し、他のすべてのスレッド属性は無視されます。コネクタに共有executorが指定されていない場合、コネクタはプライベートな内部executorを使用してスレッドプールを提供することに注意してください。

executorTerminationTimeoutMillis

プライベートな内部executorが、コネクタの停止プロセスを続行する前に、リクエスト処理スレッドの終了を待機する時間です。設定されていない場合、デフォルトは5000(5秒)です。

keepAliveTimeout

このコネクタが接続を閉じる前に別のHTTPリクエストを待機するミリ秒数です。デフォルト値は、connectionTimeout属性に設定されている値を使用することです。タイムアウトなし(つまり無限)を示すには-1の値を使用します。

maxConnections

サーバーがいつでも受け入れて処理する接続の最大数です。この数に達すると、サーバーはさらに1つの接続を受け入れますが、処理しません。この追加の接続は、処理中の接続数がmaxConnectionsを下回るまでブロックされます。その時点で、サーバーは新しい接続の受け入れと処理を再開します。制限に達すると、オペレーティングシステムはacceptCount設定に基づいて接続を受け入れる可能性があることに注意してください。デフォルト値は8192です。

NIO/NIO2の場合のみ、値を-1に設定すると、maxConnections機能が無効になり、接続はカウントされません。

maxExtensionSize

チャンク化されたHTTPリクエストにおけるチャンク拡張の合計長を制限します。値が-1の場合、制限は課されません。指定しない場合、デフォルト値の8192が使用されます。

maxHeaderCount

コンテナで許可されるリクエスト内のヘッダーの最大数です。指定された制限を超えるヘッダーを含むリクエストは拒否されます。0未満の値は制限なしを意味します。指定しない場合、デフォルトで100が使用されます。

maxHttpHeaderSize

maxHttpRequestHeaderSizemaxHttpResponseHeaderSizeのデフォルト値を提供します。指定しない場合、この属性は8192(8 KiB)に設定されます。

maxHttpRequestHeaderSize

HTTPリクエストに関連付けられたリクエストラインとヘッダーの最大許容サイズ(バイト単位)。これは受信バイト数と比較されるため、改行文字、空白文字、リクエストライン、ヘッダー名、ヘッダー値が含まれます。指定されていない場合、この属性はmaxHttpHeaderSize属性の値に設定されます。

"Request header is too large" エラーが表示される場合は、この値を増やすことができますが、Tomcatはすべてのリクエストに対して指定した全量を割り当てることに注意してください。たとえば、maxHttpRequestHeaderSizeを1MBに指定し、アプリケーションが100の同時リクエストを処理する場合、リクエストヘッダーによって100MBのヒープが消費されます。

maxHttpResponseHeaderSize

HTTPレスポンスに関連付けられたレスポンスラインとヘッダーの最大許容サイズ(バイト単位)。これは書き込まれたバイト数と比較されるため、改行文字、空白文字、ステータスライン、ヘッダー名、ヘッダー値が含まれます。指定されていない場合、この属性はmaxHttpHeaderSize属性の値に設定されます。

maxKeepAliveRequests

サーバーによって接続が閉じられるまで、パイプライン化できるHTTPリクエストの最大数。この属性を1に設定すると、HTTP/1.0 keep-aliveとHTTP/1.1 keep-aliveおよびパイプライン処理が無効になります。-1に設定すると、パイプライン化またはkeep-aliveされたHTTPリクエストの数が無制限になります。指定されていない場合、この属性は100に設定されます。

maxSwallowSize

中断されたアップロードに対してTomcatによって取り込まれるリクエストボディバイト数(転送エンコーディングのオーバーヘッドを除く)の最大数。中断されたアップロードとは、Tomcatがリクエストボディが無視されることを認識しているが、クライアントが依然として送信している場合です。Tomcatがボディを取り込まない場合、クライアントはレスポンスが表示されない可能性があります。指定されていない場合、デフォルトの2097152(2MiB)が使用されます。0未満の値は、制限を適用しないことを示します。

maxThreads

この**コネクタ**によって作成されるリクエスト処理スレッドの最大数。したがって、同時に処理できるリクエストの最大数を決定します。指定されていない場合、この属性は200に設定されます。このコネクタにexecutorが関連付けられている場合、この属性は無視されます。コネクタは内部のスレッドプールではなく、executorを使用してタスクを実行するためです。executorが設定されている場合、この属性に設定された値は正しく記録されますが、(JMXなどを介して)-1として報告され、使用されていないことが明確になります。

maxTrailerSize

チャンク化されたHTTPリクエストの最後のチャンクにあるトレーリングヘッダーの総長を制限します。値が-1の場合、制限は適用されません。指定されていない場合、デフォルト値の8192が使用されます。

minSpareThreads

常に実行されるスレッドの最小数。アクティブなスレッドとアイドルスレッドの両方が含まれます。指定されていない場合、デフォルトの10が使用されます。このコネクタにexecutorが関連付けられている場合、この属性は無視されます。コネクタは内部のスレッドプールではなく、executorを使用してタスクを実行するためです。executorが設定されている場合、この属性に設定された値は正しく記録されますが、(JMXなどを介して)-1として報告され、使用されていないことが明確になります。

noCompressionUserAgents

この値は、java.util.regexを使用して、圧縮を使用すべきでないHTTPクライアントのuser-agentヘッダーに一致する正規表現です。これらのクライアントは、機能のサポートを表明しているにもかかわらず、実装に問題があるためです。デフォルト値は空の文字列(正規表現の一致が無効)です。

processorCache

プロトコルハンドラーは、Processorオブジェクトをキャッシュしてパフォーマンスを向上させます。この設定は、キャッシュされるこれらのオブジェクトの数を決定します。-1は無制限を意味し、デフォルトは200です。Servlet 3.0非同期処理を使用していない場合、適切なデフォルトはmaxThreads設定と同じを使用することです。Servlet 3.0非同期処理を使用する場合、適切なデフォルトは、maxThreadsと予想される同時リクエストの最大数(同期と非同期)の大きい方を使用することです。

rejectIllegalHeader

不正なヘッダー名または値(例:ヘッダー名がトークンではない)を含むHTTPリクエストが受信された場合、この設定は、リクエストを400レスポンス(true)で拒否するか、不正なヘッダーを無視するか(false)を決定します。デフォルト値はtrueであり、リクエストが拒否されます。
この設定はTomcat 11以降で削除され、trueにハードコーディングされます。

relaxedPathChars

HTTP/1.1仕様では、URIパスで使用される特定の文字を%nnエンコードする必要があります。残念ながら、すべての主要なブラウザを含む多くのユーザーエージェントはこの仕様に準拠しておらず、これらの文字をエンコードされていない形式で使用しています。Tomcatがそのようなリクエストを拒否するのを防ぐために、この属性を使用して許可する追加の文字を指定できます。指定されていない場合、追加の文字は許可されません。値は、次の文字の任意の組み合わせにすることができます:" < > [ \ ] ^ ` { | }。値に存在するその他の文字は無視されます。

relaxedQueryChars

HTTP/1.1仕様では、URIクエリ文字列で使用される特定の文字を%nnエンコードする必要があります。残念ながら、すべての主要なブラウザを含む多くのユーザーエージェントはこの仕様に準拠しておらず、これらの文字をエンコードされていない形式で使用しています。Tomcatがそのようなリクエストを拒否するのを防ぐために、この属性を使用して許可する追加の文字を指定できます。指定されていない場合、追加の文字は許可されません。値は、次の文字の任意の組み合わせにすることができます:" < > [ \ ] ^ ` { | }。値に存在するその他の文字は無視されます。

restrictedUserAgents

この値は、クライアントがこれらの機能のサポートを表明していても、HTTP/1.1またはHTTP/1.0 keep-aliveを使用すべきではないHTTPクライアントのuser-agentヘッダーに一致する正規表現(java.util.regexを使用)です。デフォルト値は空の文字列(正規表現の一致が無効)です。

server

HTTPレスポンスのServerヘッダーをオーバーライドします。設定されている場合、この属性の値は、Webアプリケーションによって設定されたServerヘッダーをオーバーライドします。設定されていない場合、アプリケーションによって指定された値が使用されます。アプリケーションが値を指定しない場合、Serverヘッダーは設定されません。

serverRemoveAppProvidedValues

trueの場合、Webアプリケーションによって設定されたServerヘッダーは削除されます。**server**が設定されている場合、この属性は事実上無視されます。設定されていない場合、デフォルト値のfalseが使用されます。

SSLEnabled

この属性を使用して、コネクタでSSLトラフィックを有効にします。コネクタでSSLハンドシェイク/暗号化/復号化を有効にするには、この値をtrueに設定します。デフォルト値はfalseです。この値をtrueにする場合は、正しいrequest.getScheme()request.isSecure()の値をサーブレットに渡すために、scheme属性とsecure属性も設定する必要があります。詳細はSSLサポートを参照してください。

tcpNoDelay

trueに設定されている場合、TCP_NO_DELAYオプションがサーバーソケットに設定されます。これにより、ほとんどの場合、パフォーマンスが向上します。デフォルトではtrueに設定されています。

threadPriority

JVM内でのリクエスト処理スレッドの優先度。デフォルト値は5java.lang.Thread.NORM_PRIORITY定数の値)です。この優先度の意味の詳細については、java.lang.ThreadクラスのJavadocを参照してください。このコネクタにexecutorが関連付けられている場合、この属性は無視されます。コネクタは内部のスレッドプールではなく、executorを使用してタスクを実行するためです。executorが設定されている場合、この属性に設定された値は正しく記録されますが、(JMXなどを介して)-1として報告され、使用されていないことが明確になります。

threadsMaxIdleTime

executorにminSpareThreadsより多くのスレッドがある場合、スレッドプールによってスレッドがアクティブに維持される時間(ミリ秒単位)。指定されていない場合、デフォルトの60000ミリ秒が使用されます。このコネクタにexecutorが関連付けられている場合、この属性は無視されます。コネクタは内部のスレッドプールではなく、executorを使用してタスクを実行するためです。executorが設定されている場合、この属性に設定された値は正しく記録されますが、(JMXなどを介して)-1として報告され、使用されていないことが明確になります。

throwOnFailure

ライフサイクル遷移中にコネクタが例外を経験した場合、例外を再スローするか、ログに記録しますか?指定されていない場合、デフォルトのfalseが使用されます。デフォルトは、org.apache.catalina.startup.EXIT_ON_INIT_FAILUREシステムプロパティで変更できます。

useAsyncIO

(bool) この属性を使用して、非同期IO APIの使用を有効または無効にします。デフォルト値はtrueです。

useKeepAliveResponseHeader

(bool) このインターネットドラフトで説明されているように、Keep-Alive HTTPレスポンスヘッダーの追加を有効または無効にするには、この属性を使用します。デフォルト値はtrueです。

useVirtualThreads

(bool) この属性を使用して、内部executorでの仮想スレッドの使用を有効または無効にします。このコネクタにexecutorが関連付けられている場合、この属性は無視されます。デフォルト値はfalseです。

Java TCPソケット属性

NIOおよびNIO2実装は、上記の一般的なコネクタおよびHTTP属性に加えて、次のJava TCPソケット属性をサポートしています。

属性説明
socket.rxBufSize

(int) ソケット受信バッファ(SO_RCVBUF)サイズ(バイト単位)。設定されていない場合は、JVMのデフォルトが使用されます。

socket.txBufSize

(int) ソケット送信バッファ(SO_SNDBUF)サイズ(バイト単位)。設定されていない場合は、JVMのデフォルトが使用されます。この値を明示的に設定する場合は注意が必要です。一部のJVMでは、約8k未満の値で非常にパフォーマンスが低下することが確認されています。

socket.tcpNoDelay

(bool) これは標準属性**tcpNoDelay**と同等です。

socket.soKeepAlive

(bool) ソケットのキープアライブ設定(SO_KEEPALIVE)のブール値。設定されていない場合は、JVMのデフォルトが使用されます。

socket.ooBInline

(bool) ソケットOOBINLINE設定のブール値。設定されていない場合は、JVMのデフォルトが使用されます。

socket.soReuseAddress

(bool) ソケットのアドレス再利用オプション(SO_REUSEADDR)のブール値。設定されていない場合は、JVMのデフォルトが使用されます。

socket.soLingerOn

(bool) ソケットのso lingerオプション(SO_LINGER)のブール値。標準属性**connectionLinger**の値が>=0であることは、これをtrueに設定することと同等です。標準属性**connectionLinger**の値が<0であることは、これをfalseに設定することと同等です。この属性とsoLingerTimeの両方を設定する必要があります。そうでない場合、JVMのデフォルトが両方で使用されます。

socket.soLingerTime

(int) ソケットのso lingerオプション(SO_LINGER)の値(秒単位)。これは標準属性**connectionLinger**と同等です。この属性とsoLingerOnの両方を設定する必要があります。そうでない場合、JVMのデフォルトが両方で使用されます。

socket.soTimeout

これは標準属性**connectionTimeout**と同等です。

socket.performanceConnectionTime

(int) パフォーマンス設定の最初の値。 Socket パフォーマンスオプションを参照してください。3つのパフォーマンス属性すべてを設定する必要があります。設定しない場合、JVMのデフォルト値がすべて使用されます。

socket.performanceLatency

(int) パフォーマンス設定の2番目の値。 Socket パフォーマンスオプションを参照してください。3つのパフォーマンス属性すべてを設定する必要があります。設定しない場合、JVMのデフォルト値がすべて使用されます。

socket.performanceBandwidth

(int) パフォーマンス設定の3番目の値。 Socket パフォーマンスオプションを参照してください。3つのパフォーマンス属性すべてを設定する必要があります。設定しない場合、JVMのデフォルト値がすべて使用されます。

socket.unlockTimeout

(int) ソケットのロック解除のタイムアウト。コネクタが停止されると、自分自身へのコネクタを開くことでアクセプタースレッドの解放を試みます。デフォルト値は250(ミリ秒)です。

NIO固有の設定

以下の属性は、NIOコネクタに固有です。

属性説明
pollerThreadPriority

(int) ポーラースレッドの優先度。デフォルト値は5java.lang.Thread.NORM_PRIORITY定数の値)です。この優先度の詳細については、java.lang.ThreadクラスのJavadocを参照してください。

selectorTimeout

(int) ポーラのselect()のタイムアウト時間(ミリ秒)。この値は重要です。接続のクリーンアップは同じスレッドで行われるため、非常に大きな値に設定しないでください。デフォルト値は1000ミリ秒です。

useSendfile

(bool) この属性を使用して、sendfile機能を有効または無効にします。デフォルト値はtrueです。sendfileを使用すると、Tomcatがレスポンスに対して実行する可能性のある圧縮が無効になります。

socket.directBuffer

(bool) ブール値。直接ByteBufferを使用するか、JavaマップされたByteBufferを使用するかを指定します。trueの場合、バッファの割り当てにjava.nio.ByteBuffer.allocateDirect()が使用され、falseの場合、java.nio.ByteBuffer.allocate()が使用されます。デフォルト値はfalseです。
直接バッファを使用する場合は、直接メモリスペースに適切な量のメモリを割り当ててください。SunのJDKでは、-XX:MaxDirectMemorySize=256mのように指定します。

socket.directSslBuffer

(bool) ブール値。SSLバッファに直接ByteBufferを使用するか、JavaマップされたByteBufferを使用するかを指定します。trueの場合、バッファの割り当てにjava.nio.ByteBuffer.allocateDirect()が使用され、falseの場合、java.nio.ByteBuffer.allocate()が使用されます。デフォルト値はfalseです。
直接バッファを使用する場合は、直接メモリスペースに適切な量のメモリを割り当ててください。OracleのJDKでは、-XX:MaxDirectMemorySize=256mのように指定します。

socket.appReadBufSize

(int) Tomcatで開かれる各接続には、読み取りByteBufferが関連付けられます。この属性は、このバッファのサイズを制御します。デフォルトでは、この読み取りバッファのサイズは8192バイトです。コンカレンシーが少ない場合は、この値を増やしてより多くのデータをバッファリングできます。キープアライブ接続が非常に多い場合は、この値を減らすか、ヒープサイズを増やしてください。

socket.appWriteBufSize

(int) Tomcatで開かれる各接続には、書き込みByteBufferが関連付けられます。この属性は、このバッファのサイズを制御します。デフォルトでは、この書き込みバッファのサイズは8192バイトです。コンカレンシーが少ない場合は、この値を増やしてより多くのレスポンスデータをバッファリングできます。キープアライブ接続が非常に多い場合は、この値を減らすか、ヒープサイズを増やしてください。
デフォルト値は非常に低いため、数万の同時接続を処理していない場合は、値を増やす必要があります。

socket.bufferPool

(int) NIOxコネクタは、ソケットにリンクされた要素を保持するNioXChannelというクラスを使用します。ガベージコレクションを削減するために、NIOxコネクタはこれらのチャネルオブジェクトをキャッシュします。この値は、このキャッシュのサイズを指定します。デフォルト値は-2です。特別な値として、-1は無制限のキャッシュ、0はキャッシュなし、-2はbufferPoolSize属性を使用して計算された値を表します。

socket.bufferPoolSize

(int) NioXChannelプールは、使用されていないオブジェクトに基づくのではなく、サイズに基づいてサイズを設定することもできます。bufferPoolが-2でない場合、この値は使用されません。
特別な値を除き、値はバイト単位です。特別な値として、-1は無制限のキャッシュ、0はキャッシュなし、-2は次のように計算された値を表します。
NioXChannel バッファサイズ = 読み取りバッファサイズ + 書き込みバッファサイズ
SecureNioXChannel バッファサイズ = アプリケーション読み取りバッファサイズ + アプリケーション書き込みバッファサイズ + 最大SNI解析サイズの2倍。ランタイムによって報告された最大メモリが1GBを超える場合、プールサイズはメモリをバッファサイズで割った値になります。それ以外の場合は0になります。

socket.processorCache

(int) Tomcatは、ガベージコレクションを削減するためにSocketProcessorオブジェクトをキャッシュします。整数値は、キャッシュに保持するオブジェクトの最大数を指定します。デフォルトは0です。特別な値として、-1は無制限のキャッシュ、0はキャッシュなしを表します。

socket.eventCache

(int) Tomcatは、ガベージコレクションを削減するためにPollerEventオブジェクトをキャッシュします。整数値は、キャッシュに保持するオブジェクトの最大数を指定します。デフォルトは0です。特別な値として、-1は無制限のキャッシュ、0はキャッシュなしを表します。

unixDomainSocketPath

サポートされている場合、このコネクタが作成して着信接続を待機するUnixドメインソケットへのパス。これが指定されている場合、それ以外で必須のport属性は省略できます。詳細については、Unixドメインソケットサポートを参照してください。

unixDomainSocketPathPermissions

サポートされている場合、上記のunixDomainSocketPathで指定されたUnixドメインソケットに適用されるPOSIXパーミッション。パーミッションは、所有者、グループ、その他に対してそれぞれ3つのセットで、(r)ead、(w)rite、e(x)ecuteの9文字の文字列で指定されます。パーミッションが付与されない場合は、ハイフンが使用されます。指定されていない場合、パーミッションはrw-rw-rw-がデフォルトになります。

useInheritedChannel

(bool) このコネクタがinetd/systemdネットワークソケットを継承するかどうかを定義します。ネットワークソケットを継承できるコネクタは1つだけです。このオプションを使用して、systemdスーパーデーモンのポートへの接続要求が行われたときにTomcatを自動的に起動できます。デフォルト値はfalseです。詳細については、java.nio.channels.spi.SelectorProviderクラスのJavadocを参照してください。

NIO2固有の設定

以下の属性は、NIO2コネクタに固有です。

属性説明
useSendfile

(bool) この属性を使用して、sendfile機能を有効または無効にします。デフォルト値はtrueです。sendfileを使用すると、Tomcatがレスポンスに対して実行する可能性のある圧縮が無効になります。

socket.directBuffer

(bool) ブール値。直接ByteBufferを使用するか、JavaマップされたByteBufferを使用するかを指定します。trueの場合、バッファの割り当てにjava.nio.ByteBuffer.allocateDirect()が使用され、falseの場合、java.nio.ByteBuffer.allocate()が使用されます。デフォルト値はfalseです。
直接バッファを使用する場合は、直接メモリスペースに適切な量のメモリを割り当ててください。SunのJDKでは、-XX:MaxDirectMemorySize=256mのように指定します。

socket.directSslBuffer

(bool) ブール値。SSLバッファに直接ByteBufferを使用するか、JavaマップされたByteBufferを使用するかを指定します。trueの場合、バッファの割り当てにjava.nio.ByteBuffer.allocateDirect()が使用され、falseの場合、java.nio.ByteBuffer.allocate()が使用されます。デフォルト値はfalseです。
直接バッファを使用する場合は、直接メモリスペースに適切な量のメモリを割り当ててください。OracleのJDKでは、-XX:MaxDirectMemorySize=256mのように指定します。

socket.appReadBufSize

(int) Tomcatで開かれる各接続には、読み取りByteBufferが関連付けられます。この属性は、このバッファのサイズを制御します。デフォルトでは、この読み取りバッファのサイズは8192バイトです。コンカレンシーが少ない場合は、この値を増やしてより多くのデータをバッファリングできます。キープアライブ接続が非常に多い場合は、この値を減らすか、ヒープサイズを増やしてください。

socket.appWriteBufSize

(int) Tomcatで開かれる各接続には、書き込みByteBufferが関連付けられます。この属性は、このバッファのサイズを制御します。デフォルトでは、この書き込みバッファのサイズは8192バイトです。コンカレンシーが少ない場合は、この値を増やしてより多くのレスポンスデータをバッファリングできます。キープアライブ接続が非常に多い場合は、この値を減らすか、ヒープサイズを増やしてください。
デフォルト値は非常に低いため、数万の同時接続を処理していない場合は、値を増やす必要があります。

socket.bufferPool

(int) NIO2コネクタは、ソケットにリンクされた要素を保持するNio2Channelというクラスを使用します。ガベージコレクションを削減するために、NIO2コネクタはこれらのチャネルオブジェクトをキャッシュします。この値は、このキャッシュのサイズを指定します。デフォルト値は500で、キャッシュが500個のNio2Channelオブジェクトを保持することを意味します。他の値として、-1は無制限のキャッシュ、0はキャッシュなしを表します。

socket.processorCache

(int) Tomcatは、ガベージコレクションを削減するためにSocketProcessorオブジェクトをキャッシュします。整数値は、キャッシュに保持するオブジェクトの最大数を指定します。デフォルトは0です。他の値として、-1は無制限のキャッシュ、0はキャッシュなしを表します。

ネストされたコンポーネント

Tomcatは、サーバー名表示(SNI)をサポートしています。これにより、複数のSSL設定を単一セキュアコネクタに関連付けることができ、クライアントによって要求されたホスト名によって、任意の接続に使用される設定が決まります。これを容易にするために、SSLHostConfig要素が追加され、これらの設定の1つを定義するために使用できます。任意の数のSSLHostConfigコネクタにネストできます。同時に、単一のSSLHostConfigに複数の証明書を関連付けるためのサポートが追加されました。したがって、各SSL証明書はSSLHostConfig内のCertificate要素で設定されます。詳細については、以下のSSLサポートセクションを参照してください。

OpenSSLがTLS実装を提供している場合、OpenSSLのSSL_CONF APIを介してOpenSSLを設定するために、OpenSSLConf要素内に1つ以上のOpenSSLConfCmd要素をネストできます。単一のOpenSSLConf要素をSSLHostConfig要素にネストできます。詳細については、以下のSSLサポートセクションを参照してください。

特殊機能

HTTP/1.1およびHTTP/1.0サポート

このコネクタは、RFC 7230-7235で説明されているHTTP/1.1プロトコルのすべての必須機能(永続接続、パイプライン処理、期待、チャンクエンコーディングなど)をサポートしています。クライアントがHTTP/1.0またはHTTP/0.9のみをサポートしている場合、コネクタはこれらプロトコルもサポートするように正常にフォールバックします。このサポートを有効にするために特別な構成は必要ありません。コネクタはHTTP/1.0キープアライブもサポートしています。

RFC 7230では、HTTPサーバーは常に、サポートすると主張する最高のHTTPバージョンで応答を開始する必要があります。したがって、このコネクタは常に、応答の先頭にHTTP/1.1を返します。

HTTP/2サポート

HTTP/2サポートは、TLS(h2)、HTTPアップグレード(h2c)を介した非TLS、および直接HTTP/2(h2c)接続に対して提供されます。HTTPコネクタのHTTP/2サポートを有効にするには、className属性がorg.apache.coyote.http2.Http2ProtocolUpgradeProtocol要素をConnectorにネストする必要があります。

<Connector ... >
  <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
</Connector>

追加の構成属性を使用できます。詳細については、HTTP/2アップグレードプロトコルのドキュメントを参照してください。

プロキシサポート

proxyNameおよびproxyPort属性は、Tomcatがプロキシサーバーの背後で実行されている場合に使用できます。これらの属性は、request.getServerName()およびrequest.getServerPort()メソッドを呼び出すWebアプリケーションに返される値を変更します。これらのメソッドは、多くの場合、リダイレクトの絶対URLを作成するために使用されます。これらの属性を構成せずに、返される値は、プロキシサーバーからの接続が受信されたサーバー名とポートを反映し、クライアントが元の要求を指示したサーバー名とポートを反映しません。

詳細については、プロキシサポートハウツーを参照してください。

Unixドメインソケットサポート

unixDomainSocketPath属性が使用されている場合、Unixドメインソケットをサポートするコネクタは、指定されたパスにあるソケットにバインドされます。

Java 16以降を使用しているユーザーの場合、NIOコネクタ内でサポートされています。

ソケットパスは、すべてのユーザーに対して読み取りと書き込みの権限で作成されます。このソケットを保護するには、適切な権限を持つディレクトリに配置し、必要に応じてアクセスを制限するように適切に構成します。あるいは、POSIX権限をサポートするプラットフォームでは、unixDomainSocketPathPermissionsオプションを使用して、ソケットの権限を直接設定できます。

Tomcatはサーバーのシャットダウン時にソケットを自動的に削除します。ソケットが既に存在する場合、起動は失敗します。管理者は、ソケットが既存のTomcatプロセスによって既に使用されていないことを確認した後、ソケットを削除する必要があります。

Unixドメインソケットは、curlコマンドラインクライアントの--unix-socketオプションと、Apache HTTPサーバーのmod_proxyモジュールのUnixドメインソケットサポートを使用してアクセスできます。

SSLサポート

SSLEnabled属性をtrueに設定することで、この**コネクタ**の特定のインスタンスに対してSSLサポートを有効にできます。

サーブレットに正しい情報を渡すために、scheme属性とsecure属性をそれぞれhttpstrueに設定する必要もあります。

NIOおよびNIO2コネクタは、JSSE Java SSL実装またはOpenSSL実装のいずれかを使用します。可能な限り、JSSEとOpenSSLの両方で共通の構成属性が使用されます。

各セキュアコネクタは、少なくとも1つの**SSLHostConfig**を定義する必要があります。**SSLHostConfig**要素の名前は一意である必要があり、そのうちの1つは**コネクタ**のdefaultSSLHostConfigName属性と一致する必要があります。

各**SSLHostConfig**は、順番に少なくとも1つの**Certificate**を定義する必要があります。**Certificate**のタイプは一意である必要があります。

サーブレット仕様のセクション3.10で定義されている標準的なTLS関連のリクエスト属性に加えて、Tomcatはいくつかの追加のTLS関連属性をサポートしています。完全なリストは、SSLSupport Javadocにあります。

詳細については、SSL構成ハウツーを参照してください。

SSLサポート - SSLHostConfig

属性説明
certificateRevocationListFile

認証局の連結された証明書失効リストを含むファイルの名前。形式はPEMエンコードです。定義されていない場合、クライアント証明書は証明書失効リストに対してチェックされません(OpenSSLベースのコネクタが使用され、certificateRevocationListPathが定義されている場合を除く)。相対パスは$CATALINA_BASEに対して解決されます。JSSEベースのコネクタは、この属性のURLを指定することもできます。

certificateRevocationListPath

OpenSSLのみ。

認証局の証明書失効リストを含むディレクトリの名前。形式はPEMエンコードです。相対パスは$CATALINA_BASEに対して解決されます。

certificateVerification

接続を受け入れる前に、SSLスタックがクライアントから有効な証明書チェーンを要求することを求める場合は、requiredに設定します。SSLスタックがクライアント証明書を要求しますが、提示されない場合に失敗しないようにする場合は、optionalに設定します。クライアント証明書をオプションにし、Tomcatが信頼できるCAのリストに対してチェックしないようにする場合は、optionalNoCAに設定します。TLSプロバイダーがこのオプションをサポートしていない場合(OpenSSLはサポートしますが、JSSEはサポートしません)、optionalが指定されているかのように扱われます。optionalNoCAが設定されている場合、OCSPも無効になります。none値(デフォルト)は、クライアントがCLIENT-CERT認証を使用するセキュリティ制約によって保護されたリソースを要求する場合を除き、証明書チェーンを要求しません。

certificateVerificationDepth

クライアント証明書の検証時に許可される中間証明書の最大数。指定しない場合、デフォルト値の10が使用されます。

caCertificateFile

OpenSSLのみ。

信頼できる認証局の連結された証明書を含むファイルの名前。形式はPEMエンコードです。

caCertificatePath

OpenSSLのみ。

信頼できる認証局の証明書を含むディレクトリの名前。形式はPEMエンコードです。

ciphers

OpenSSL構文を使用して有効にする暗号。 (サポートされている暗号と構文のリストについては、OpenSSLのドキュメントを参照してください)。あるいは、標準的なOpenSSL暗号名または標準的なJSSE暗号名を使用した、コンマ区切りの暗号リストを使用することもできます。

OpenSSLの異なるバージョンでは、同じ暗号文字列を異なる方法で解釈することがあります。たとえば、CCM8暗号はOpenSSL 3.2でHIGHからMEDIUMに移動されました。使用されているOpenSSLまたはJSSEのバージョンに関係なく、Tomcatは提供された暗号値を最新のOpenSSL開発ブランチと一致する方法で暗号のリストに変換します。この暗号リストは、SSL実装に渡されます。

SSL実装によってサポートされている暗号のみが使用されます。デフォルト以外の暗号文字列から派生したリスト内の暗号で、SSL実装によってサポートされていないものは、コネクタの起動時にWARNINGメッセージでログに記録されます。構成されたSSL実装によってサポートされている暗号の明示的なリストを提供することにより、警告を回避できます。

指定しない場合、デフォルト(OpenSSL表記を使用)のHIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!kRSAが使用されます。

デフォルトでは、暗号が定義されている順序は優先順位として扱われます。honorCipherOrderを参照してください。

disableCompression

OpenSSLのみ。

圧縮を無効にするかどうかを構成します。デフォルトはtrueです。使用されているOpenSSLバージョンが圧縮の無効化をサポートしていない場合、そのOpenSSLバージョンのデフォルトが使用されます。

disableSessionTickets

OpenSSLのみ。

trueに設定されている場合、TLSセッションチケット(RFC 5077)の使用を無効にします。デフォルトはfalseです。TLSセッションチケットが使用されている場合、完全なピア証明書チェーンは最初の接続でのみ利用可能であることに注意してください。後続の接続(チケットを使用してTLSセッションを確立する接続)には、ピア証明書のみが含まれ、完全なチェーンは含まれません。

honorCipherOrder

クライアントが暗号を選択することを許可する代わりに、サーバーの暗号順序(ciphers設定からの)を強制するには、trueに設定します。デフォルトはfalseです。

hostName

SSLホストの名前。完全修飾ドメイン名(例:tomcat.apache.org)またはワイルドカードドメイン名(例:*.apache.org)のいずれかである必要があります。指定されていない場合、デフォルト値の_default_が使用されます。提供された値は常に小文字に変換されます。

insecureRenegotiation

OpenSSLのみ。

安全でない再ネゴシエーションを許可するかどうかを構成します。デフォルトはfalseです。使用されているOpenSSLバージョンが安全でない再ネゴシエーションの許可を構成することをサポートしていない場合、そのOpenSSLバージョンのデフォルトが使用されます。

keyManagerAlgorithm

JSSEのみ。

使用するKeyManagerアルゴリズム。これはKeyManagerFactory.getDefaultAlgorithm()にデフォルト設定され、Sun JVMの場合はSunX509を返します。IBM JVMはIbmX509を返します。他のベンダーの場合は、JVMのドキュメントでデフォルト値を確認してください。

protocols

クライアントとの通信時にサポートするプロトコルの名前。次の組み合わせのリストにする必要があります。

  • SSLv2Hello
  • SSLv3
  • TLSv1
  • TLSv1.1
  • TLSv1.2
  • TLSv1.3
  • all

リスト内の各トークンには、プラス記号("+")またはマイナス記号("-")を接頭辞として付けることができます。プラス記号はプロトコルを追加し、マイナス記号は現在のリストからプロトコルを削除します。リストは空のリストから構築されます。

トークンallは、SSLv2Hello,TLSv1,TLSv1.1,TLSv1.2,TLSv1.3のエイリアスです。

TLSv1.3は、TLSv1.3を実装するJVMを使用する場合、JSSEでのみサポートされます。

OpenSSLベースのセキュアコネクタでは、SSLv2Helloが無視されることに注意してください。OpenSSLベースのセキュアコネクタに複数のプロトコルが指定されている場合、常にSSLv2Helloをサポートします。単一のプロトコルが指定されている場合、SSLv2Helloはサポートしません。

SSLv2SSLv3は本質的に安全ではないことに注意してください。

指定しない場合、デフォルト値のallが使用されます。

revocationEnabled

JSSEのみ。

JSSEプロバイダーで証明書失効チェックを有効にする必要がありますか? **certificateRevocationListFile**が設定されている場合、この属性は無視され、失効チェックは常に有効になります。この属性は、他の手段によって現在のJSSEプロバイダーに対して構成された失効チェックを有効にすることを目的としています。指定しない場合、デフォルトのfalseが使用されます。

sessionCacheSize

セッションキャッシュに維持するSSLセッションの数。実装のデフォルトを使用するには-1を指定します。0以上の値は実装に渡されます。0は無制限のキャッシュサイズを指定するために使用され、推奨されません。指定しない場合、デフォルトの-1が使用されます。

sessionTimeout

SSLセッションの作成後、タイムアウトするまでの時間(秒単位)。実装のデフォルトを使用するには-1を指定します。0以上の値は実装に渡されます。0は無制限のタイムアウトを指定するために使用され、推奨されません。指定しない場合、デフォルトの86400(24時間)が使用されます。

sslProtocol

JSSEのみ。

使用するSSLプロトコル(単一の値で複数のプロトコルを有効にできます - 詳細についてはJVMのドキュメントを参照してください)。指定しない場合、デフォルトはTLSです。許可される値は、SSLContextインスタンスを作成するときのアルゴリズムの許可値について、JVMのドキュメントから取得できます。例: Oracle Java 11。注:この属性とprotocolsには重複があります。

trustManagerClassName

JSSEのみ。

クライアント証明書の検証に使用するカスタム信頼マネージャー・クラスの名前。このクラスには引数のないコンストラクターがあり、javax.net.ssl.X509TrustManagerも実装する必要があります。この属性が設定されている場合、トラストストア属性は無視される可能性があります。

truststoreAlgorithm

JSSEのみ。

トラストストアに使用するアルゴリズム。指定しない場合、javax.net.ssl.TrustManagerFactory.getDefaultAlgorithm()によって返されるデフォルト値が使用されます。

truststoreFile

JSSEのみ。

クライアント証明書の検証に使用するトラストストアファイル。デフォルトはjavax.net.ssl.trustStoreシステムプロパティの値です。この属性とデフォルトのシステムプロパティのどちらも設定されていない場合、トラストストアは構成されません。相対パスは$CATALINA_BASEに対して解決されます。この属性にはURLを使用することもできます。

truststorePassword

JSSEのみ。

トラストストアへのアクセスパスワード。デフォルトはjavax.net.ssl.trustStorePasswordシステムプロパティの値です。そのプロパティがnullの場合、トラストストアパスワードは構成されません。無効なトラストストアパスワードが指定されている場合、警告がログに記録され、パスワードなしでトラストストアにアクセスしようとします。これにより、トラストストアの内容の検証がスキップされます。

truststoreProvider

JSSEのみ。

サーバ証明書に使用されるトラストストアプロバイダの名前。デフォルトは、javax.net.ssl.trustStoreProviderシステムプロパティの値です。このプロパティがnullの場合、keystoreProviderの値がデフォルトとして使用されます。この属性、デフォルトのシステムプロパティ、keystoreProviderのいずれも設定されていない場合、登録されたプロバイダのリストが優先順位に従って走査され、truststoreTypeをサポートする最初のプロバイダが使用されます。

truststoreType

JSSEのみ。

トラストストアに使用されるキーストアの種類。デフォルトは、javax.net.ssl.trustStoreTypeシステムプロパティの値です。このプロパティがnullの場合、このTLS仮想ホストに対して単一の証明書が構成されており、その証明書のkeystoreTypePKCS12でない場合、デフォルトは単一証明書のkeystoreTypeになります。これらどれもデフォルトを特定できない場合、デフォルトはJKSになります。キーストアの種類に関する注記を参照してください。

SSLサポート - 証明書

属性説明
certificateFile

サーバ証明書を含むファイルの名前。フォーマットはPEMエンコードです。相対パスは$CATALINA_BASEに対して解決されます。

証明書に加えて、ファイルには、それぞれopenssl dhparamopenssl ecparamによって生成された、DHパラメータと/または一時キーのEC曲線名をオプション要素として含めることができます。それぞれのOpenSSLコマンドの出力を、証明書ファイルに単純に連結できます。

この属性は、certificateKeystoreFileが指定されていない限り必須です。

certificateChainFile

使用されるサーバ証明書に関連付けられた証明書チェーンを含むファイルの名前。フォーマットはPEMエンコードです。相対パスは$CATALINA_BASEに対して解決されます。

Tomcatで使用される証明書チェーンには、最初の要素としてサーバ証明書を含めるべきではありません。

異なる種類で複数の証明書を使用する場合、すべて同じ証明書チェーンを使用する必要があることに注意してください。

certificateKeyAlias

JSSEのみ。

キーストア内のサーバキーと証明書に使用されるエイリアス。指定されていない場合、キーストアから最初に読み取られたキーが使用されます。キーストアからキーが読み取られる順序は実装依存です。キーが追加されたのと同じ順序でキーストアからキーが読み取られるとは限りません。キーストアに複数のキーが存在する場合は、正しいキーが使用されるように、keyAliasを設定することを強くお勧めします。

certificateKeyFile

サーバ秘密鍵を含むファイルの名前。フォーマットはPEMエンコードです。デフォルト値はcertificateFileの値であり、この場合、証明書と秘密鍵の両方がこのファイルに含まれている必要があります(推奨されません)。相対パスは$CATALINA_BASEに対して解決されます。

certificateKeyPassword

指定されたファイルからサーバ証明書に関連付けられた秘密鍵にアクセスするために使用されるパスワード。

指定されていない場合、JSSEのデフォルトの動作はcertificateKeystorePasswordを使用することです。OpenSSLの場合、デフォルトの動作はパスワードを使用しないことですが、必要に応じてOpenSSLはパスワードを要求します。

certificateKeyPasswordFile

指定されたファイルからサーバ証明書に関連付けられた秘密鍵にアクセスするために使用されるパスワードファイル。この属性はcertificateKeyPasswordよりも優先されます。

指定されていない場合、JSSEのデフォルトの動作はcertificateKeystorePasswordFileを使用することです。OpenSSLの場合、デフォルトの動作はパスワード(ファイル)を使用しないことですが、必要に応じてOpenSSLはパスワードを要求します。

certificateKeystoreFile

JSSEのみ。

ロードするサーバ証明書とキーを保存したキーストアファイルのパス名。デフォルトでは、パス名はTomcatを実行しているユーザのオペレーティングシステムのホームディレクトリにある.keystoreファイルです。keystoreTypeにファイルが不要な場合は、このパラメータに""(空文字列)またはNONEを使用してください。相対パスは$CATALINA_BASEに対して解決されます。この属性にはURIも使用できます。ドメインキーストア(keystoreTypeDKS)を使用する場合は、このパラメータはドメインキーストアへのURIである必要があります。

この属性は、certificateFileが指定されていない限り必須です。

certificateKeystorePassword

JSSEのみ。

サーバの秘密鍵と証明書を含むキーストアにアクセスするために使用するパスワード。指定されていない場合、デフォルトのchangeitが使用されます。

certificateKeystorePasswordFile

JSSEのみ。

サーバの秘密鍵と証明書を含むキーストアにアクセスするために使用するパスワードファイル。この属性はcertificateKeystorePasswordよりも優先されます。

certificateKeystoreProvider

JSSEのみ。

サーバ証明書に使用されるキーストアプロバイダの名前。指定されていない場合、システムプロパティjavax.net.ssl.keyStoreProviderの値が使用されます。この属性とシステムプロパティのどちらも設定されていない場合、登録されたプロバイダのリストが優先順位に従って走査され、keystoreTypeをサポートする最初のプロバイダが使用されます。

certificateKeystoreType

JSSEのみ。

サーバ証明書に使用されるキーストアファイルの種類。指定されていない場合、システムプロパティjavax.net.ssl.keyStoreTypeの値が使用されます。この属性とシステムプロパティのどちらも設定されていない場合、デフォルト値の"JKS"が使用されます。キーストアの種類に関する注記を参照してください。

type

証明書のタイプ。これは、証明書と互換性のある暗号を識別するために使用されます。UNDEFINEDRSADSA、またはECのいずれかでなければなりません。SSLHostConfig内にCertificateが1つだけネストされている場合、この属性は必須ではなく、デフォルトでUNDEFINEDになります。SSLHostConfig内に複数のCertificateがネストされている場合、この属性は必須であり、各Certificateは一意のタイプを持つ必要があります。

SSLサポート - コネクタ - NIOおよびNIO2

APR/ネイティブが有効になっている場合、コネクタはJSSEを介してOpenSSLを使用するようにデフォルトで設定されます。これは、使用されているプロセッサによっては、JSSE Java実装よりも最適化されている可能性があり、多くの商用アクセラレータコンポーネントと組み合わせることができます。

次のNIOおよびNIO2 SSL構成属性は仮想ホストに固有のものではなく、そのため、コネクタで構成する必要があります。

属性説明
sniParseLimit

SNIサポートを実装するために、Tomcatは新しいTLS接続で受信した最初のTLSメッセージ(クライアントヘロー)を解析して、要求されたサーバ名を抽出する必要があります。メッセージはバッファリングする必要があるため、通常のTLS処理のためにJSSE実装に渡すことができます。理論的には、この最初のメッセージは非常に大きくなる可能性がありますが、実際には通常は数百バイトです。この属性は、Tomcatがバッファリングする最大メッセージサイズを設定します。メッセージがこのサイズを超えると、クライアントによってサーバ名が示されていないかのように接続が構成されます。指定されていない場合、デフォルトは65536(64k)になります。

sslImplementationName

使用するSSL実装のクラス名。指定されておらず、tomcat-nativeライブラリがインストールされていない場合、デフォルトはorg.apache.tomcat.util.net.jsse.JSSEImplementationになり、これはJVMのデフォルトのJSSEプロバイダをラップします。JVMは、デフォルトとして別のJSSEプロバイダを使用するように構成できます。Tomcatは、OpenSSLをバックエンドとするJSSE用の特別なSSL実装もバンドルしています。それを有効にするには、ネイティブライブラリを有効にする必要があり、Tomcatは自動的にそれを有効にし、この属性のデフォルト値はorg.apache.tomcat.util.net.openssl.OpenSSLImplementationになります。その場合、JSSEとOpenSSLの構成スタイルの属性を使用できますが、2つのタイプを混在させることはできません(たとえば、Javaキーストアの使用を定義し、OpenSSL属性を使用して別のpem秘密鍵を指定することは許可されていません)。

SSLサポート - OpenSSLのSSL_CONF API

OpenSSLがTLS実装を提供している場合、OpenSSLのSSL_CONF APIを介してOpenSSLを構成するために、OpenSSLConf要素内に1つ以上のOpenSSLConfCmd要素をネストできます。単一のOpenSSLConf要素をSSLHostConfig要素にネストできます。

使用可能な構成ファイルコマンドのセットは、使用されているOpenSSLバージョンによって異なります。サポートされているコマンド名と値のリストについては、OpenSSLのSSL_CONF_cmd(3)マニュアルページの「サポートされている構成ファイルコマンド」セクションを参照してください。構成ファイルコマンドの一部は、SSLHostConfig属性の代替として使用できます。機能をSSLHostConfig属性を使用して構成できない場合にのみ、構成ファイルコマンドを使用することをお勧めします。

OpenSSLConf要素は属性をサポートしていません。

OpenSSLConfCmd要素は次の属性をサポートします。

属性説明
name

構成ファイルコマンドの名前。

value

構成ファイルコマンドに使用する値。

キーストアの種類

標準的なキーストアの種類(JKSおよびPKCS12)に加えて、ほとんどのJavaランタイムは、Windows-ROOT、Windows-My、DKSなどの追加のキーストアの種類とハードウェアセキュリティモジュールをサポートしています。一般的に、TomcatのTLSコネクタでこれらの追加のキーストアの種類を使用するには

  • 必要に応じて、certificateKeystoreTypeおよび/またはtruststoreTypeコネクタ属性を設定します。
  • 構成ファイルが必要な場合は、必要に応じて、certificateKeystoreFileおよび/またはtruststoreFileコネクタ属性をファイルが指すように設定します。
  • 構成ファイルが必要ない場合は、ほぼ確実に、必要に応じて、certificateKeystoreFileおよび/またはtruststoreFileコネクタ属性を空の文字列("")に明示的に設定する必要があります。
  • パスワードが必要な場合は、必要に応じて、certificateKeystorePasswordおよび/またはtruststorePasswordコネクタ属性に必要なパスワードを設定します。
  • パスワードが必要ない場合は、ほぼ確実に、必要に応じて、certificateKeystorePasswordおよび/またはtruststorePasswordコネクタ属性を空の文字列("")に明示的に設定する必要があります。

キーストア実装のバリエーションと、JSSEとOpenSSLの構成スタイル間の相互運用性を可能にするためにバックグラウンドで行われるTomcatによるキーストア操作を組み合わせると、一部のキーストアではわずかに異なる構成が必要になる場合があります。Apache Tomcatユーザメーリングリストから常にサポートを受けることができます。上記のアドバイスとは異なるキーストアについては、ここで文書化することを目指しています。現在、認識しているものはありません。

コネクタの比較

以下は、コネクタの違いを示す小さなチャートです。

Java Nioコネクタ
NIO
Java Nio2コネクタ
NIO2
クラス名 Http11NioProtocol Http11Nio2Protocol
Tomcatバージョン 6.0.x以降 8.0.x以降
ポーリングのサポート はい はい
ポーリングサイズ maxConnections maxConnections
リクエストヘッダの読み取り ノンブロッキング ノンブロッキング
リクエストボディの読み取り ブロッキング ブロッキング
レスポンスヘッダとボディの書き込み ブロッキング ブロッキング
次のリクエストの待機 ノンブロッキング ノンブロッキング
SSLサポート JavaのSSLまたはOpenSSL JavaのSSLまたはOpenSSL
SSL接続確立手順 非同期接続 非同期接続
同時接続数の上限 maxConnections maxConnections