HTTP 连接器
目录
简介
HTTP 连接器元素表示一个支持 HTTP/1.1 协议的连接器组件。除了执行 servlet 和 JSP 页面外,它还使 Catalina 能够作为独立 Web 服务器运行。此组件的一个特定实例侦听服务器上特定 TCP 端口号上的连接。一个或多个此类连接器可以配置为单个服务的一部分,每个连接器转发到关联的引擎来执行请求处理并创建响应。
如果您希望配置用于通过 AJP 协议连接到 Web 服务器的连接器(例如 Apache 1.3 的mod_jk 1.2.x
连接器),请参阅AJP 连接器文档。
每个传入的非异步请求在该请求持续期间需要一个线程。如果接收到的同时请求比当前可用的请求处理线程所能处理的更多,则将创建其他线程,直至达到配置的最大值(maxThreads
属性的值)。如果仍收到更多同时请求,Tomcat 将接受新连接,直到当前连接数达到 maxConnections
。连接在由 Connector 创建的服务器套接字内排队,直到有线程可用于处理连接。一旦达到 maxConnections
,操作系统将对进一步的连接排队。操作系统提供的连接队列的大小可以通过 acceptCount
属性控制。如果操作系统队列已满,则可能会拒绝或超时进一步的连接请求。
属性
通用属性
Connector 的所有实现都支持以下属性
属性 | 说明 |
---|---|
allowBackslash |
如果为 如果未指定,则使用默认值 |
allowTrace |
一个布尔值,可用于启用或禁用 TRACE HTTP 方法。如果未指定,则此属性设置为 false。根据 RFC 7231 第 4.3.8 节,cookie 和授权标头将从对 TRACE 请求的响应中排除。如果您希望包含这些标头,则可以为目标 Servlet 实现 |
asyncTimeout |
异步请求的默认超时(以毫秒为单位)。如果未指定,则此属性设置为 Servlet 规范默认值 30000(30 秒)。 |
discardFacades |
一个布尔值,可用于启用或禁用隔离容器内部请求处理对象的 facade 对象的回收。如果设置为 |
enableLookups |
如果希望调用 |
encodedSolidusHandling |
当设置为 |
enforceEncodingInGetWriter |
如果这是 如果未指定,将使用符合默认规范的值 |
maxCookieCount |
允许用于请求的最大 cookie 数。小于零的值表示没有限制。如果未指定,将使用默认值 200。 |
maxParameterCount |
从查询字符串以及对于 POST 请求,如果内容类型为 |
maxPostSize |
容器 FORM URL 参数解析将处理的 POST 的最大字节数。可以通过将此属性设置为小于零的值来禁用限制。如果未指定,则此属性设置为 2097152(2 MiB)。请注意, |
maxSavePostSize |
容器在 FORM 或 CLIENT-CERT 身份验证或 HTTP/1.1 升级期间保存/缓冲的请求正文的最大字节大小。对于这两种类型的身份验证,请求正文将在用户身份验证之前保存/缓冲。对于 CLIENT-CERT 身份验证,请求正文在 SSL 握手的持续时间内缓冲,并在请求处理时清空缓冲区。对于 FORM 身份验证,POST 在用户被重定向到登录表单时保存,并在用户成功验证或与身份验证请求关联的会话过期之前保留。对于 HTTP/1.1 升级,请求正文在升级过程的持续时间内缓冲。可以通过将此属性设置为 -1 来禁用此限制。将此属性设置为零将禁用在身份验证和 HTTP/1.1 升级期间保存请求正文数据。如果未指定,此属性将设置为 4096(4 千字节)。 |
parseBodyMethods |
使用 |
port |
此 Connector 将在该 TCP 端口号上创建一个服务器套接字并等待传入连接。您的操作系统将只允许一个服务器应用程序侦听特定 IP 地址上的特定端口号。如果使用特殊值 0(零),则 Tomcat 将随机选择一个空闲端口供此连接器使用。这通常仅在嵌入式和测试应用程序中才有用。 |
protocol |
设置处理传入流量的协议。默认值为 |
proxyName |
如果此 Connector 在代理配置中使用,请配置此属性以指定要为对 |
proxyPort |
如果此 Connector 在代理配置中使用,请配置此属性以指定要为对 |
redirectPort |
如果此连接器支持非 SSL 请求,并且收到了请求,而匹配的 |
rejectSuspiciousURIs |
如果 URI 与 Servlet 6.0 规范识别的可疑 URI 模式之一匹配,此连接器是否应拒绝请求?默认值为 |
scheme |
将此属性设置为希望通过调用 |
secure |
如果希望此连接器接收的请求的 |
URIEncoding |
在对 URL 进行 %xx 解码后,此属性指定用于解码 URI 字节的字符编码。默认值为 |
useBodyEncodingForURI |
此属性指定是否应将 contentType 中指定的编码用于 URI 查询参数,而不是使用 URIEncoding。此设置是为了与 Tomcat 4.1.x 兼容,在 Tomcat 4.1.x 中,contentType 中指定的编码或使用 Request.setCharacterEncoding 方法显式设置的编码也用于 URL 中的参数。默认值为 注释: 1) 此设置仅应用于请求的查询字符串。与 |
useIPVHosts |
将此属性设置为 |
xpoweredBy |
将此属性设置为 |
标准实现
除上面列出的通用连接器属性外,标准 HTTP 连接器(NIO 和 NIO2)还支持以下属性。
属性 | 说明 |
---|---|
acceptCount |
当达到 |
acceptorThreadPriority |
接受器线程的优先级。用于接受新连接的线程。默认值为 |
address |
对于具有多个 IP 地址的服务器,此属性指定将用于侦听指定端口的地址。默认情况下,连接器将侦听所有本地地址。除非使用系统属性以其他方式配置 JVM,否则基于 Java 的连接器(NIO、NIO2)在使用 |
allowHostHeaderMismatch |
默认情况下,Tomcat 将拒绝在请求行中指定主机但在主机标头中指定不同主机的请求。可以通过将此属性设置为 |
allowedTrailerHeaders |
默认情况下,Tomcat 在处理分块输入时将忽略所有尾部标头。要处理标头,必须将其添加到此以逗号分隔的标头名称列表中。 |
bindOnInit |
控制连接器使用的套接字的绑定时间。如果设置为 |
clientCertProvider |
当客户端证书信息以非 |
compressibleMimeType |
该值是一个逗号分隔的 MIME 类型列表,可用于 HTTP 压缩。默认值为 |
compression |
连接器可以使用 HTTP/1.1 GZIP 压缩来节省服务器带宽。该参数的可接受值为“off”(禁用压缩)、“on”(允许压缩,导致文本数据被压缩)、“force”(在所有情况下强制压缩)或数字整数值(相当于“on”,但指定输出被压缩之前的数据最小量)。如果内容长度未知,并且压缩设置为“on”或更激进,则输出也将被压缩。如果未指定,此属性将设置为“off”。 注意:使用压缩(节省您的带宽)和使用 sendfile 功能(节省您的 CPU 周期)之间存在权衡。如果连接器支持 sendfile 功能,例如 NIO 连接器,则使用 sendfile 将优先于压缩。症状是大于 48 KiB 的静态文件将未经压缩地发送。您可以通过设置连接器的 |
compressionMinSize |
如果 compression 设置为“on”,则可以使用此属性指定输出被压缩之前的数据最小量。如果未指定,此属性默认为“2048”。单位为字节。 |
connectionLinger |
此 连接器 使用的套接字在关闭时将保留多少秒。默认值为 |
connectionTimeout |
此 连接器 在接受连接后将等待多少毫秒,以呈现请求 URI 行。使用 -1 值表示无(即无限)超时。默认值为 60000(即 60 秒),但请注意,随 Tomcat 一起提供的标准 server.xml 将其设置为 20000(即 20 秒)。除非 disableUploadTimeout 设置为 |
connectionUploadTimeout |
指定在数据上传进行时要使用的超时(以毫秒为单位)。仅当 disableUploadTimeout 设置为 |
continueResponseTiming |
何时使用
|
defaultSSLHostConfigName |
如果客户端连接未提供 SNI,或者提供了 SNI 但与任何已配置的 SSLHostConfig 不匹配,则用于安全连接(如果此连接器已配置为安全连接)的默认 SSLHostConfig 的名称。如果未指定,将使用 |
disableUploadTimeout |
此标志允许 Servlet 容器在数据上传期间使用不同的、通常较长的连接超时。如果未指定,此属性将设置为 |
executor |
对 Executor 元素中名称的引用。如果设置了此属性,并且存在命名的执行器,则连接器将使用执行器,并且将忽略所有其他线程属性。请注意,如果未为连接器指定共享执行器,则连接器将使用私有内部执行器来提供线程池。 |
executorTerminationTimeoutMillis |
在继续停止连接器的进程之前,私有内部执行器将等待请求处理线程终止的时间。如果未设置,则默认值为 |
keepAliveTimeout |
此 Connector 在关闭连接之前等待另一个 HTTP 请求的毫秒数。默认值是使用已为 connectionTimeout 属性设置的值。使用 -1 的值表示没有(即无限)超时。 |
maxConnections |
服务器在任何给定时间接受和处理的最大连接数。达到此数字后,服务器将接受但不会处理另一个连接。此附加连接将被阻止,直到正在处理的连接数降至 maxConnections 以下,此时服务器将开始再次接受和处理新连接。请注意,一旦达到限制,操作系统仍可能根据 仅适用于 NIO/NIO2,将值设置为 -1 将禁用 maxConnections 功能,并且不会计算连接。 |
maxExtensionSize |
限制块状 HTTP 请求中块扩展的总长度。如果值为 |
maxHeaderCount |
容器允许的请求中的最大标头数。包含多于指定限制的标头的请求将被拒绝。小于 0 的值表示没有限制。如果未指定,则使用 100 的默认值。 |
maxHttpHeaderSize |
为 maxHttpRequestHeaderSize 和 maxHttpResponseHeaderSize 提供默认值。如果未指定,此属性将设置为 8192(8 KiB)。 |
maxHttpRequestHeaderSize |
以字节为单位指定与 HTTP 请求关联的请求行和标头的最大允许大小。这与接收的字节数进行比较,因此包括行终止符和空格,以及请求行、标头名称和标头值。如果未指定,此属性将设置为 如果您看到“请求标头过大”错误,可以增加此值,但请注意,Tomcat 将为每个请求分配您指定的全部数量。例如,如果您指定 1 MB 的 maxHttpRequestHeaderSize,并且您的应用程序处理 100 个并发请求,您将看到请求标头消耗了 100 MB 的堆。 |
maxHttpResponseHeaderSize |
以字节为单位指定与 HTTP 响应关联的响应行和标头的最大允许大小。这与写入的字节数进行比较,因此包括行终止符和空格,以及状态行、标头名称和标头值。如果未指定,此属性将设置为 |
maxKeepAliveRequests |
在服务器关闭连接之前,可以通过管道传输的最大 HTTP 请求数。将此属性设置为 1 将禁用 HTTP/1.0 保持活动,以及 HTTP/1.1 保持活动和管道传输。将其设置为 -1 将允许无限数量的管道传输或保持活动的 HTTP 请求。如果未指定,此属性将设置为 100。 |
maxSwallowSize |
对于中止的上传,Tomcat 将吞咽的最大请求正文字节数(不包括传输编码开销)。中止的上传是指 Tomcat 知道请求正文将被忽略,但客户端仍发送它。如果 Tomcat 不吞咽正文,客户端不太可能看到响应。如果未指定,将使用 2097152(2 MiB)的默认值。小于零的值表示不应强制执行任何限制。 |
maxThreads |
此连接器创建的最大请求处理线程数,因此决定了可同时处理的最大请求数。如果未指定,此属性将设置为 200。如果此连接器关联了执行器,此属性将被忽略,因为连接器将使用执行器而不是内部线程池执行任务。请注意,如果配置了执行器,此属性设置的任何值都将被正确记录,但将报告为 |
maxTrailerSize |
限制块状 HTTP 请求的最后一个块中的尾部标头的总长度。如果值为 |
minSpareThreads |
始终保持运行的最小线程数。这包括活动线程和空闲线程。如果未指定,将使用默认值 |
noCompressionUserAgents |
该值是一个正则表达式(使用 |
processorCache |
协议处理程序缓存 Processor 对象以提高性能。此设置规定了缓存这些对象的数量。 |
rejectIllegalHeader |
如果接收到包含非法标头名称或值的 HTTP 请求(例如标头名称不是令牌),此设置决定是否使用 400 响应拒绝请求( |
relaxedPathChars |
当在 URI 路径中使用时,HTTP/1.1 规范 要求某些字符进行 %nn 编码。遗憾的是,包括所有主流浏览器在内的许多用户代理都不符合此规范,并以未编码形式使用这些字符。为了防止 Tomcat 拒绝此类请求,可以使用此属性指定允许的附加字符。如果未指定,则不允许任何附加字符。该值可以是以下字符的任意组合: |
relaxedQueryChars |
当在 URI 查询字符串中使用时,HTTP/1.1 规范 要求某些字符进行 %nn 编码。遗憾的是,包括所有主流浏览器在内的许多用户代理都不符合此规范,并以未编码形式使用这些字符。为了防止 Tomcat 拒绝此类请求,可以使用此属性指定允许的附加字符。如果未指定,则不允许任何附加字符。该值可以是以下字符的任意组合: |
restrictedUserAgents |
该值是一个正则表达式(使用 |
server |
覆盖 http 响应的 Server 标头。如果设置,此属性的值将覆盖 Web 应用程序设置的任何 Server 标头。如果未设置,则使用应用程序指定的任何值。如果应用程序未指定值,则不设置 Server 标头。 |
serverRemoveAppProvidedValues |
如果为 |
SSLEnabled |
使用此属性在连接器上启用 SSL 流量。要在连接器上启用 SSL 握手/加密/解密,请将此值设置为 |
tcpNoDelay |
如果设置为 |
threadPriority |
JVM 中请求处理线程的优先级。默认值为 |
threadsMaxIdleTime |
如果执行程序中的线程数超过 |
throwOnFailure |
如果连接器在生命周期转换期间遇到异常,则应重新抛出异常还是记录异常?如果未指定,则使用默认值 |
useAsyncIO |
(布尔值)使用此属性可启用或禁用异步 IO API 的使用。默认值为 |
useKeepAliveResponseHeader |
(布尔值)使用此属性可启用或禁用 |
useVirtualThreads |
(布尔值)使用此属性可启用或禁用内部执行程序的虚拟线程使用。如果将执行程序与此连接器关联,则此属性将被忽略。默认值为 |
Java TCP 套接字属性
除了上面列出的通用连接器和 HTTP 属性外,NIO 和 NIO2 实现还支持以下 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 等效于将其设置为 |
socket.soLingerTime |
(int)套接字 so linger 选项(SO_LINGER)的以秒为单位的值。这相当于标准属性 connectionLinger。此属性和 |
socket.soTimeout |
这相当于标准属性 connectionTimeout。 |
socket.performanceConnectionTime |
(int)性能设置的第一个值。请参阅 套接字性能选项。所有三个性能属性都必须设置,否则将对所有三个属性使用 JVM 默认值。 |
socket.performanceLatency |
(int)性能设置的第二个值。请参阅 套接字性能选项。所有三个性能属性都必须设置,否则将对所有三个属性使用 JVM 默认值。 |
socket.performanceBandwidth |
(int)性能设置的第三个值。请参阅 套接字性能选项。所有三个性能属性都必须设置,否则将对所有三个属性使用 JVM 默认值。 |
socket.unlockTimeout |
(int)套接字解锁的超时时间。当连接器停止时,它将尝试通过向自身打开连接器来释放接受器线程。默认值为 |
NIO 特定配置
以下属性特定于 NIO 连接器。
属性 | 说明 |
---|---|
pollerThreadPriority |
(int)轮询线程的优先级。默认值为 |
selectorTimeout |
(int)轮询器在 select() 上超时的时间(以毫秒为单位)。此值很重要,因为连接清理是在同一线程上完成的,因此不要将此值设置得过高。默认值为 |
useSendfile |
(bool)使用此属性启用或禁用 sendfile 功能。默认值为 |
socket.directBuffer |
(bool)布尔值,表示是否使用直接 ByteBuffers 或 java 映射的 ByteBuffers。如果为 |
socket.directSslBuffer |
(bool)布尔值,表示是否为 SSL 缓冲区使用直接 ByteBuffers 或 java 映射的 ByteBuffers。如果为 |
socket.appReadBufSize |
(int)在 Tomcat 中打开的每个连接都与一个读取 ByteBuffer 相关联。此属性控制此缓冲区的大小。默认情况下,此读取缓冲区的大小为 |
socket.appWriteBufSize |
(int)Tomcat 中打开的每个连接都与一个写入 ByteBuffer 关联。此属性控制此缓冲区的大小。默认情况下,此写入缓冲区大小为 |
socket.bufferPool |
(int)NIOx 连接器使用一个名为 NioXChannel 的类,该类包含链接到套接字的元素。为了减少垃圾回收,NIOx 连接器会缓存这些通道对象。此值指定此缓存的大小。默认值为 |
socket.bufferPoolSize |
(int)NioXChannel 池也可以基于大小,而不是基于使用的对象。如果 bufferPool 不为 -2,则不会使用此值。 |
socket.processorCache |
(int)Tomcat 将缓存 SocketProcessor 对象以减少垃圾回收。整数值指定最多在缓存中保留多少个对象。默认值为 |
socket.eventCache |
(int)Tomcat 将缓存 PollerEvent 对象以减少垃圾回收。整数值指定最多在缓存中保留多少个对象。默认值为 |
unixDomainSocketPath |
在支持的情况下,此连接器将创建并等待传入连接的 Unix 域套接字的路径。指定此项后,可以省略其他强制性的 |
unixDomainSocketPathPermissions |
在支持的情况下,将应用于上面用 |
useInheritedChannel |
(布尔值)定义此连接器是否应继承 inetd/systemd 网络套接字。只有一个连接器可以继承网络套接字。此选项可用于在向 systemd 超级守护进程的端口发出连接请求后自动启动 Tomcat。默认值为 |
NIO2 特定配置
以下属性特定于 NIO2 连接器。
属性 | 说明 |
---|---|
useSendfile |
(bool)使用此属性启用或禁用 sendfile 功能。默认值为 |
socket.directBuffer |
(bool)布尔值,表示是否使用直接 ByteBuffers 或 java 映射的 ByteBuffers。如果为 |
socket.directSslBuffer |
(bool)布尔值,表示是否为 SSL 缓冲区使用直接 ByteBuffers 或 java 映射的 ByteBuffers。如果为 |
socket.appReadBufSize |
(int)在 Tomcat 中打开的每个连接都与一个读取 ByteBuffer 相关联。此属性控制此缓冲区的大小。默认情况下,此读取缓冲区的大小为 |
socket.appWriteBufSize |
(int)Tomcat 中打开的每个连接都与一个写入 ByteBuffer 关联。此属性控制此缓冲区的大小。默认情况下,此写入缓冲区大小为 |
socket.bufferPool |
(int)NIO2 连接器使用一个名为 Nio2Channel 的类,该类保存链接到套接字的元素。为了减少垃圾回收,NIO2 连接器会缓存这些通道对象。此值指定此缓存的大小。默认值为 |
socket.processorCache |
(int)Tomcat 将缓存 SocketProcessor 对象以减少垃圾回收。整数值指定最多在缓存中保留多少个对象。默认值为 |
嵌套组件
Tomcat 支持服务器名称指示 (SNI)。这允许将多个 SSL 配置与单个安全连接器关联,其中任何给定连接使用的配置由客户端请求的主机名决定。为了实现此目的,添加了SSLHostConfig元素,该元素可用于定义其中一个配置。任何数量的SSLHostConfig都可以嵌套在Connector中。同时,还添加了对将多个证书与单个SSLHostConfig关联的支持。因此,每个 SSL 证书都配置在SSLHostConfig中的Certificate元素中。有关详细信息,请参阅下面的 SSL 支持部分。
当 OpenSSL 提供 TLS 实现时,一个或多个 OpenSSLConfCmd 元素可以嵌套在 OpenSSLConf 元素内,以通过 OpenSSL 的 SSL_CONF
API 配置 OpenSSL。一个 OpenSSLConf 元素可以嵌套在 SSLHostConfig 元素中。有关更多信息,请参阅下面的 SSL 支持部分
特殊功能
HTTP/1.1 和 HTTP/1.0 支持
此 Connector 支持 HTTP/1.1 协议的所有必需功能,如 RFC 7230-7235 中所述,包括持久连接、流水线、期望和分块编码。如果客户端仅支持 HTTP/1.0 或 HTTP/0.9,Connector 也会优雅地回退以支持此协议。无需特殊配置即可启用此支持。Connector 还支持 HTTP/1.0 保持活动状态。
RFC 7230 要求 HTTP 服务器始终以其声称支持的最高 HTTP 版本开始其响应。因此,此 Connector 始终在其响应的开头返回 HTTP/1.1
。
HTTP/2 支持
通过 HTTP 升级 (h2c) 和直接 HTTP/2 (h2c) 连接为 TLS (h2) 提供 HTTP/2 支持。要为 HTTP 连接启用 HTTP/2 支持,以下 UpgradeProtocol 元素必须嵌套在 Connector 中,className 属性为 org.apache.coyote.http2.Http2Protocol
。
<Connector ... >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
</Connector>
其他配置属性可用。有关详细信息,请参阅 HTTP/2 升级协议 文档。
代理支持
当 Tomcat 在代理服务器后面运行时,可以使用 proxyName
和 proxyPort
属性。这些属性修改了调用 request.getServerName()
和 request.getServerPort()
方法的 Web 应用程序返回的值,这些方法通常用于为重定向构造绝对 URL。如果不配置这些属性,则返回的值将反映从代理服务器接收连接时的服务器名称和端口,而不是客户端将原始请求定向到的服务器名称和端口。
有关更多信息,请参阅 代理支持操作指南。
Unix 域套接字支持
当使用 unixDomainSocketPath
属性时,支持 Unix 域套接字的连接器将绑定到给定路径处的套接字。
对于 Java 16 及更高版本的使用者,NIO 连接器中提供了支持。
套接字路径是为所有用户创建的,具有读写权限。要保护此套接字,请将其放在具有适当权限的目录中,并根据需要进行适当配置以限制访问。或者,在支持 posix 权限的平台上,可以使用 unixDomainSocketPathPermissions
选项直接设置套接字上的权限。
Tomcat 将在服务器关闭时自动移除套接字。如果套接字已存在,启动将失败。管理员必须在验证套接字尚未被现有 Tomcat 进程使用后小心移除套接字。
可以使用 curl
命令行客户端的 --unix-socket
选项和 Apache HTTP 服务器的 mod_proxy
模块中的 Unix 域套接字支持来访问 Unix 域套接字。
SSL 支持
您可以通过将 SSLEnabled
属性设置为 true
来为该 Connector 的特定实例启用 SSL 支持。
您还需要将 scheme
和 secure
属性分别设置为值 https
和 true
,以将正确的信息传递给 servlet。
NIO 和 NIO2 连接器使用 JSSE Java SSL 实现或 OpenSSL 实现。尽可能为 JSSE 和 OpenSSL 使用通用的配置属性。
每个安全连接器必须至少定义一个 SSLHostConfig。SSLHostConfig 元素的名称必须唯一,其中一个必须与 Connector 的 defaultSSLHostConfigName
属性匹配。
每个 SSLHostConfig 必须反过来至少定义一个 Certificate。Certificate 的类型必须唯一。
除了 Servlet 规范第 3.10 节中定义的标准 TLS 相关请求属性外,Tomcat 还支持许多其他 TLS 相关属性。可以在 SSLSupport Javadoc 中找到完整列表。
有关更多信息,请参阅 SSL 配置操作指南。
SSL 支持——SSLHostConfig
属性 | 说明 |
---|---|
certificateRevocationListFile |
包含证书颁发机构的连接证书吊销列表的文件的名称。格式为 PEM 编码。如果未定义,则不会根据证书吊销列表检查客户端证书(除非使用基于 OpenSSL 的连接器并且定义了 certificateRevocationListPath)。相对路径将针对 |
certificateRevocationListPath |
仅限 OpenSSL。 包含证书颁发机构的证书吊销列表的目录的名称。格式为 PEM 编码。相对路径将针对 |
certificateVerification |
如果您希望 SSL 栈在接受连接之前从客户端要求有效的证书链,则设置为 |
certificateVerificationDepth |
验证客户端证书时允许的最大中间证书数。如果未指定,将使用默认值 10。 |
caCertificateFile |
仅限 OpenSSL。 包含受信任证书颁发机构的连接证书的文件名称。格式为 PEM 编码。 |
caCertificatePath |
仅限 OpenSSL。 包含受信任证书颁发机构的证书的目录名称。格式为 PEM 编码。 |
ciphers |
使用 OpenSSL 语法启用的密码。请参阅 OpenSSL 文档以了解支持的密码和语法列表。或者,可以使用使用标准 OpenSSL 密码名称或标准 JSSE 密码名称的以逗号分隔的密码列表。 不同版本的 OpenSSL 可能对同一密码字符串进行不同的解释。例如, 将仅使用 SSL 实现支持的密码。当连接器启动时,从非默认密码字符串派生的且不受 SSL 实现支持的列表中的任何密码都将以 如果未指定,将使用默认值(使用 OpenSSL 表示法) 请注意,默认情况下,定义密码的顺序被视为首选项顺序。请参阅 |
disableCompression |
仅限 OpenSSL。 配置是否禁用压缩。默认值为 |
disableSessionTickets |
仅限 OpenSSL。 如果设置为 |
honorCipherOrder |
设置为 |
hostName |
SSL 主机名。这应该是完全限定域名(例如 |
insecureRenegotiation |
仅限 OpenSSL。 配置是否允许不安全的重新协商。默认值为 |
keyManagerAlgorithm |
仅限 JSSE。 要使用的 |
protocols |
与客户端通信时要支持的协议名称。这应该是以下任一组合的列表
列表中的每个令牌都可以加上加号 (“+”) 或减号 (“-” ) 前缀。加号添加协议,减号从当前列表中删除它。列表从空列表开始构建。 令牌 请注意,仅当使用实现 请注意,对于基于 OpenSSL 的安全连接器,将忽略 请注意, 如果未指定,将使用 |
revocationEnabled |
仅限 JSSE。 JSSE 提供程序是否应启用证书吊销检查?如果设置了 certificateRevocationListFile,则忽略此属性,并且始终启用吊销检查。此属性旨在启用已通过其他方式为当前 JSSE 提供程序配置的吊销检查。如果未指定,则使用 |
sessionCacheSize |
会话缓存中要保留的 SSL 会话数。指定 |
sessionTimeout |
在创建 SSL 会话后,其超时的时间(以秒为单位)。指定 |
sslProtocol |
仅限 JSSE。 要使用的 SSL 协议(单个值可能启用多个协议 - 有关详细信息,请参阅 JVM 文档)。如果未指定,默认值为 |
trustManagerClassName |
仅限 JSSE。 用于验证客户端证书的自定义信任管理器类的名称。该类必须具有零参数构造函数,还必须实现 |
truststoreAlgorithm |
仅限 JSSE。 用于信任库的算法。如果未指定,将使用 |
truststoreFile |
仅限 JSSE。 用于验证客户端证书的信任库文件。默认值是 |
truststorePassword |
仅限 JSSE。 访问信任库的密码。默认值是 |
truststoreProvider |
仅限 JSSE。 用于服务器证书的信任库提供程序的名称。默认值是 |
truststoreType |
仅限 JSSE。 用于信任库的密钥库类型。默认值为 |
SSL 支持——证书
属性 | 说明 |
---|---|
certificateFile |
包含服务器证书的文件的名称。格式为 PEM 编码。相对路径将针对 除了证书之外,该文件还可以包含可选元素 DH 参数和/或用于临时密钥的 EC 曲线名称,分别由 除非指定了 certificateKeystoreFile,否则此属性是必需的。 |
certificateChainFile |
包含与所使用的服务器证书关联的证书链的文件的名称。格式为 PEM 编码。相对路径将针对 用于 Tomcat 的证书链不应将其服务器证书作为其第一个元素。 请注意,在对不同类型使用多个证书时,它们都必须使用相同的证书链。 |
certificateKeyAlias |
仅限 JSSE。 用于密钥库中服务器密钥和证书的别名。如果未指定,则将使用从密钥库中读取的第一个密钥。从密钥库中读取密钥的顺序取决于实现。密钥可能不会按照添加到密钥库中的顺序从密钥库中读取。如果密钥库中存在多个密钥,则强烈建议配置 keyAlias 以确保使用正确的密钥。 |
certificateKeyFile |
包含服务器私钥的文件的名称。格式为 PEM 编码。默认值为 certificateFile,在这种情况下,证书和私钥都必须在此文件中(不推荐)。相对路径将针对 |
certificateKeyPassword |
用于从指定文件中访问与服务器证书关联的私钥的密码。 如果未指定,则 JSSE 的默认行为是使用 certificateKeystorePassword。对于 OpenSSL,默认行为是不使用密码,但 OpenSSL 会在需要时提示输入密码。 |
certificateKeyPasswordFile |
用于从指定文件中访问与服务器证书关联的私钥的密码文件。此属性优先于certificateKeyPassword。 如果未指定,JSSE 的默认行为是使用 certificateKeystorePasswordFile。对于 OpenSSL,默认行为是不使用密码(文件),但 OpenSSL 会在需要时提示输入密码。 |
certificateKeystoreFile |
仅限 JSSE。 已存储要加载的服务器证书和密钥的密钥库文件的路径名。默认情况下,路径名为运行 Tomcat 的用户的操作系统主目录中的文件 除非指定了 certificateFile,否则此属性是必需的。 |
certificateKeystorePassword |
仅限 JSSE。 用于访问包含服务器私钥和证书的密钥库的密码。如果未指定,将使用默认值 |
certificateKeystorePasswordFile |
仅限 JSSE。 用于访问包含服务器私钥和证书的密钥库的密码文件。此属性优先于 certificateKeystorePassword。 |
certificateKeystoreProvider |
仅限 JSSE。 用于服务器证书的密钥库提供程序的名称。如果未指定,将使用系统属性 |
certificateKeystoreType |
仅限 JSSE。 用于服务器证书的密钥库文件类型。如果未指定,将使用系统属性 |
type |
证书类型。这用于识别与证书兼容的密码。它必须是 |
SSL 支持——连接器——NIO 和 NIO2
启用 APR/native 时,连接器将默认通过 JSSE 使用 OpenSSL,这可能比 JSSE Java 实现更优化,具体取决于所使用的处理器,并且可以与许多商业加速器组件互补。
以下 NIO 和 NIO2 SSL 配置属性不特定于虚拟主机,因此必须在连接器上进行配置。
属性 | 说明 |
---|---|
sniParseLimit |
为了实现 SNI 支持,Tomcat 必须解析在新 TLS 连接上接收到的第一个 TLS 消息(客户端 hello),以提取请求的服务器名称。消息需要进行缓冲,以便可以将其传递给 JSSE 实现以进行正常的 TLS 处理。理论上,第一个消息可能非常大,但实际上通常只有几百个字节。此属性设置 Tomcat 将缓冲的最大消息大小。如果消息超过此大小,则将配置连接,就像客户端没有指示服务器名称一样。如果未指定,将使用默认值 |
sslImplementationName |
要使用的 SSL 实现的类名。如果未指定且未安装 tomcat-native 库,则将使用默认值 |
SSL 支持——OpenSSL 的 SSL_CONF API
当 OpenSSL 提供 TLS 实现时,可以在 OpenSSLConf 元素内嵌一个或多个 OpenSSLConfCmd 元素,以通过 OpenSSL 的 SSL_CONF
API 配置 OpenSSL。单个 OpenSSLConf 元素可以嵌套在 SSLHostConfig 元素中。
可用的配置文件命令集取决于所使用的 OpenSSL 版本。有关受支持的命令名称和值的列表,请参阅 OpenSSL 的 SSL_CONF_cmd(3) 手册页中的受支持的配置文件命令部分。一些配置文件命令可以用作 SSLHostConfig 属性的替代项。建议仅在无法使用 SSLHostConfig 属性配置功能时才使用配置文件命令。
OpenSSLConf 元素不支持任何属性。
OpenSSLConfCmd 元素支持以下属性。
属性 | 说明 |
---|---|
名称 |
配置文件命令的名称。 |
值 |
用于配置文件命令的值。 |
密钥存储类型
除了标准密钥库类型(JKS 和 PKCS12)外,大多数 Java 运行时还支持其他密钥库类型,例如 Windows-ROOT、Windows-My、DKS 以及硬件安全模块。通常,要在 Tomcat 中将这些其他密钥库类型与 TLS 连接器一起使用
- 将 certificateKeystoreType 和/或 truststoreType Connector 属性(视情况而定)设置为必要的类型
- 如果需要配置文件,请将 certificateKeystoreFile 和/或 truststoreFile Connector 属性(视情况而定)设置为指向该文件
- 如果不需要配置文件,则几乎肯定需要将 certificateKeystoreFile 和/或 truststoreFile Connector 属性(视情况而定)显式设置为一个空字符串("")
- 如果需要密码,请将 certificateKeystorePassword 和/或 truststorePassword Connector 属性(视情况而定)设置为所需的密码
- 如果不需要密码,则几乎肯定需要将 certificateKeystorePassword 和/或 truststorePassword Connector 属性(视情况而定)显式设置为一个空字符串("")
密钥库实现中的差异,加上 Tomcat 在后台进行的密钥库操作以允许 JSSE 和 OpenSSL 配置样式之间的互操作性,意味着某些密钥库可能需要稍微不同的配置。始终可以从 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 |