Tomcat 7 HTTP 链接器

0 摘要

本文尝试翻译Tomcat官方文档Apache Tomcat 7链接器,不足之处敬请指正。该文先介绍了Tomcat7 HTTP链接器的属性,包括:公共属性、标准实现、Java TCP套接字属性、BIO的具体配置、NIO的具体配置、APR/Native的具体配置。接着介绍了Tomcat的特殊功能,包括:HTTP/1.1和HTTP/1.0的支持、代理支持、SSL支持以及链接器的比较。html

1 介绍

HTTP 链接器元素表明了支持HTTP/1.1协议的链接器组件,使Catalina成为一个可以执行servlet和JSP页面的独立的Web服务器。一个HTTP 链接器组件的实例监听服务器上一个特定的TCP端口号上的链接。一个或多个这样的链接器能够配置成一个单一Service的一部分,每一个转发到相关联的Engine 处理请求,并建立响应。java

若是你要配置的链接器,用于链接到Web服务器使用的的AJP协议(如 mod_jk的1.2.x的链接器适用于Apache 1.3),请参阅 AJPConnector文档。web

每一个进入的请求须要一个线程处理。若是接收到比当前可用的请求处理线程能够处理更多的并发请求,将建立额外的线程直到达到所配置的最大线程数(maxThreads值)。若是有超过处理能力的更多的请求到来,它们将被堆积在链接器建立的服务器套接字内,直到达到配置中acceptCount 的最大值。任何更多的同步请求将收到“链接被拒绝”的错误,直到有空闲线程来处理它们。正则表达式

2 属性

2.1 公共属性

全部的链接器实现 支持如下属性:算法

属性apache

描述api

allowTrace数组

一个布尔值,它能够用来启用或禁用跟踪HTTP方法。若是没有指定,该属性设置为false。浏览器

asyncTimeout缓存

默认超时时间以毫秒为单位的异步请求。若是没有指定,该属性被设置为10000(10秒)。

enableLookups

若是你想request.getRemoteHost()的调用 执行,以便返回的远程客户端的实际主机名的DNS查询,则设置为true。设置为false跳过DNS查找,并返回字符串形式的IP地址(从而提升性能)。默认状况下,禁用DNS查找。

maxHeaderCount

容器容许的请求头字段的最大数目。请求中包含比指定的限制更多的头字段将被拒绝。值小于0表示没有限制。若是没有指定,默认设置为100。

maxParameterCount

将被容器自动解析的最大数量的参数和值对(GET加上POST)。参数值对超出此限制将被忽略。值小于0表示没有限制。若是没有指定,默认为10000。请注意, FailedRequestFilter 过滤器能够用来拒绝达到了极限值的请求。

maxPostSize

将被容器以FORM URL参数形式处理的最大长度(以字节为单位)的POST。经过设置此属性的值小于或等于0能够禁用该限制。若是没有指定,该属性被设置为2097152(2兆字节)。

maxSavePostSize

将被容器在FORM或CLIENT-CERT认证中保存/缓冲的POST的最大尺寸(以字节为单位)。对于这两种类型的身份验证,在用户身份验证以前,POST将被保存/缓冲。对于POST CLIENT-CERT认证,处理该请求的SSL握手和缓冲清空期间,POST将被缓存。对于Form认证,POST将被保存,同时用户将被重定向到登录表单。POST将被一直保留直到用户成功认证或者认证请求关联的会话超时。将此属性设置为-1能够禁用此限制。将此属性设置为0,POST数据在身份验证过程当中将不被保存。若是没有指定,该属性设置为4096(4千字节)。

parseBodyMethods

以逗号分隔的HTTP方法列表,经过方法列表,等同于POST方法,request 正文将被解析成请求参数。这在RESTful应用程序要支持以POST式的语义解析PUT请求中是很是有用的。须要注意的是设置其余值(不是POST)会致使Tomcat的行为违反servlet规范的目的。在这里为了符合HTTP规范明确禁止HTTP方法TRACE。默认值是POST

port

TCP端口号,链接器利用该端口号将建立一个服务器套接字,并等待传入的链接。你的操做系统将只容许一个服务器应用程序在一个特定的IP地址侦听特定的端口号。若是使用特殊值0(零),则Tomcat将为链接器随机选择一个空闲的端口。这是一般只用在嵌入式和测试应用程序。

