使用 APR 配置

发送反馈


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

  1. 下载并安装 OpenSSL

在 OpenSSL 网站(http://www.openssl.org/)下载 OpenSSL,在 Window 平台下可使用 OpenSSL for Windows。

  1. 添加系统环境变量

将 OpenSSL 的 bin 目录添加到系统的 PATH 环境变量中 ,如 D:\OpenSSL-Win64\bin 。

  1. 获取证书。在开发测试环境下,请依据步骤 3.1 执行;在实际生产环境下,请依据步骤 3.2 执行。

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)

  1. 转换证书格式。 APR 配置方式仅支持 PEM 编码格式的证书,因此需要将官方 CA 颁发的 .pfx 格式证书转换为 .crt 格式证书,操作如下:

进入 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

  1. 修改 SuperMap iServer安装目录/conf/server.xml 配置文件,开启 SSL 。

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"填写私钥文件的密码,私钥文件未加密时,可省略此行。

  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 。