Citrix ADC

支持Azure密钥库

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

将ADC与Azure Key Vault Premium定价层(提供HSM支持的密钥)一起使用,可提供FIPS 140-2 2级兼容性。

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

注意:

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

体系结构概述

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

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

获取访问令牌

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

密钥库握手

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

先决条件

  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服务器

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

通过命令行方式配置DNS服务器

在命令提示符下,输入:

添加dns nameserver  

例子:

添加DNS名称服务器192.0.2.150 

通过GUI界面配置DNS服务器

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

    添加DNS名称服务器

  2. 请输入以下参数:
    • IP地址—外部名称服务器的IP地址,如果选择“Local”,则为本地DNS服务器的IP地址。
    • 协议-名称服务器使用的协议。如果名称服务器是设备上配置的DNS虚拟服务器,则UDP_TCP无效。

    DNS名称服务器参数

  3. 点击创建

添加并绑定根证书

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

使用CLI方式添加根证书

在命令提示符下,输入:

添加ssl certkey  -cert 绑定ssl caCertGroup   

例子:下面以Azure密钥库和AAD提供的根证书为例进行说明。

添加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. 点击绑定

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

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

配置Azure应用程序

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

通过使用CLI配置Azure应用程序

从13.0-61版开始。. x中增加了一个参数vaultResource添加azure应用程序命令,在向应用程序授予访问令牌之前获取资源组的域。由于不同地区的域名可能不同,添加此参数。例如,域可能是vault.azure.netvault.usgov.net

在命令提示符下,输入:

添加azure应用 -clientID  -clientSecret -tenantID  -vaultResource  [-tokenEndpoint ]显示azure应用

例子:

添加azure应用程序app10 -clientiD 12345t23aaa5 -clientsecret csHzOoEzmuY= -vaultResource example.vault.azure.net -tenantID 33583ee9ca5b完成> sh azure应用程序app10 1)名称:app10 ClientID: 12345t23aaa5 TokenEndpoint: "https://login.microsoftonline.com/33583ee9ca5b/" TenantID: 33583ee9ca5b VaultResource: example.vault.azure.net完成

通过使用GUI配置Azure应用程序

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

    Azure应用程序导航

  2. 在详细信息窗格中,单击添加

  3. 请输入以下参数:

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

    Azure应用程序参数

配置Azure密钥库

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

使用命令行方式配置Azure密钥库

在命令提示符下,输入:

add azure keyVault  -azureVaultName  -azureApplication  show azure keyVault 

例子:

add azure keyvault kv1 -azureapplication app10 -azurevaultName pctest.vault.azure.net > sh azure keyvault 1)名称:kv1 AzureVaultName: pctest.vault.azure.net AzureApplication: app10状态:"Access token succeeded " 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级遵从性。

使用CLI方式添加HSM密钥

在命令提示符下,输入:

add ssl hsmKey  [-hsmType ] [-key  | -serialNum ] {-password} [-keystore ] 

例子:

add ssl hsmKey h1 -keystore kv1 -key san15key -hsmType KEYVAULT > sh ssl hsmKey h1 HSM密钥名称:h1类型:KEYVAULT密钥:san15key密钥存储:kv1状态:" Created " Done 

下表列出了HSM键的状态可以采用的不同值,并简要介绍了每种状态。

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

通过GUI添加HSM键

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

    添加HSM键

  2. 输入以下参数的值。

    • HSM密钥名称-密钥的名称。
    • HSM type - HSM的类型。
    • 密钥存储-密钥存储对象的名称,表示存储密钥的HSM。例如,密钥库对象或Azure密钥库认证对象的名称。仅适用于KEYVAULTHSM类型。

    HSM关键参数

  3. 点击添加

添加证书密钥对

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

使用CLI方式添加证书-密钥对

在命令提示符下,输入:

add ssl certKey  (-cert  [-password]) -hsmKey ] show ssl certKey 

例子:

添加ssl certKey serverrsa_2048 -cert /nsconfig/ssl/san_certs/san15。pem -hsmKey h1 > sh ssl certkey serverrsa_2048名称:serverrsa_2048状态:有效,截止日期:9483版本:3序列号:F5CFF9EF1E246022签名算法:sha256WithRSAEncryption颁发者:C=in,O=citrix,CN=ca有效期不早:Mar 20 05:42:57 2015 GMT不晚:Mar 12 05:42:57 2045 GMT证书类型:"服务器证书"主题:C=in,O=citrix公钥算法:rsaEncryption公钥大小:2048 Ocsp响应状态:NONE Done 

使用GUI添加证书-密钥对

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

    添加证书密钥对

  2. 请输入以下参数:

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

    证书密钥对参数

  3. 点击安装

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

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

使用命令行绑定SSL证书-密钥对

在命令提示符下,输入:

绑定ssl vserver  -certkeyName < certificatekeypairname >显示ssl vserver  

例子:

bind ssl vserver v1 -certkeyName serverrsa_2048 sh ssl vserver v1 ssl高级配置:DH: DISABLED DH私钥指数大小限制:DISABLED Ephemeral RSA: ENABLED刷新计数:0会话重用:ENABLED超时:120秒Cipher重定向:DISABLED ClearText Port: 0客户端认证:DISABLED ssl重定向:DISABLED非FIPS加密:DISABLED SNI: DISABLED OCSP Stapling: DISABLED HSTS: DISABLED HSTS inclesubdomains: 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 sign - digest Check: DISABLED Zero RTT Early Data: DISABLED DHE Key Exchange With PSK: NO ticket 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:默认密码列表,加密强度>= 128bit Done 

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

  1. 导航到流量管理>负载均衡>虚拟服务器并打开SSL虚拟服务器。单击Certificate部分内的。

    服务器证书

  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 Level 2支持。

支持哪些键类型?

只支持RSA密钥类型。

支持什么密钥大小?

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

支持哪些密码?

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

是否记录事务?

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

4月9日16:35:30  10.102.57.30 04/09/2019:16:35:30 GMT 0- ppe -0: default SSLLOG SSL_HANDSHAKE_SUCCESS 896 0:后端SPCBId 30894 - ServerIP 104.211.224.186 - ServerPort 443 - ProtocolVersion TLSv1.2——密码套件”ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Non-Export 256位”-会话新SERVER_AUTHENTICATED serialnumber“200005 a75b04365827852d630000000005a75b”——SignatureAlgorithm“sha256WithRSAEncryption”——ValidFrom“格林尼治时间2019年3月17日03:28:42”——ValidTo“格林尼治时间2021年3月17日03:28:42”——HandshakeTime 40毫秒4月9日16:35:30 < local0.debug > 10.102.57.30 04/09/2019:16:35:30 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"四月9日16:35:30  10.102.57.30 04/09/2019:16:35:30 GMT 0- pe -0: default SSLLOG SSL_HANDSHAKE_SUBJECTNAME 898 0: SPCBId 30894 - SubjectName " CN=vault.azure.net" 
支持Azure密钥库