使用 APR 配置 |
使用 APR 方式配置 HTTPS 加密有如下步骤:
在 OpenSSL 网站(http://www.openssl.org/)下载 OpenSSL,在 Window 平台下可使用 OpenSSL for Windows。
将 OpenSSL 的 bin 目录添加到系统的 PATH 环境变量中 ,如 D:\OpenSSL-Win64\bin 。
3.1 在开发测试环境下,需要利用 OpenSSL 生成私钥,再创建使用该私钥的证书
进入 OpenSSL/bin,打开命令行窗口,输入如下命令,为 Tomcat 创建一个私钥:
openssl genrsa -des3 -out D:\tomcatkey.pem 2048
按照提示输入密码短语,例如“123456”,OpenSSL 会提示你重复输入一次确认。然后会生成一个名为 tomcatkey.pem 的私钥,D:\tomcatkey.pem 为该私钥的路径。
创建私钥后,还需要创建一个证书,同样在 OpenSSL/bin 的命令行窗口,执行如下命令:
openssl req -new -x509 -key D:\tomcatkey.pem -out D:\tomcatcert.pem -days 1095
按照提示输入 tomcatkey.pem 的密码短语,这里为“123456”(创建私钥时指定),并输入相关信息后,即生成一个周期为3年(1095天)的自签名证书,即 tomcatcert.pem,tomcatcert.pem 使用 tomcatkey.pem 这个私钥,D:\tomcatcert.pem 为该证书的路径。
3.2 在正式生产环境下,需要生成证书签名请求 CSR 文件,然后获取官方 CA 签名的 SSL 证书。
进入 OpenSSL/bin ,打开命令行,执行如下命令,生成证书签名请求 CSR 文件:
openssl req -new -nodes -sha256 -newkey rsa:2048 -keyout [$Key_File] -out [$OpenSSL_CSR]
例如:
openssl req -new -nodes -sha256 -newkey rsa:2048 -keyout D:\key.key -out D:\key.csr
根据系统返回的提示,输入生成 CSR 文件所需的信息,获取 CSR 文件。再依据需求,向官方 CA 提供 CSR 等相关信息,获取 CA 签名的 SSL 证书。将所得证书文件压缩包进行解压,获得对应证书文件(例如:D:/certifile.pfx)和密码文件(例如:D:/certifile.txt)
进入 OpenSSL/bin ,打开命令行,依次执行如下命令:
openssl pkcs12 -in D:/certifile.pfx -nodes -out D:/certifile.pem
此时 OpenSSL 会提示输入证书密码,需填入官方 CA 提供的密码文件(例如:D:/certifile.txt)中的内容。
openssl rsa -in D:/certifile.pem -out certifile.key
openssl x509 -in D:/certifile.pem -out certifile.crt
a) 找到如下内容,建议您注释掉以下内容,关闭http :
<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" />
b) 在其后方添加如下代码:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" URIEncoding="utf-8" clientAuth="false" SSLCertificateFile="${user.home}/${SSLCertificateFile}" SSLCertificateKeyFile="${user.home}/${SSLCertificateKeyFile}" SSLPassword="123456" sslProtocol="TLS" sslEnabledProtocols="TLSv1.2"/>
注意,其中"SSLCertificateFile"请填写证书文件的实际绝对路径,例如开发测试环境中填写生成的服务器证书信息 "D:/tomcatcert.pem";实际生产环境中填写真实证书信息"D:/certifle.crt" 。"SSLCertificateKeyFile" 请填写证书私钥文件的实际绝对路径,例如开发测试环境中填写生成的私钥文件"D:/tomcatkey.pem";实际生产环境中填写真实私钥文件"D:/certifile.key" 。"SSLPassword"填写私钥文件的密码,私钥文件未加密时,可省略此行。
<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>