protocol

设置协议来处理传入流量。默认值是 HTTP/1.1,将使用自动切换机制来选择阻塞的基于Java的链接器或APR /native 为基础的链接器。若是PATH(Windows)或LD_LIBRARY_PATH(在大多数Unix系统)的环境变量包含在Tomcat的本地库里,APR /native 链接器将被使用。若是在本地库中没法找到,阻断基于Java的链接器将被使用。须要注意的是使用HTTPS比Java链接器与APR /native 链接器有不一样的设置。一个明确的协议,而不是依靠上述自动切换机构,可用如下值:

org.apache.coyote.http11.Http11Protocol -阻塞式的Java链接器org.apache.coyote.http11.Http11NioProtocol -不阻塞Java链接器org.apache.coyote.http11.Http11AprProtocol -的APR / native 链接器

 也可使用的用户自定义的实现。看一看在咱们的链接器比较图。Java链接器,HTTP和HTTPS,配置是相同的。 APR链接器和APR特定的SSL设置的更多信息,请访问APR文档

proxyName

若是这个链接正在使用的代理服务器配置,配置该属性指定的服务器的名称,能够调用request.getServerName()返回。有关更多信息,请参见代理支持

proxyPort

若是这个链接正在使用的代理服务器配置,配置该属性指定服务器端口,能够调用request.getServerPort()返回。有关更多信息,请参见代理支持

redirectPort

若是该链接器支持非SSL请求,而且接收到的请求为知足安全约束须要SSL传输, Catalina 将自动将请求重定向到指定的端口号。

scheme

将该属性设置为你想调用request.getScheme()返回的协议的名称。例如,对于SSL链接器,你会将此属性设置为“HTTPS ”。默认值是“ HTTP ”。

secure

若是你想调用request.isSecure()收到此链接器的请求返回true,请该该属性设置为true。您但愿SSL链接器或非SSL链接器接收数据经过一个SSL加速器,像加密卡,SSL设备,甚至一个web服务器。默认值是假的

URIEncoding

这将指定使用的字符编码,来解码URI字符。若是没有指定,ISO-8859-1将被使用。

useBodyEncodingForURI

这指定是否应该用于URI查询参数,而不是使用URIEncoding contentType中指定的编码。此设置兼容性Tomcat 4.1.x版(该版在contentType中指定编码,或者使用request.setCharacterEncoding的方法显式设置(参数为URL传来的值)。默认值false。

useIPVHosts

将该属性设置为true会致使Tomcat使用收到请求的IP地址,来肯定将请求发送到哪一个主机。默认值是假的

xpoweredBy

将此属性设置为true会致使Tomcat支持使用Servlet规范的通知,(在规范中推荐使用头字段)。默认值是假的

2.2 标准实现

除了上面列出的常见的链接器属性,标准的HTTP链接器(BIONIOAPR/native)都支持如下属性。 

属性

描述

acceptCount

当全部可能的请求处理线程都在使用时,传入链接请求的最大队列长度。当队列满时收到的任何请求将被拒绝。默认值是100

acceptorThreadCount

用于接受链接的线程的数量。在一个多CPU的机器上,增长该值,虽然你可能不会真正须要超过2个。此外,有不少非保持活动链接,您可能须要增长这个值。默认值是 1

acceptorThreadPriority

接收器线程的优先级。该线程用来接受新的链接。默认值是5java.lang.Thread.NORM_PRIORITY常量)。更多这个优先级是什么意思的详细信息,请查看java.lang.Thread的类的JavaDoc 

address 

对于拥有多个IP地址的服务器,该属性指定哪一个地址将被用于在指定端口上监听。默认状况下,该端口将被用于与服务器相关联的全部IP地址。

bindOnInit

控制链接器绑定时套接字的使用。缺省状况,当链接器被启动时套接字被绑定和当链接器被销毁时套接字解除绑定。若是设置为false,链接器启动时套接字被绑定,链接器中止时套接字解除绑定。

compressableMimeType

该值是一个被用于HTTP压缩的逗号分隔的MIME类型列表。默认值是text / html类型,为text / xmltext / plain

compression 

