将 SSL 与 Dispatcher 结合使用

在 Dispatcher 和渲染计算机之间使用 SSL 连接:

注意

与 SSL 证书相关的操作将绑定到第三方产品。它们未纳入 Adobe 白金级维护和支持合同中。

在 Dispatcher 连接到 AEM 时使用 SSL

将 Dispatcher 配置为使用 SSL 连接与 AEM 或 CQ 渲染实例进行通信。

在配置 Dispatcher 之前,将 AEM 或 CQ 配置为使用 SSL:

当 Dispatcher 收到 HTTPS 请求时,它会在向 AEM 或 CQ 发送的后续请求中包含以下标头:

  • X-Forwarded-SSL
  • X-Forwarded-SSL-Cipher
  • X-Forwarded-SSL-Keysize
  • X-Forwarded-SSL-Session-ID

通过带 mod_ssl 的 Apache-2.4 发送的请求包含与以下示例类似的标头:

X-Forwarded-SSL: on
X-Forwarded-SSL-Cipher: DHE-RSA-AES256-SHA
X-Forwarded-SSL-Session-ID: 814825E8CD055B4C166C2EF6D75E1D0FE786FFB29DEB6DE1E239D5C771CB5B4D

将 Dispatcher 配置为使用 SSL

要将 Dispatcher 配置为使用 SSL 与 AEM 或 CQ 连接,您的 dispatcher.any 文件需要以下属性:

  • 一个处理 HTTPS 请求的虚拟主机。
  • 虚拟主机的 renders 部分包含一项,该项标识使用 HTTPS 的 CQ 或 AEM 实例的主机名和端口。
  • renders 项包含一个名为 secure 的属性,其值为 1

注意:如果需要,创建另一个虚拟主机来处理 HTTP 请求。

以下示例 dispatcher.any 文件显示了用于通过 HTTPS 连接到主机 localhost 和端口 8443 上运行的 CQ 实例的属性值:

