Citrix ADC

对 Azure 密钥保管库的支持

Citrix ADC 设备可与外部 HSM(SafeNet 和泰雷兹)集成,用于本地部署。对于云部署,ADC 设备与 Azure 密钥保管库集成。该设备将其私钥存储在密钥保管库中,以便于管理公有云域中的私钥和安全。您不再需要在不同位置存储和管理跨多个数据中心和云提供商部署的 ADC 设备的密钥。

将 ADC 与 Azure 密钥保管库高级定价套餐(提供 HSM 支持的密钥)结合使用,可提供 FIPS 140-2 2 级合规性。

Azure 密钥保管库是 Microsoft 的标准产品。有关 Azure 密钥保管库的详细信息,请参阅 Microsoft Azure 文档。

注意: TLS 1.3 协议支持 Citrix ADC 与 Azure 密钥保管库的集成。

体系结构概述

Azure 密钥保管库是一种用于在 Azure 云中安全存储秘密的服务。通过将密钥存储在 Azure 密钥保管库中,可降低密钥被盗的可能性。设置密钥保管库后,您可以将密钥存储在其中。将 ADC 设备上的虚拟服务器配置为在密钥保管库中执行私钥操作。ADC 设备访问每次 SSL 握手的密钥。

下图说明了身份验证后从 Azure Active Directory 获取访问令牌的过程。此令牌与使用私钥进行加密操作的 REST API 调用一起使用。

获取访问令牌

下图显示了典型的 RSA 握手。使用公钥加密的客户端密钥交换 (CKE) 消息将使用存储在密钥保管库中的私钥进行解密。

密钥保管库握手

在 ECDHE 握手中,Citrix ADC 设备发送的服务器密钥交换 (SCE) 消息将使用存储在密钥保管库中的私钥进行签名。

必备条件

  1. 您必须拥有 Azure 订阅。

  2. (可选)在 Linux 计算机上安装 Azure CLI。有关说明,请参阅 Azure 文档https://docs.microsoft.com/en-us/cli/azure/install-azure-cli-apt?view=azure-cli-latest

  3. 在 ADC 设备上配置实体之前,完成 Azure 门户上的配置。

配置 ADC Azure 密钥保管库集成

首先在 Azure 门户上执行配置,然后在 ADC 设备上执行配置。

在 Azure 门户上执行以下步骤

以下流程图显示了 Azure 门户上所需配置的高级流程。

Azure 门户上的步骤

  1. 在 Azure Active Directory 中创建应用和服务主体。
  2. 在资源组中创建密钥保管库。
  3. 配置应用程序和服务主体以在密钥保管库上执行签名和解密操作。
  4. 使用以下方法之一在密钥保管库中创建密钥:

    1. 通过导入密钥文件。
    2. 通过生成证书。

有关用于配置上述步骤的命令的信息,请参阅中的 Azure 文档https://docs.microsoft.com/en-us/azure/active-directory/develop/app-objects-and-service-principals

在 ADC 设备上执行以下步骤

下面的流程图显示了 ADC 设备所需的高级配置流程。

ADC 设备上的步骤

  1. 配置 DNS 服务器。
  2. 配置根证书以验证 Azure 提供的证书。
  3. 创建 Azure 应用程序。
  4. 创建 Azure 密钥保管库实体。
  5. 创建 HSM 密钥。
  6. 创建证书密钥对。
  7. 将证书密钥对绑定到虚拟服务器。

配置 DNS 服务器

密钥保管库主机和 Azure Active Directory 端点点的名称解析需要 DNS 服务器。

使用 CLI 配置 DNS 服务器

在命令提示窗口中,键入:

add dns nameserver <IP address>

示例:

add dns nameserver 192.0.2.150

使用 GUI 配置 DNS 服务器

  1. 导航到流量管理”>“DNS”>“名称服务器。单击添加

    添加 DNS 名称服务器

  2. 输入以下参数的值:
    • IP 地址-外部名称服务器的 IP 地址,如果设置了本地 DNS 服务器 (LDNS) 的 IP 地址。
    • 协议-名称服务器使用的协议。如果名称服务器是在设备上配置的 DNS 虚拟服务器,则 UDP_TCP 无效。

    DNS 名称服务器参数

  3. 单击创建

添加和绑定根证书

下载 Azure 密钥保管库https://<vault_name>.vault.azure.net 和 Azure Active Directory (AAD) https://login.microsoftonline.com 提供的证书的根证书,并将其加载到 ADC 设备上。需要这些证书来验证 Azure 密钥保管库和 AAD 提供的证书。将一个或多个证书绑定到 CA 证书组ns_callout_certs

