Tomcat使用APR和不使用APR的单向SSL配置

单向SSL的概念:

客户端向服务器发送消息,服务器接到消息后,用服务器端的密钥库中的私钥对数据进行加密,然后把加密后的数据和服务器端的公钥一起发送到客户端,客户端用服务器发送来的公钥对数据解密,然后在用传到客户端的服务器公钥对数据加密传给服务器端,服务器用私钥对数据进行解密,这就完成了客户端和服务器之间通信的安全问题,但是单向认证没有验证客户端的合法性。

不使用apr情况:

(1)产生密钥库

keytool-genkeypair-aliastomcat-keyalgRSA-keysize1024-validity365-keystore/usr/local/apache-tomcat-6.0.18/keystore

(2)在Connector上配置密钥库

<Connectorport="9906"protocol="HTTP/1.1"SSLEnabled="true"

maxThreads="150"scheme="https"secure="true"

clientAuth="false"sslProtocol="TLS"keystoreFile="/usr/local/apache-tomcat-6.0.18/conf/keystore"keystorePass="123456"/>

使用apr情况:

(1)产生密钥库

opensslgenrsa-outrsa-private-key.pem1024

opensslreq-new-x509-nodes-sha1-days365-keyrsa-private-key.pem-outself-signed-cert.pem

(2)在Connector上配置密钥库

<Connectorport="9906"protocol="HTTP/1.1"SSLEnabled="true"

maxThreads="150"scheme="https"secure="true"

clientAuth="false"sslProtocol="TLSv1"

SSLCertificateKeyFile="/usr/local/apache-tomcat-6.0.18/rsa-private-key.pem"

SSLCertificateFile="/usr/local/apache-tomcat-6.0.18/self-signed-cert.pem"/>

注意:

如果connector中未指定protocol="org.apache.coyote.http11.Http11Protocol"在使用apr时,按上述配置会出错,因为不同类型的connector的配置属性不同

java.lang.Exception:NoCertificatefilespecifiedorinvalidfileformat

atorg.apache.tomcat.jni.SSLContext.setCertificate(NativeMethod)

atorg.apache.tomcat.util.net.AprEndpoint.init(AprEndpoint.java:684)

atorg.apache.coyote.http11.Http11AprProtocol.init(Http11AprProtocol.java:107)

atorg.apache.catalina.connector.Connector.initialize(Connector.java:1058)

atorg.apache.catalina.core.StandardService.initialize(StandardService.java:677)

atorg.apache.catalina.core.StandardServer.initialize(StandardServer.java:795)

atorg.apache.catalina.startup.Catalina.load(Catalina.java:530)

atorg.apache.catalina.startup.Catalina.load(Catalina.java:550)

atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)

atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

atjava.lang.reflect.Method.invoke(Method.java:597)

atorg.apache.catalina.startup.Bootstrap.load(Bootstrap.java:260)

atorg.apache.catalina.startup.Bootstrap.main(Bootstrap.java:412)

加上protocol="org.apache.coyote.http11.Http11Protocol"就好了或者使用上述的apr配置

相关推荐