/farms
{
   /secure
   { 
      /virtualhosts
      {
         # select this farm for all incoming HTTPS requestss
         "https://*"
      }
      /renders
      {
      /0001
         {
            # hostname or IP of the render
            /hostname "localhost"
            # port of the render
            /port "8443"
            # connect via HTTPS
            /secure "1"
         }
      }
     # the rest of the properties are omitted
   }

   /non-secure
   { 
      /virtualhosts
      {
         # select this farm for all incoming HTTP requests
         "https://*"
      }
      /renders
      {
         /0001
      {
         # hostname or IP of the render
         /hostname "localhost"
         # port of the render
         /port "4503"
      }
   }
    # the rest of the properties are omitted
}

在 Dispatcher 和 AEM 之间配置双向 SSL

将 Dispatcher 和渲染计算机(通常是 AEM 或 CQ 发布实例)之间的连接配置为使用双向 SSL:

  • Dispatcher 通过 SSL 连接到渲染实例。
  • 渲染实例验证 Dispatcher 证书的有效性。
  • Dispatcher 验证渲染实例的证书 CA 是否可信。
  • (可选)Dispatcher 验证渲染实例的证书是否与渲染实例的服务器地址匹配。

要配置双向 SSL,您需要由受信任的证书颁发机构 (CA) 签名的证书。自签名证书无法满足需求。您可以充当 CA 或使用第三方 CA 的服务来签署证书。要配置双向 SSL,您需要以下项:

  • 渲染实例和 Dispatcher 的签名证书
  • CA 证书(如果您充当 CA)
  • 用于生成 CA、证书和证书请求的 OpenSSL 库。

执行以下步骤可配置双向 SSL:

  1. 安装适用于您的平台的最新版本的 Dispatcher。使用支持 SSL 的 Dispatcher 二进制文件(SSL 包含在文件名中,例如 dispatcher-apache2.4-linux-x86-64-ssl10-4.1.7.tar)。
  2. 为 Dispatcher 和渲染实例创建或获取 CA 签名证书
  3. 创建包含渲染证书的密钥库并将渲染器的 HTTP 服务配置为使用它。
  4. 为双向 SSL 配置 Dispatcher Web Server 模块

创建或获取 CA 签名证书

创建或获取用于对发布实例和 Dispatcher 进行身份验证的 CA 签名证书。

创建您的 CA

如果您充当 CA,请使用 OpenSSL 创建对服务器和客户端证书进行签名的证书颁发机构。(您必须已安装 OpenSSL 库。)如果您使用的是第三方 CA,请不要执行此过程。

  1. 打开终端并将当前目录更改为包含 CA.sh 文件的目录,例如 /usr/local/ssl/misc

  2. 要创建 CA,请输入以下命令,然后在系统提示时提供值:

    ./CA.sh -newca
    
    注意

    openssl.cnf 文件中的几个属性可控制 CA.sh 脚本的行为。在创建 CA 之前,您应根据需要修改此文件。

创建证书

使用 OpenSSL 可创建要发送给第三方 CA 或通过您的 CA 签名的证书请求。

创建证书时,OpenSSL 使用公用名属性来标识证书所有者。对于渲染实例的证书,如果您将 Dispatcher 配置为仅在证书与发布实例的主机名匹配时接受证书,请使用实例计算机的主机名作为公用名。(请参阅 DispatcherCheckPeerCN 属性。)

  1. 打开终端并将当前目录更改为包含 OpenSSL 库的 CH.sh 文件的目录。

  2. 输入以下命令,并在系统提示时提供值。如果需要,请使用发布实例的主机名作为公用名。主机名是渲染器的 IP 地址的 DNS 可解析名称:

    ./CA.sh -newreq
    

    如果您使用的是第三方 CA,请将 newreq.pem 文件发送到 CA 以进行签名。如果您充当 CA,请继续执行步骤 3。

  3. 输入以下命令可使用您的 CA 证书对证书进行签名:

    ./CA.sh -sign
    

    在包含 CA 管理文件的目录中创建两个分别名为 newcert.pem 和 newkey.pem 的文件。这两个文件分别是渲染计算机的公共证书和私钥。

  4. 将 newcert.pem 重命名为 rendercert.pem,并将 newkey.pem 重命名为 renderkey.pem。

  5. 重复步骤 2 和 3,为 Dispatcher 模块创建新的证书和新的公钥。确保您使用的是特定于 Dispatcher 实例的公用名。

  6. 将 newcert.pem 重命名为 dispcert.pem,并将 newkey.pem 重命名为 dispkey.pem。

在渲染计算机上配置 SSL

使用 rendercert.pem 和 renderkey.pem 文件在渲染实例上配置 SSL。

将渲染证书转换为 JKS 格式

使用以下命令将渲染证书(一个 PEM 文件)转换为 PKCS#12 文件。还包括对渲染证书签名的 CA 的证书:

  1. 在终端窗口中,将当前目录更改为渲染证书和私钥的位置。

  2. 输入以下命令将渲染证书(一个 PEM 文件)转换为 PKCS#12 文件。还包括对渲染证书签名的 CA 的证书:

    openssl pkcs12 -export -in rendercert.pem -inkey renderkey.pem  -certfile demoCA/cacert.pem -out rendercert.p12
    
  3. 输入以下命令将 PKCS#12 文件转换为 Java 密钥库 (JKS) 格式:

    keytool -importkeystore -srckeystore servercert.p12 -srcstoretype pkcs12 -destkeystore render.keystore
    
  4. 使用默认别名创建 Java 密钥库。更改别名(如果需要):

    keytool -changealias -alias 1 -destalias jettyhttp -keystore render.keystore
    

将 CA 证书添加到渲染器的信任存储

如果您充当 CA,请将您的 CA 证书导入密钥库中。然后,将运行渲染实例的 JVM 配置为信任密钥库。

  1. 使用文本编辑器打开 cacert.pem 文件并删除以下行前面的所有文本:

    -----BEGIN CERTIFICATE-----

  2. 使用以下命令将证书导入密钥库中:

    keytool -import -keystore cacerts.keystore -alias myca -storepass password -file cacert.pem
    
  3. 要将运行渲染实例的 JVM 配置为信任密钥库,请使用以下系统属性:

    -Djavax.net.ssl.trustStore=<location of cacerts.keystore>
    

    例如,如果您使用 crx-quickstart/bin/quickstart 脚本来启动您的发布实例,则可修改 CQ_JVM_OPTS 属性:

    CQ_JVM_OPTS='-server -Xmx2048m -XX:MaxPermSize=512M -Djavax.net.ssl.trustStore=/usr/lib/cq6.0/publish/ssl/cacerts.keystore'
    

配置渲染实例

按照​在发布实例上启用 SSL 部分中的说明使用渲染证书将渲染实例的 HTTP 服务配置为使用 SSL:

为 Dispatcher 模块配置 SSL

要将 Dispatcher 配置为使用双向 SSL,请准备 Dispatcher 证书,然后配置 Web 服务器模块。

创建统一的 Dispatcher 证书

将 Dispatcher 证书和未加密的私钥合并到一个 PEM 文件中。使用文本编辑器或 cat 命令创建一个与以下示例类似的文件:

  1. 打开终端并将当前目录更改为 dispkey.pem 文件的位置。

  2. 要解密私钥,请输入以下命令:

    openssl rsa -in dispkey.pem -out dispkey_unencrypted.pem
    
  3. 使用文本编辑器或 cat 命令将未加密的私钥和证书并入一个类似于以下示例的文件中:

    -----BEGIN RSA PRIVATE KEY-----
    MIICxjBABgkqhkiG9w0B...
    ...M2HWhDn5ywJsX
    -----END RSA PRIVATE KEY-----
    -----BEGIN CERTIFICATE-----
    MIIC3TCCAk...
    ...roZAs=
    -----END CERTIFICATE-----
    

指定要用于 Dispatcher 的证书

将以下属性添加到 Dispatcher 模块配置(在 httpd.conf 中):

  • DispatcherCertificateFile:Dispatcher 统一证书文件的路径,包含公共证书和未加密的私钥。在 SSL 服务器请求 Dispatcher 客户端证书时使用此文件。
  • DispatcherCACertificateFile:CA 证书文件的路径,在 SSL 服务器提供不受根证书颁发机构信任的 CA 时使用。
  • DispatcherCheckPeerCN:为远程服务器证书启用 (On) 还是禁用 (Off) 主机名检查。

以下代码是示例配置:

<IfModule disp_apache2.c>
  DispatcherConfig conf/dispatcher.any
  DispatcherLog    logs/dispatcher.log
  DispatcherLogLevel 3
  DispatcherNoServerHeader 0
  DispatcherDeclineRoot 0
  DispatcherUseProcessedURL 0
  DispatcherPassError 0
  DispatcherCertificateFile disp_unified.pem
  DispatcherCACertificateFile cacert.pem
  DispatcherCheckPeerCN On
</IfModule>

在此页面上