为了节省服务器带宽,链接器可使用HTTP/1.1 GZIP压缩。可接受的参数的值是“off ”(禁用压缩),“on ”(容许压缩,这会致使文本数据被压缩),“force ”(强制在全部的状况下压缩),或者一个整数值(这是至关于为“on”,但指定了输出以前被压缩的数据最小量)。若是不知道内容长度但被设置为“on”或更积极的压缩,输出的数据也将被压缩。若是没有指定,该属性被设置为

注意:这是使用压缩(节省您的带宽)和使用sendfile功能(节省你的CPU周期)之间的权衡。若是链接器支持sendfile功能,例如NIO链接,则使用sendfile将优先于压缩。症状是48 KB的静态文件将未压缩就发送。你能够以下文所述经过设置链接器的useSendfile属性来关闭sendfile,或在默认的conf/web.xml或者你的web应用的web.xml中配置DefaultServlet来改变sendfile的使用量阈值。

compressionMinSize

若是压缩被设置为“on”,那么该属性能够用于指定在输出以前被压缩的数据的最小量。若是未指定,此属性默认为“2048”

connectionLinger

链接器的套接字被关闭时的逗留秒数。若是没有指定,将使用默认的JVM

connectionTimeout 

在将提交的请求URI行呈现以后,链接器将等待接受链接的毫秒数。使用值-1表示没有超时(即无限)。默认值是6000060秒),但请注意,Tomcat的标准server.xml中,设置为20000(即20秒)。

connectionUploadTimeout

上传数据过程当中,指定的以毫秒为单位超时时间。只有在设置disableUploadTimeoutfalse有效。

disableUploadTimeout

此标志容许servlet容器在数据上传时使用不一样的链接超时,一般较长。若是没有指定,该属性被设置为true,禁用上传超时。

executor 

指向Executor元素的引用。若是这个属性被设置,而且被命名的executor存在,链接器将使用这个executor,而其余全部线程相关属性将被忽略。请注意共享的executor若是没有指定到一个链接器,则该链接器将使用一个私有的,内部的executor来提供线程池。

KeepAliveTimeout

此链接器在关闭链接以前将等待另外一个HTTP请求的毫秒数。默认值是使用已设置的connectionTimeout属性的值。使用值-1表示没有超时(即无限)。

maxConnections

在任何给定的时间服务器接受并处理的最大链接数。当这个数字已经达到了,服务器将不会接受任何链接,直到链接的数量降到低于此值。基于acceptCount的设置,操做系统可能仍然接受链接。默认值根据不一样的链接器类型而不一样。对于BIO,默认的是maxThreads的值,除非使用了Executor,在这种状况下默认值是executormaxThreads 。对于NIO的默认值是10000APR /native的默认值是8192

须要注意的是Windows系统的APR/native,所配置的值将减小到小于或等于maxConnections1024的倍数的最大值。这样作是出于性能方面的考虑。

若是设置的值-1maxConnections功能被禁用,并且链接数将不作计算。

maxHttpHeaderSize

请求和响应的HTTP头的(以字节为单位的)最大尺寸。若是没有指定,该属性被设置为81928 KB)。

maxKeepAliveRequests

HTTP请求最大长链接个数。将此属性设置为1,将禁用HTTP/1.0、以及HTTP/1.1的长链接。设置为-1,不由用。若是没有指定,该属性被设置为100

maxThreads 

最多同时处理的链接数,Tomcat使用线程来处理接收的每一个请求。这个值表示Tomcat可建立的最大的线程数。若是没有指定,该属性被设置为200。若是使用了execute将忽略此链接器的该属性,链接器将使用execute,而不是一个内部线程池来处理请求。

maxTrailerSize

限制一个分块的HTTP请求中的最后一个块的尾随标头的总长度。若是该值是-1,没有限制的被强加。若是没有指定,默认值是8192

minSpareThreads

始终保持运行最小线程数。若是没有指定,则默认为10

noCompressionUserAgents

该值是一个正则表达式(使用java.util.regex),匹配不该该使用压缩的HTTP客户端的用户代理标头。由于这些客户端,虽然他们宣称支持压缩功能,但实现不完整。默认值是一个空字符串(正则表达式匹配禁用)。

processorCache

协议处理器缓存Processor对象以提升性能。此设置规定了这些对象有多少能获得缓存。-1意味着无限制,默认为200。若是不使用Servlet 3.0的异步处理,一个好的默认是使用maxThreads设置。若是使用Servlet 3.0的异步处理,一个好的默认是使用maxThreads和最大预期的并发请求(同步和异步)的最大值中的较大值。

