Citrix ADC

支持 Azure 密钥保管库

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

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

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

注意:

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

体系结构概述

Azure 密钥保管库是一项用于在 Azure 云中安全存储密钥的服务。通过将密钥存储在 Azure 密钥保管库中,你可以减少密钥被盗的机会。设置好密钥保管库后,您可以将密钥存储在其中。在 ADC 设备上配置虚拟服务器以在密钥保管库中执行私钥操作。ADC 设备访问每次 SSL 握手的密钥。

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

获取访问令牌

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

Key Vault 握手

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

必备条件

  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>
<!--NeedCopy-->

示例:

add dns nameserver 192.0.2.150
<!--NeedCopy-->

使用 GUI 配置 DNS 服务器

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

    添加 DNS 名称服务器

  2. 输入以下参数的值:
    • IP 地址-外部名称服务器的 IP 地址,如果设置了本地参数,则为本地 DNS 服务器 (LDNS) 的 IP 地址。
    • 协议-名称服务器使用的协议。如果名称服务器是在设备上配置的 DNS 虚拟服务器,则 UPD_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>
<!--NeedCopy-->

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

add ssl certKey rootcert -cert RootCyberTrustRoot.crt
bind ssl cacertGroup ns_callout_certs  rootcert
<!--NeedCopy-->

使用 GUI 添加根证书

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

    安装 CA 证书

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

    CA 证书参数

  3. 单击安装

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

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

    Show bindings

  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
<!--NeedCopy-->

示例:

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

<!--NeedCopy-->

使用 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
<!--NeedCopy-->

示例:

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
<!--NeedCopy-->

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

状态 说明
Created 密钥保管库对象的初始状态。尚未尝试进行身份验证。
Could not reach token end point 表示以下情况之一:未配置 DNS 服务器、颁发者证书未绑定到 CA 证书组或网络问题。
Authorization failed 应用程序凭证错误。
Token parse error 来自 Azure Active Directory 的响应不是预期的格式。
Access token obtained 已成功通过 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>]
<!--NeedCopy-->

示例:

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
<!--NeedCopy-->

下表列出了 HSM 密钥的状态可以使用的不同值,以及有关每种状态的简要说明。

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

使用 GUI 添加 HSM 密钥

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

    添加 HSM 密钥

  2. 输入以下参数的值。

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

    HSM 关键参数

  3. 单击添加

添加证书密钥对

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

使用 CLI 添加证书密钥对

在命令提示符下,键入:

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

示例:

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
<!--NeedCopy-->

使用 GUI 添加证书密钥对

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

    添加证书密钥对

  2. 输入以下参数的值:

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

    证书密钥对参数

  3. 单击安装

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

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

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

在命令提示符下,键入:

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

示例:

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
<!--NeedCopy-->

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

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

    服务器证书

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

    点击箭头

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

    选择证书密钥对

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

    将证书绑定到虚拟服务器

限制

  • 对 Azure 密钥保管库进行密钥操作的并发调用次数有限。ADC 设备的性能取决于密钥保管库限制。有关更多信息,请参阅 Microsoft Azure 密钥保管库文档
  • 不支持 EC 密钥。
  • 不支持 EDT 和 DTLS 协议。
  • 不支持采用英特尔 Coleto SSL 芯片的 ADC 设备。
  • 不支持群集和管理分区。
  • 将 Azure 应用程序实体、Azure 密钥保管库对象和 HSM 证书密钥对添加到 ADC 设备后,无法更新它们。
  • 不支持包含 HSM 密钥的证书捆绑包。
  • 如果 HSM 密钥和证书不匹配,则不会出现错误。添加证书密钥对时,请确保 HSM 密钥和证书匹配。
  • 不能将 HSM 密钥绑定到 DTLS 虚拟服务器。
  • 不能使用使用 HSM 密钥创建的证书密钥对对 OCSP 请求进行签名。
  • 如果证书密钥对是使用 HSM 密钥创建的,则无法将证书密钥对绑定到 SSL 服务。

常见问题解答

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

不,私钥不会存储在 ADC 设备内存中。对于每笔 SSL 交易,设备都会向 Key Vault 发送一个请求。

集成是否符合 FIPS 140-2 级别 2 的要求

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

支持哪些密钥类型

仅支持 RSA 密钥类型。

支持哪些密钥大小

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

支持哪些密码

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

交易记录了吗

ADC 设备记录它使用 Key Vault 进行的每笔交易。会记录时间、保险库 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"
<!--NeedCopy-->
支持 Azure 密钥保管库