使用 JSSE 方式配置 HTTPS 加密有如下步骤:
使用 Keytool 工具生成服务器证书:
keytool -genkey -alias [$Alias] -keyalg RSA -dname "[$dname]"
-keystore [$Keytool_Path]
其中,
- [$Alias]:证书别名,可自定义。
- -keyalg:密钥类型。
- [$dname]:用于设置生成的服务器端证书的基本信息,包含cn=[$cn],ou=[$ou],o=[$o],l=[$l],st=[$st],c=[$cn]。其中cn为公用名,通常为 https 服务器对应的域名,ou为组织单位名称,o为组织名称,l为所在城市或区域名称,st为所在省/市/自治区名称,c为该单位的双字母国家/地区代码。
- [$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”,输入相关信息后确认。
2. 生成证书签名请求 CSR 文件
在开发测试环境下,跳过本步骤,按后续步骤配置即可。
在正式生产环境下,需要生成证书签名请求 CSR 文件,然后获取官方 CA 签名的 SSL 证书。
输入以下命令,生成证书签名请求 CSR 文件:
keytool -certreq -sigalg SHA256withRSA -alias tomcat -keystore D:\key.keystore -file D:\key.csr
- -sigalg:摘要算法。
- -file:文件存放路径与名称。
依据需求,向官方 CA 提供 CSR 等相关信息,获取 CA 签名的 SSL 证书。将所得证书文件压缩包进行解压,获得对应证书文件(例如:D:/certifile.pfx)和密码文件(例如:D:/certifile.txt)
3. 修改 SuperMap iServer安装目录/conf/server.xml 配置文件,开启 SSL
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" maxThreads="200" relaxedQueryChars="[]|{}" relaxedPathChars="[]|{}" 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" />
4. 如果需要在 https 协议下使用分布式分析服务,需要在 iserver-system.xml(位于SuperMap iServer 安装目录/webapps/iserver/WEB-INF目录下)配置文件中找到如下 <hosts> 节点:
<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>
5. 在配置好 SSL 之后,为避免出现“Cookie中缺少Secure属性”的安全漏洞,可以通过中间件添加 Secure 属性,以 Tomcat 为例,在 SuperMap iServer安装目录/conf/web.xml 下,找到如下配置:
<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>
6. 重启 Tomcat,即可在8443端口通过 HTTPS 访问 Web 应用,如 https://localhost:8443/iserver/manager 。