restrictedUserAgents

该值是一个正则表达式(使用java.util.regex),匹配用户代理头的HTTP浏览器将不能使用HTTP/1.1HTTP/1.0长链接,即便该浏览器宣称支持这些功能的。默认值是一个空字符串(正则表达式匹配禁用)。

server 

覆盖服务器的HTTP响应头。若是设置了这个属性的值将覆盖Web应用程序设置的Tomcat的默认头和任何服务器头。若是没有设置,应用程序指定的任何值将被使用。若是应用程序没有指定一个值,那么Apache-Coyote/1.1将被使用。除非你是偏执狂,你将再也不须要此功能。

socketBuffer

为套接字输出缓冲而提供的缓冲区的大小(以字节为单位)。-1能够被指定来禁止使用的缓冲区。默认状况下,一个9000个字节的缓冲区将被使用。

SSLEnabled 

在链接器上使用此属性来启用SSL加密传输。若是要打开SSL握手/加密/解密,请设置true。默认值是false。当设置这个值为true时,为了传递正确的request.getScheme()和 request.isSecure()到servlets,你须要设置schemesecure属性。更多信息请查看SSL支持

tcpNoDelay 

若是设置为trueTCP_NO_DELAY选项将被设置在服务器上的套接字上,在大多数状况下,这样能够提升性能。默认设置为true

threadPriority 

JVM中请求处理线程的优先级。默认值是5java.lang.Thread.NORM_PRIORITY常量值)。关于优先级的更多详细信息,请查看java.lang.Thread的类的JavaDoc 

2.3 Java TCP套接字的属性

除了上文列出的通用的链接器和HTTP属性,BIONIO实现还支持下面的JavaTCP套接字属性。

属性

描述

socket.rxBufSize

int)套接字接收缓冲区(SO_RCVBUF)大小(以字节为单位)。若是没有设置,JVM默认值将被使用。

socket.txBufSize

int)套接字发送缓冲区(SO_SNDBUF)大小(以字节为单位)。若是没有设置,JVM默认值将被使用。

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)。标准属性connectionLinger> = 0 的时候,至关于将此项设置为true。标准属性connectionLinger<0 的时候,至关于将此项设置为false。此属性和soLingerTime都必须被设置,不然JVM的预设值将被使用。

socket.soLingerTime

int)套接字延时关闭选项(SO_LINGER)秒数。这至关于标准属性connectionLinger。此属性和soLingerOn都必须被设置,不然JVM的预设值将被使用。

socket.soTimeout

至关于标准属性 connectionTimeout

socket.performanceConnectionTime

int)性能设置的第一个值。 全部这三个性能属性必须设置不然全部三个属性的JVM预设值将被使用,可查看套接字性能选项

socket.performanceLatency

int)性能设置的第二个值。 全部这三个性能属性必须设置不然全部三个属性的JVM预设值将被使用,可查看套接字性能选项

socket.performanceBandwidth

int)性能设置的第三个值。 全部这三个性能属性必须设置不然全部三个属性的JVM预设值将被使用,可查看套接字性能选项

socket.unlockTimeout

int)套接字解锁的超时时间。当一个链接器中止时,它会经过打开一个链接到自己的链接器来尝试释放acceptor 线程。默认值是250(以毫秒为单位)

2.4 BIO的具体配置

下面是BIO链接器的特定属性。

属性

描述

disableKeepAlivePercentage

为提升可扩展性,在长链接失效以前被使用的处理线程的百分比。小于0的值将被设为0,大于100的值将被设为100。若是没有指定,默认值是75

 2.5 NIO的具体配置

下面是NIO链接器的特定属性。

属性

描述

pollerThreadCount

int)用来处理轮询事件的线程的数量。在版本7.0.27及之前版本,默认值是每一个处理器1个。版本7.0.28的默认值是每一个处理器1个,但不超过2个。

当接受一个套接字,操做系统拥有全局的锁。因此超过2个线程的好处而迅速减少。有一个以上的线程是由于系统须要很是迅速地接受链接。但一般只要增长acceptCount值就能够解决这个问题。增长该值也多是有用的,当大量发送文件操做发生的时候。

pollerThreadPriority

