一般情况下,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" />