首页 > 代码库 > Tomcat NIO, APR 模式下SSL 的配置以及如果配置Http 到 Https的跳转

Tomcat NIO, APR 模式下SSL 的配置以及如果配置Http 到 Https的跳转

一般情况下,Tomcat都只是作为请求处理器而处在web 服务器例如Apache, ngnix之后的,但是对于小型的应用用让Tomcat 作为前端服务器也无妨。这里对Tomcat的一些配置最一下总结。


NIO 模式下的SSL配置:

步骤1 建立 keysore:

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

如果是第一次建立需要配置,可以还需要为keytool 设置进入密码。 通过这个命令生成的keystore包含了一个自动生成的key和自我签名的证书。 


如果你不想要keytool, 而是想用openssl 来生成证书也是可以的。你需要首先生成一个key文件

openssl genrsa -des3 -out server.key 4096


然后用以下根据key生成的一个csr文件

openssl req -config /path/to/openssl.cnf -new -key server.key -out server.csr

注意-config 后面是openssl的配置文件路径,一般是在openssl 安装路径中。

最后我们生成certificate

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

当然你也可以把你的key,和csr文件发给第三方认证组织例如verisign,又他们生成certificate文件发给你。


有了我们的证书和key文件如何把它们导入到我们的keystore里面去呢?思路是首先生成一个pkcs12文件,然后导入或者转化为keystore文件

openssl pkcs12 -export -in host.crt -inkey host.key > host.p12
keytool -importkeystore -srckeystore host.p12 -destkeystore host.jks -srcstoretype pkcs12



有了keystore 文件我们只需要在Tomcat的server.xml 文件加入一下配置即可

    <Connector

           protocol="org.apache.coyote.http11.Http11NioProtocol"

           port="443" maxThreads="200"

           scheme="https" secure="true" SSLEnabled="true"

           keystoreFile="-path/to/keystore" keystorePass="xxxxxxxxx"

           clientAuth="false" sslProtocol="TLS"/>

如果你有8443 端口的配置,那么请覆盖他。protocol 请注 用 org.apache.coyote.http11.Http11NioProtocol 这样才会使用对8443端口的链接用nio模式处理。 



APR 模式下的SSL配置:

APR 模式要相对简单一些, 有了上面openssl 生成的key文件和crt文件我们直接用加入配置:


<Connector

           protocol="org.apache.coyote.http11.Http11AprProtocol"

           port="443" maxThreads="200"

           scheme="https" secure="true" SSLEnabled="true"

           SSLCertificateFile="c://ssl/server.crt"

           SSLCertificateKeyFile="c://ssl/server.key"

  SSLPassword="in4monitor"

           SSLVerifyClient="false" SSLProtocol="TLSv1"/>


protocol 请注 用 org.apache.coyote.http11.Http11AprProtocol 这样才会使用对8443端口的链接用apr模式处理。 APR 配置在某些机器上会出现 fopen 函数找不到的错误,还没有找到原因,如果有知道的解决方法的朋友就告知。 


Http 转 Https

由于我们的Tomcat当作了前端web服务器,那么默认的链接端口8080 需要修改为80,且redirectPort需要变为443

    <Connector port="80" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="443" />



Tomcat NIO, APR 模式下SSL 的配置以及如果配置Http 到 Https的跳转