int)轮询线程的优先级。默认值是5java.lang.Thread.NORM_PRIORITY常量值)。优先级的更多详细信息,能够查考java.lang.Thread类的JavaDoc 

selectorTimeout

int)选择轮询器select()的超时时间(以毫秒为单位)。这个值很是重要,由于链接清理工做也是在同一个线程里的,因此不要将此值设置为一个很是高的。默认值是1000毫秒。

useComet

bool)是否容许Comet servlet。默认值是 true

useSendfile

bool)使用此属性来启用或禁用sendfile的能力。默认值是true

socket.directBuffer

bool)选择使用直接ByteBuffersJava映射的ByteBuffers。默认是false
当您使用直接ByteBuffers,请确保你分配适当的内存量给直接内存空间。在SunJDK中,配置如-XXMaxDirectMemorySize = 256M

socket.appReadBufSize

int)在Tomcat中每一个链接的开辟链接一个读ByteBuffer。此属性控制这个缓冲区的大小。默认状况下,这个读缓冲区大小为8192字节。对于较低的并发,你能够增长这个值以缓冲更多的数据。对于长链接数不少的状况,你须要下降这个数值或者增长堆大小。

socket.appWriteBufSize

int)在Tomcat中每一个链接的开辟链接一个写ByteBuffer。此属性控制这个缓冲区的大小。默认状况下,这个写缓冲区大小为8192字节。对于较低的并发,你能够增长这个值以缓冲更多的响应数据。对于长链接数不少的状况,你须要下降这个数值或者增长堆大小。
这里的默认值是至关低的,若是面对的不是几万并发链接,你应该增大该值。

socket.bufferPool

intNIO链接器使用NioChannel这个类来持有连接到一个套接字的元素。为了减小垃圾收集,NIO链接器缓存这些通道的对象。此值指定这个缓存的大小。默认值是500,表示缓存将持有500 NioChannel的对象。-1表示不限制缓存大小,0表示不缓存。

socket.bufferPoolSize

intNioChannel池,也能够是基于尺寸大小,而不是基于对象数的。该大小的计算以下:
NioChannel
的缓冲区大小=读取缓冲区大小+写入缓冲区大小
SecureNioChannel
的缓冲区大小=应用程序读取缓冲区大小+应用程序写入缓冲区的大小+网络读取缓冲区大小+网络写入缓冲区的大小

值(以字节为单位),默认值1024 * 1024 * 100 100MB)。

socket.processorCache

int)以减小垃圾收集,Tomcat缓存SocketProcessor对象。该值指定保持在缓存中最多有多少个对象。默认值是500-1表示不限制缓存大小,0表示不缓存。

socket.keyCache

int)以减小垃圾收集,Tomcat缓存KeyAttachment对象。该值指定保持在缓存中最多有多少个对象。默认值是500-1表示不限制缓存大小,0表示不缓存。

socket.eventCache

int)以减小垃圾收集,Tomcat缓存PollerEvent对象。该值指定保持在缓存中最多有多少个对象。默认值是500-1表示不限制缓存大小,0表示不缓存。

selectorPool.maxSelectors

int)以减小选择器的争用,在池中使用的选择器最大个数。命令行org.apache.tomcat.util.net.NioSelectorShared值设置为false时,使用此选项。默认值是200

selectorPool.maxSpareSelectors

int)以减小选择器的争用,在池中使用的最大备用选择器个数。当选择器返回到池中时,系统能够决定保留它或者让他垃圾回收。当org.apache.tomcat.util.net.NioSelectorShared 值设置为false时,使用此选项。默认值是-1(无限制)。

命令行选项

下面的命令行选项可用于NIO链接器:-Dorg.apache.tomcat.util.net.NioSelectorShared=true|false

 默认状况下是true。若是你想每一个线程使用一个选择器,将此值设置为false。当你将它设置为false,你能够经过使用selectorPool.maxSelectors属性控制选择器池的大小。

oomParachute

intNIO链接器实现了一个名叫parachuteOutOfMemoryError错误的策略。它拥有一个块的数据做为一个字节数组。在一个OOM的状况下,这个数据块被释放,并报告错误。这会给VM足够的空间来清理。oomParachute表明parachute(字节数组)的大小(以字节为单位)。默认值是 1024 * 10241MB)。请注意,这仅适用于关于Java堆空间的OOM错误,也不是绝对保证,你将可以恢复全部。若是你有一个Java堆以外OOM的,那么这个parachute也无济于事。