使用 CLI 添加根证书

在命令提示窗口中,键入:

add ssl certkey <certkeyname> -cert <certname>
bind ssl caCertGroup <caCertGroupName> <certkeyName>

示例: 在以下示例中,Azure 密钥保管库和 AAD 提供的根证书是相同的。

add ssl certKey rootcert -cert RootCyberTrustRoot.crt
bind ssl cacertGroup ns_callout_certs  rootcert

使用 GUI 添加根证书

  1. 导航到 流量管理 > SSL > 证书 > CA 证书

    安装 CA 证书

  2. 输入以下参数的值:
    • 证书密钥对名称
    • 证书文件名称

    CA 证书参数

  3. 单击 安装

  4. 导航到 流量管理 > SSL > CA 证书组

  5. 选择 ns_callout_certs 然后单击 显示绑定

    显示绑定

  6. 单击 Bind(绑定)。

  7. 选择之前创建的 CA 证书,然后单击选择

  8. 单击 绑定,然后单击 关闭

配置 Azure 应用程序

Azure 应用程序实体包含对 Azure Active Directory 进行身份验证和获取访问令牌所需的凭据。也就是说,要获得对密钥保管库资源和 API 的授权访问权限,请在 ADC 设备上添加 Azure 应用程序 ID、密码(密码)和租户 ID。使用 CLI 配置 Azure 应用程序实体
时,必须输入密码。如果使用 GUI,则 Azure 应用程序实体包含对 Azure Active Directory 进行身份验证和获取访问令牌所需的凭据。

使用 CLI 配置 Azure 应用程序

在 13.0-61.x 版中,在向应用程序授予访问令牌之前,将向 add azure application 命令牌添加一个参数 VaultResource,以获取资源组的域。添加此参数是因为不同区域的域名可能不同。例如,域可能是 vault.azure.netvault.usgov.net

在命令提示窗口中,键入:

add azure application <name> -clientID <string> -clientSecret -tenantID <string> -vaultResource <string> [-tokenEndpoint <URL>]
show azure application

示例:

add azure application app10 -clientiD 12345t23aaa5 -clientsecret csHzOoEzmuY= -vaultResource example.vault.azure.net -tenantID 33583ee9ca5b
 Done
> sh azure application app10
1)  Name:  app10             ClientID:  12345t23aaa5
    TokenEndpoint:  "https://login.microsoftonline.com/33583ee9ca5b/"
    TenantID:  33583ee9ca5b  VaultResource:  example.vault.azure.net
 Done

使用 GUI 配置 Azure 应用程序

  1. 导航到 流量管理 > SSL > Azure > 应用程序

    Azure 应用程序导航

  2. 在详细信息窗格中,单击 Add(添加)。

  3. 输入以下参数的值:

    • 名称 — Citrix ADC 设备上的应用程序对象的名称。
    • 客户端 ID — 使用 Azure CLI 或 Azure 门户 (GUI) 在 Azure Active Directory 中创建应用程序时生成的应用程序 ID。
    • 客户端密钥 — 在 Azure Active Directory 中配置的应用程序的密码。密码在 Azure CLI 中指定或在 Azure 门户 (GUI) 中生成。
    • 租户 ID — 在其中创建应用程序的 Azure Active Directory 内的目录的 ID。
    • 文件库资源-授予访问令牌的文件库资源。示例 vault.azure.net
    • 令牌结束点 — 可以从其中获取访问令牌的 URL。如果未指定令牌结束点,则默认值为https://login.microsoftonline.com/<tenant id>

    Azure 应用程序参数

配置 Azure 密钥保管库

在 ADC 设备上创建 Azure 密钥保管库对象。

使用 CLI 配置 Azure 密钥保管库

在命令提示窗口中,键入:

add azure keyVault <name> -azureVaultName <string> -azureApplication
       <string>
show azure keyvault

示例:

add azure keyvault kv1 -azureapplication app10 -azurevaultName pctest.vault.azure.net
> sh azure keyVault
1)  Name:  kv1               AzureVaultName:  pctest.vault.azure.net
  AzureApplication:  app10  State:  "Access token obtained"
 Done

下表列出了 Azure 密钥保管库状态可以采用的不同值以及有关每个状态的简要说明。

状态 说明
已创建 密钥保管库对象的初始状态。尚未尝试身份验证。
无法到达令牌终点 指示以下之一:未配置 DNS 服务器、未绑定到 CA 证书组的颁发者证书或网络问题。
授权失败 应用程序凭据不正确。
令牌解析错误 Azure Active Directory 的响应不是预期的格式。
获得访问令牌 已成功通过 Azure Active Directory 进行身份验证。

