使用 JSSE 配置

发送反馈


使用 JSSE 方式配置 HTTPS 加密有如下步骤:

  1. 生成服务器证书(公钥)

使用 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”,输入相关信息后确认。

  1. 生成证书签名请求 CSR 文件

在开发测试环境下,跳过本步骤,按后续步骤配置即可。

在正式生产环境下,需要生成证书签名请求 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)

  1. 修改 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" 
         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"
/>
  1. 修改 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> 
  1. 在配置好 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>
  1. 重启 Tomcat,即可在8443端口通过 HTTPS 访问 Web 应用,如 https://localhost:8443/iserver/manager 。