2.6 APR /Native 的具体配置

下面是APR/Native 链接器的特定属性。

属性

描述

deferAccept

在链接器的监听套接字上设置TCP_DEFER_ACCEPT标志。当操做系统支持TCP_DEFER_ACCEPT时默认值是true,不然它是false。

pollerSize

在一个给定的时间内,负责长链接轮询的轮询器可以持有的线程数。额外的链接将被立刻关闭。默认值是8192,与8192个长链接数一致。是maxConnections的一个代名词。

pollerThreadCount

用于轮询长链接的线程数。Windows系统默认选择,每一个线程管理的套接字数小于1024。对于Linux的默认值是1。更改Windows下的默认值可能有负面的性能影响。

pollTime

轮询调用持续的时间(以微秒为单位)。在某些状况下,下降该值将略微减小潜在的链接数,但随着增长的轮询调用会使用更多的CPU。默认值是2000(毫秒)。

sendfileSize

在给定时间内,负责异步发送静态文件的轮询器能够持有的套接字数。额外的链接将被立刻关闭,没有任何数据被发送(在客户端产生一个长度为零的文件)。请注意,在大多数状况下,的sendfile是一个马上返回的调用(被内核照顾的“同步”),并且sendfile轮询器将不会被使用,因此能够同时发送的静态文件的数量大于指定的值。默认值是1024。

sendfileThreadCount

服务于sendfile套接字的线程数。因为Windows系统默认选择,每一个线程管理的套接字小于1024。Linux系统的默认值是1。更改Windows系统下的默认值可能有负面的性能影响。

threadPriority

(int)接收器和轮询器线程的优先级。默认值是5(java.lang.Thread.NORM_PRIORITY常量值)。优先级的详细信息请查看java.lang.Thread类的JavaDoc 。

useComet

(bool)容许或禁止Comet servlet。默认值是 true。

useSendfile

(bool)使用此属性来启用或禁用sendfile的能力。默认值是true。

3 嵌套组件

这个时候没有。

4 特殊功能

4.1 HTTP/1.1和HTTP/1.0的支持

链接器支持在RFC 2616中描述的HTTP/1.1协议的全部必需功能,包括持久链接,管道,预期和分块编码所需的功能。若是客户端(一般是浏览器)只支持HTTP/1.0, 链接器将优雅地向下兼容以支持该协议。启用这种支持,没有特殊的配置要求。该链接器还支持HTTP/1.0长链接。

RFC 2616规定,HTTP服务器老是在它们响应的开头加上它们宣称支持的最高的HTTP版本。所以,此 链接器将老是在其响应开头返回HTTP/1.1。

4.2 代理支持

当Tomcat部署在代理服务器的后面的时候,proxyName和proxyPort属性能够被使用。这些属性修改web服务器调用的request.getServerName()和request.getServerPort() 方法的值,这是常常被用来构造重定向de 绝对路径的URL。若是不配置这些属性,返回的值将反映代理服务器接收链接的服务器名称和端口,而不是客户端定向原始请求的服务器名称和端口。

有关详细信息,请参阅 如何使用代理服务器支持

4.3 SSL支持

经过设置启用SSL属性为true,您能够启用SSL支持此链接器的特定实例 。

你还须要设置scheme 和secure  属性的值分别为https和true,传递正确的信息到servlet。

BIO与NIO链接器使用JSSE的SSL,而APR / native链接器使用OpenSSL。所以,除了使用不一样的属性来配置SSL的APR / native链接器外,还须要以不一样的格式提供密钥和证书。

有关详细信息,请参阅文档SSL怎么配置

4.3.1 SSL支持-BIO与NIO

BIO与NIO链接器使用下面的属性来配置SSL:

属性

描述

algorithm

使用的证书编码算法。默认 KeyManagerFactory.getDefaultAlgorithm()返回 Sun JVM的SunX509。IBM的JVM返回 IbmX509。对于其余厂商,请参阅JVM文档的默认值。

allowUnsafeLegacyRenegotiation