使用 GUI 配置 Azure 密钥保管库的步骤

  1. 导航到 流量管理 > SSL > Azure > 密钥保管库

    Azure 密钥保管库导航

  2. 输入以下参数的值:

    • 名称-密钥保管库的名称。
    • Azure 密钥保管库名称-使用 Azure CLI 或具有域名的 Azure 门户 (GUI) 在 Azure 云中配置的密钥保管库的名称。
    • Azure 应用程序名称-在 ADC 设备上创建的 Azure 应用程序对象的名称。具有此名称的 Azure 应用程序对象用于使用 Azure Active Directory 进行身份验证。

    Azure 密钥保管库参数

添加 HSM 密钥

将您的私钥存储在 HSM 中可提供 FIPS 140-2 2 级合规性。

使用 CLI 添加 HSM 密钥

在命令提示窗口中,键入:

add ssl hsmKey <hsmKeyName> [-hsmType <hsmType>] [-key <string> |
       -serialNum <string>] {-password } [-keystore <string>]

示例:

add ssl hsmKey h1 -keystore kv1 -key san15key -hsmType KEYVAULT


> sh ssl hsmKey h1
    HSM Key Name: h1       Type: KEYVAULT
    Key: san15key
    Key store: kv1
    State: “Created”
 Done

下表列出了 HSM 密钥的状态可以采用的不同值以及有关每个状态的简要描述。

状态 说明
已创建 HSM 密钥将添加到 ADC 设备上。尚未尝试执行密钥操作。
访问令牌不可用 尝试密钥操作时,访问令牌不可用。
未授权 已配置的 Azure 应用程序没有执行密钥操作的权限。
不存在 该密钥不存在于 Azure 密钥保管库中。
无法访问 在网络上无法访问密钥保管库主机。
标记下来 由于密钥操作期间出现阈值误差,ADC 设备上的 HSM 密钥标记为“向下”。
关键操作成功 从密钥保管库收到的关于密钥操作的成功响应。
关键操作失败 从密钥保管库收到的关于密钥操作的故障响应。
关键操作受到限制 密钥操作请求受密钥保管库的限制。

使用 GUI 添加 HSM 密钥

  1. 导航到 流量管理 > SSL > HSM

    添加 HSM 密钥

  2. 输入以下参数的值。

    • HSM 密钥名称-密钥的名称。
    • HSM 类型-HSM 类型。
    • 密钥存储-表示存储密钥的 HSM 的密钥存储对象的名称。例如,密钥保管库对象或 Azure 密钥保管库身份验证对象的名称。仅适用于KEYVAULT 类型 HSM。

    HSM 关键参数

  3. 单击添加

添加证书密钥对

使用之前创建的 HSM 密钥添加证书密钥对。

使用 CLI 添加证书密钥对

在命令提示窗口中,键入:

add ssl certKey <certkeyName> (-cert <string> [-password]) -hsmKey <string>]
show ssl certkey

示例:

add ssl certKey serverrsa_2048 -cert /nsconfig/ssl/san_certs/san15.pem -hsmKey h1
> sh ssl certkey serverrsa_2048
    Name: serverrsa_2048        Status: Valid,   Days to expiration:9483
    Version: 3
    Serial Number: F5CFF9EF1E246022
    Signature Algorithm: sha256WithRSAEncryption
    Issuer:  C=in,O=citrix,CN=ca
    Validity
        Not Before: Mar 20 05:42:57 2015 GMT
        Not After : Mar 12 05:42:57 2045 GMT
    Certificate Type:   "Server Certificate"
    Subject:  C=in,O=citrix
    Public Key Algorithm: rsaEncryption
    Public Key size: 2048
    Ocsp Response Status: NONE
 Done

使用 GUI 添加证书密钥对

  1. 导航到 流量管理 > SSL > 安装证书 (HSM)

    添加证书密钥对

  2. 输入以下参数的值:

    • 证书密钥对名称
    • 证书文件名称
    • HSM 密钥

    证书密钥对参数

  3. 单击 安装

将证书密钥对绑定到虚拟服务器

用于处理 SSL 事务的证书必须绑定到接收 SSL 数据的虚拟服务器。

使用 CLI 将 SSL 证书密钥对绑定到虚拟服务器

在命令提示窗口中,键入:

bind ssl vserver <vServerName> -certkeyName <certificate-KeyPairName>
show ssl vserver <vServerName>

示例:

bind ssl vserver v1 -certkeyName serverrsa_2048

