将 SSL 与 Dispatcher 结合使用

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

注意

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

在 Dispatcher 连接到 AEM 时使用 SSL

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

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

当 Dispatcher 收到 HTTPS 请求时,Dispatcher 将以下标头包括在发送到 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 requests
         "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
         "http://*"
      }
      /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

要使用双向 SSL,请配置 Dispatcher 与渲染计算机(一般为 AEM 或 CQ 发布实例)之间的连接:

  • 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.pemnewkey.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.pemrenderkey.pem 文件在渲染实例上配置 SSL。

将渲染证书转换为 JKS (Java™ KeyStore) 格式

使用以下命令将渲染证书(一个 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™ KeyStore (JKS) 格式,请输入以下命令:

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

    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'
    

配置渲染实例

要将渲染实例的 HTTP 服务配置为使用 SSL,请按照​在发布实例上启用 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>

在此页面上