容许不安全的传统的TLS从新协商,它有可能容许暴露用户给CVE-2009-3555(处理会话重协商过程当中TLS实现存在错误,容许经过中间人攻击,注入任意明文到已存在的TLS会话中。)的状况发生。若是没有指定,默认设置为false。此属性只对不支持RFC 5746(代表伪密码套件TLS_EMPTY_RENEGOTIATION_INFO_SCSV的存在)的JVM有用。JRE / JDK 6update 22起,这是可用的。支持RFC 5746的从新谈判-包括支持不安全的传统从新谈判-是由JVM配置控制的。

ciphers

逗号分隔的这个套接字被容许使用的加密算法列表。默认状况下,在JVM的默认密码将被使用。请注意,这一般意味着,弱输出等级的密码将被包含在列表的可用密码中。密码被指定使用JSSE密码的命名约定。特殊值ALL ,将启用全部支持的密码。这将包括许多不安全。ALL仅用于测试目的。

clientAuth

若是在接受链接以前,你想让从客户端来的SSL协议栈须要一个有效的证书链则设置为true。若是你想让SSL协议栈须要一个客户端证书,设置为want,但若是没有提供将不会失败。设置为false值(这是默认的)将不须要证书链,除非客户端请求采用CLIENT-CERT认证的安全约束保护的资源。

clientCertProvider

当客户端证书信息的以表单形式而不是java.security.cert.X509Certificate实例形式提供时,须要转换以后才可使用,此属性控制哪一个JSSE提供者来执行转换。例如,它是关联AJP链接器,HTTP APR 链接器和 org.apache.catalina.valves.SSLValve。若是没有指定,默认的provider 将被使用。

crlFile

用来验证客户端证书的证书吊销列表。若是没有定义,将不核对证书吊销列表来检查客户端证书。

keyAlias

用于作key库中的服务器证书的别名。若是没有指定将使用在key库中读取的第一个key。

keypass

该密码用于访问指定的keystore文件的服务器证书。默认值是“changeit”。

keystoreFile

要加载的服务器证书存放的keystore文件的路径名。默认状况下,该文件的路径名是“ .keystore”,在操做系统中运行Tomcat的用户的home 目录。若是您的keystoreType不须要文件则能够将keystoreFile设置为“”(空字符串)。

keystorePass

该密码用于访问指定的keystore文件。默认值是keypass属性值。

keystoreProvider

被用于服务器证书的keystore 提供者的名称。若是未指定,将选择按优先顺序注册过的提供者列表的第一个支持keystoreType的提供者。

keystoreType

用于服务器证书的keystore文件的类型。若是没有指定,默认值是“JKS”。

sessionCacheSize

保持在session缓存中的SSL会话的数量。使用0到指定一个无大小限制的缓存。若是没有指定,默认值为0。

sessionTimeout

在建立一个SSL会话后它将超时的时间(以秒为单位)。使用0指定无限制超时。若是没有指定,默认为86400(24小时)。

sslEnabledProtocols

使用的SSL协议的列表。若是未指定,则使用JVM的默认设置。

sslImplementationName

使用的SSL实现的类名。若是未指定, 将使用默认的org.apache.tomcat.util.net.jsse.JSSEImplementation它封装了JVM的默认JSSE提供者。须要注意的是,JVM能够被配置为使用不一样的JSSE提供者做为默认值。

sslProtocol

使用的SSL协议版本。若是没有指定,默认是“ TLS”。

trustManagerClassName

一个用来验证客户端证书的自定义信任管理类的名称。这个类必须有一个无参数的构造并且必须实现javax.net.ssl.X509TrustManager。若是设置了这个属性,trust store相关属性将被忽略。

trustMaxCertLength

验证客户端证书时,容许的中间证书的最大数量。若是没有指定,默认值5将被使用。

truststoreAlgorithm

该算法用于truststore。若是没有指定,将使用由javax.net.ssl.TrustManagerFactory.getDefaultAlgorithm()返回 的默认值。

truststoreFile

用来验证客户端证书的trust store文件。默认值是javax.net.ssl.trustStore系统属性。若是既没有此属性又没有默认的系统属性设置,则不配置trust store。

truststorePass

访问trust store的密码。默认值是javax.net.ssl.trustStorePassword系统属性。若是该属性是空的,没有trust store密码将被配置。若是指定了一个无效的trust store密码,将会记录警告,并试图没有密码访问trust store,这将跳过验证trust store的内容。

truststoreProvider

