使用 JSSE 配置 |
使用 JSSE 方式配置 HTTPS 加密有如下步骤:
使用 Keytool 工具生成服务器证书:
keytool -genkey -alias [$Alias] -keyalg RSA -dname "[$dname]" -keystore [$Keytool_Path]
其中,
例如:
keytool -genkey -alias tomcat -keyalg RSA -dname "cn=supermap.iserver.org,ou=localhost,o=localhost,l=china,st=sichuan,c=cn" -keystore D:\key.keystore
按照提示输入密码(部署时 Tomcat 默认使用“changeit”作为密码),您可以输入“123456”,输入相关信息后确认。
在开发测试环境下,跳过本步骤,按后续步骤配置即可。
在正式生产环境下,需要生成证书签名请求 CSR 文件,然后获取官方 CA 签名的 SSL 证书。
输入以下命令,生成证书签名请求 CSR 文件:
keytool -certreq -sigalg SHA256withRSA -alias tomcat -keystore D:\key.keystore -file D:\key.csr
依据需求,向官方 CA 提供 CSR 等相关信息,获取 CA 签名的 SSL 证书。将所得证书文件压缩包进行解压,获得对应证书文件(例如:D:/certifile.pfx)和密码文件(例如:D:/certifile.txt)
a) 注释掉如下配置,不使用 APR:
<!--APR library loader. Documentation at /docs/apr.html --> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
b) 找到 SSL HTTP/1.1 Connector 的配置,即:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true"> … </Connector>
去掉注释,修改成如下:
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="8443" relaxedQueryChars="[]|{}" relaxedPathChars="[]|{}" maxThreads="200" scheme="https" secure="true" SSLEnabled="true" keystoreFile="${user.home}/${keystoreFile}" keystorePass="证书密码" clientAuth="false" sslProtocol="TLS" sslEnabledProtocols="TLSv1.2" URIEncoding="utf-8" />
注意,其中"keystoreFile"请填写证书文件的实际绝对路径,例如开发测试环境中填写生成的服务器证书信息 "D:/key.keystore";实际生产环境中填写获取的真实证书信息"D:/certifle.pfx" 。"keystorePass" 请设置为生成证书时设置的密码,例如开发测试环境中填写"123456";实际生产环境中填写密码文件"certifile.txt" 中的内容。
c) 建议您关闭http。即在 server.xml 内,注释掉以下部分:
<Connector port="8090" protocol="HTTP/1.1" relaxedQueryChars="[]|{}" relaxedPathChars="[]|{}" connectionTimeout="8000" redirectPort="8453" executor="tomcatThreadPool" enableLookups="false" URIEncoding="utf-8" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/plain,text/javascript,text/css,application/javascript,application/xml,application/json,application/rjson" />
<hosts> <host cacheEnabled="true" port="8090" type="webapp" uriBase="/services"> <interface-type>com.supermap.services.wms.WMSServlet</interface-type> <interface-type>com.supermap.services.rest.RestServlet</interface-type> <interface-type>com.supermap.services.handler.HandlerServlet</interface-type> <interface-type>com.supermap.services.wfs.WFSServlet</interface-type> <interface-type>com.supermap.services.wmts.WMTSServlet</interface-type> <interface-type>com.supermap.services.wcs.WCSServlet</interface-type> <interface-type>com.supermap.services.wps.WPSServlet</interface-type> </host> </hosts>
修改 <host> 节点中 port 参数的值为"8443",并添加 protocolScheme 参数,值为"https",修改如下:
<hosts> <host cacheEnabled="true" port="8443" protocolScheme="https" type="webapp" uriBase="/services"> <interface-type>com.supermap.services.wms.WMSServlet</interface-type> <interface-type>com.supermap.services.rest.RestServlet</interface-type> <interface-type>com.supermap.services.handler.HandlerServlet</interface-type> <interface-type>com.supermap.services.wfs.WFSServlet</interface-type> <interface-type>com.supermap.services.wmts.WMTSServlet</interface-type> <interface-type>com.supermap.services.wcs.WCSServlet</interface-type> <interface-type>com.supermap.services.wps.WPSServlet</interface-type> </host> </hosts>
<session-config> <session-timeout>30</session-timeout> </session-config>
增加<cookie-config>,修改为:
<session-config> <session-timeout>30</session-timeout> <cookie-config> <http-only>true</http-only> <secure>true</secure> </cookie-config> </session-config>