sh ssl vserver v1

    Advanced SSL configuration for VServer v1:
    DH: DISABLED
    DH Private-Key Exponent Size Limit: DISABLED    Ephemeral RSA: ENABLED      Refresh Count: 0
    Session Reuse: ENABLED      Timeout: 120 seconds
    Cipher Redirect: DISABLED
    ClearText Port: 0
    Client Auth: DISABLED
    SSL Redirect: DISABLED
    Non FIPS Ciphers: DISABLED
    SNI: DISABLED
    OCSP Stapling: DISABLED
    HSTS: DISABLED
    HSTS IncludeSubDomains: NO
    HSTS Max-Age: 0
    HSTS Preload: NO
    SSLv3: ENABLED  TLSv1.0: ENABLED  TLSv1.1: ENABLED  TLSv1.2: ENABLED  TLSv1.3: DISABLED
    Push Encryption Trigger: Always
    Send Close-Notify: YES
    Strict Sig-Digest Check: DISABLED
    Zero RTT Early Data: DISABLED
    DHE Key Exchange With PSK: NO
    Tickets Per Authentication Context: 1

    ECC Curve: P_256, P_384, P_224, P_521

1)  CertKey Name: serverrsa_2048    Server Certificate



1)  Cipher Name: DEFAULT
    Description: Default cipher list with encryption strength >= 128bit
 Done

使用 GUI 将 SSL 证书密钥对绑定到虚拟服务器

  1. 导航到 流量管理 > 负载平衡 > 虚拟服务器 ,然后打开 SSL 虚拟服务器。单击证书部分内部。

    服务器证书

  2. 单击箭头以选择证书密钥对。

    点击箭头

  3. 从列表中选择证书密钥对。

    选择证书密钥对

  4. 将证书密钥对绑定到虚拟服务器。

    将证书绑定到虚拟服务器

限制

  • 对 Azure 密钥保管库进行密钥操作的并发调用次数有限。ADC 设备的性能取决于密钥保管库限制。有关详细信息,请参阅Microsoft Azure 密钥保管库文档
  • 不支持 EC 密钥。
  • 不支持 EDT 和 DTLS 协议。
  • 不支持配备 Intel Coleto SSL 芯片的 ADC 设备。
  • 不支持群集和管理分区。
  • 将 Azure 应用程序实体、Azure 密钥保管库对象和 HSM 证书密钥对添加到 ADC 设备后,无法更新它们。

常见问题解答

与 Azure 密钥保管库集成后,私钥是否存储在 ADC 设备存储器中?

不可以,私钥不存储在 ADC 设备存储器中。对于每个 SSL 事务,设备都会向密钥保管库发送请求。

集成 FIPS 140-2 2 级投诉吗?

是的,集成解决方案提供 FIPS 140-2 2 级支持。

支持哪些密钥类型?

仅支持 RSA 密钥类型。

支持哪些密钥大小?

支持 1024 位、2048 位和 4096 位 RSA 密钥。

支持哪些密码?

支持 ADC 设备上支持的所有密码,包括带 ECDHE 和 SHA256 的 TLSv1.3 密码。

是否记录交易?

ADC 设备会记录它使用密钥保管库进行的每个事务。将记录详细信息,如时间、文件库 IP 地址、端口、连接成功或失败以及错误。 以下是 SSL 日志输出示例。

Apr  9 16:35:30 <local0.debug> 10.102.57.30 04/09/2019:16:35:30 GMT  0-PPE-0 : default SSLLOG SSL_HANDSHAKE_SUCCESS 896 0 :  Backend SPCBId 30894 - ServerIP 104.211.224.186 - ServerPort 443 - ProtocolVersion TLSv1.2 - CipherSuite "ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Non-Export 256-bit" - Session New - SERVER_AUTHENTICATED -SerialNumber "200005A75B04365827852D630000000005A75B" - SignatureAlgorithm "sha256WithRSAEncryption" - ValidFrom "Mar 17 03:28:42 2019 GMT" - ValidTo "Mar 17 03:28:42 2021 GMT" - HandshakeTime 40 ms
Apr  9 16:35:30 <local0.debug> 10.102.57.30 04/09/2019:16:35:30 GMT  0-PPE-0 : default SSLLOG SSL_HANDSHAKE_ISSUERNAME 897 0 :  SPCBId 30894 - IssuerName " C=US,ST=Washington,L=Redmond,O=Microsoft Corporation,OU=Microsoft IT,CN=Microsoft IT TLS CA 2"
Apr  9 16:35:30 <local0.debug> 10.102.57.30 04/09/2019:16:35:30 GMT  0-PPE-0 : default SSLLOG SSL_HANDSHAKE_SUBJECTNAME 898 0 :  SPCBId 30894 - SubjectName " CN=vault.azure.net"

对 Azure 密钥保管库的支持