用于服务器证书的truststore提供者的名称。默认值是javax.net.ssl.trustStoreProvider系统属性。若是该属性为空,将使用keystoreProvider做为默认值。若是既没有这个属性,也没有默认的keystoreProvider系统属性,按优先顺序遍历已注册提供者列表,选择使用支持 truststoreType第一个提供者。

truststoreType

用于trust store的key store的类型。默认值是javax.net.ssl.trustStoreType系统属性。若是该属性为空,则keystoreType做为默认值。

4.3.2 SSL支持 - APR /Native

APR / Native启用时,HTTPS链接器将使用一个套接字来轮询长链接,以提升服务器的可扩展性。它还使用OpenSSL,这可能比JSSE更优化(取决于所使用的处理器),而且能够补充许多商业加速器组件。不一样于HTTP链接器,HTTPS链接器不能使用的sendfile优化静态文件的处理。

HTTPS APR / Native链接器具备HTTP APR / Native链接器相同的属性,而且增长了OpenSSL的特殊属性。使用OpenSSL的全部详细资料,请参阅OpenSSL资料和许多可用的书籍(请参阅官方OpenSSL的网站)。SSL特有的APR /Native链接器的属性:

属性

描述

SSLCACertificateFile

查看mod_ssl的文档

SSLCACertificatePath

查看mod_ssl的文档

SSLCARevocationFile

查看mod_ssl的文档

SSLCARevocationPath

查看mod_ssl的文档

SSLCertificateChainFile

查看mod_ssl的文档

SSLCACertificateFile

包含受信任的证书颁发机构的拼接的证书文件的名称。是PEM编码的格式。

SSLCACertificatePath

包含的受信任的证书颁发机构的证书目录名称。是PEM编码的格式。

SSLCARevocationFile

包含证书颁发机构的拼接的证书吊销列表文件的名称。是PEM编码的格式。

SSLCARevocationPath

包含的证书颁发机构的拼接的证书撤销列表的目录的名称。是PEM编码的格式。

SSLCertificateChainFile

包含链接的certifcates造成的资格证书链的服务器证书的证书颁发机构的的文件的名称。是PEM编码的格式。

SSLCertificateFile

包含服务器证书的文件的名称。是PEM编码的格式。

SSLCertificateKeyFile

包含服务器私钥的文件名称。是PEM编码的格式。默认值是SSLCertificateFile的值,在这种状况下,证书和私钥都必须在这个文件中(不推荐)。

SSLCipherSuite

可用于与客户端进行通讯的密码。默认值是“ALL”,其余可接受的值是以“:”分隔的一组密码,(请参阅OpenSSL的文档列表中支持的密码)。

SSLHonorCipherOrder

设置为true(这是默认值)将强制服务器的密码规则(按照SSLCipherSuite设置),而不容许客户端选择密码。

SSLPassword

用于私有密钥加密的口令短语。若是没有提供“SSLPassword”时,回调函数将提示输入口令短语。

SSLProtocol

可被用来与客户端通讯的协议。默认值是all,这是等同的SSLv3 +的TLSv1,其余可接受的值是 SSLv2, SSLv3,TLSv1以及用加号链接起来的三个协议的任意组合。请注意,SSLv2协议 本质上是不安全的。

SSLVerifyClient

向客户端要求证书。默认值是“none”,这意味着客户端将不会有机会提交证书。其余可接受的值包括“optional”,“require”和“optionalNoCA”。

SSLVerifyDepth

客户端证书的最大验证深度。默认值是“10”。

4.4链接器的比较

下面是一个小的图表,显示了链接器如何区分。

Java Blocking Connector  BIO

Java Non Blocking Connector  NIO

APR/native Connector   APR


Classname

Http11Protocol

Http11NioProtocol

Http11AprProtocol

Tomcat Version

3.x onwards

6.x onwards

5.5.x onwards

Support Pollin

NO

YES

YES

Polling Size

N/A

maxConnections

maxConnections

Read HTTP Request

Blocking

Non Blocking

Blocking

Read HTTP Body

Blocking

Sim Blocking

Blocking

Write HTTP Response

Blocking

Sim Blocking

Blocking

Wait for next Request

Blocking

Non Blocking

Non Blocking

SSL Support

Java SSL

Java SSL

OpenSSL

SSL Handshake

Blocking

Non blocking

Blocking

Max Connections

maxConnections

maxConnections

maxConnections

相关文章
相关标签/搜索