你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 云 HSM 故障排除

本文可帮助你排查使用 Azure Cloud HSM 服务时可能会遇到的常见问题和错误。 有关修复特定群集节点中缺少的用户或密钥的指导,请参阅跨 Azure Cloud HSM 节点同步用户和密钥

常见错误消息

以下部分回答了有关常见错误的问题,包括与virtual machines(VM)和硬件安全模块(HSM)相关的错误。

为什么在运行azcloudhsm_mgmt_util时收到错误消息“证书错误: [证书签名失败]” ?

执行以下步骤时,可能会出现此错误:

  1. 从另一个 VM 创建和初始化Azure云 HSM 部署。
  2. 尝试安装云 HSM 客户端 SDK,然后从另一个缺少或没有用于初始化的管理 VM 中的正确 PO.crt 文件运行。

如果将 PO.crt 文件从管理员 VM 复制到新 VM 并重新运行 azcloudhsm_mgmt_util,应会发现已成功连接到 HSM。

运行 azcloudhsm_client 时,为何收到错误消息“INF: shutdown_ssl_socket: SSL_shutdown 已发送 close_notify 警报”?

执行以下步骤时,可能会出现此错误:

  1. 从另一个 VM 创建和初始化Azure云 HSM 部署。
  2. 尝试安装云 HSM 客户端 SDK,然后从另一个缺少或没有用于初始化的管理 VM 中的正确 PO.crt 文件运行。

如果将 PO.crt 文件从管理员 VM 复制到新 VM 并重新运行 azcloudhsm_client,应会发现已成功连接到 HSM。

为什么收到错误消息“azcloudhsm_application.cfg 不存在”?

若要确保应用程序成功执行,必须满足以下两个条件:

  • 该文件 azcloudhsm_application.cfg 与应用程序位于同一目录中。

  • 该工具 azcloudhsm_client 正在运行。 如果azcloudhsm_client不活跃,可能会遇到套接字连接失败。

    同样,缺少 azcloudhsm_application.cfg 文件会导致错误消息。 根据应用程序的执行位置,可能需要将 azcloudhsm_application.cfg 文件从 Azure Cloud HSM SDK 目录复制到运行应用程序的目录。

适用于 Azure Cloud HSM 的 OpenSSL 引擎

Azure Cloud HSM 的 OpenSSL 引擎是否支持Windows?

否。 适用于 Azure Cloud HSM 的 OpenSSL 引擎仅支持 Linux(Ubuntu 20.04、Ubuntu 22.04、Ubuntu 24.04、RHEL 7、RHEL 8、RHEL 9 和 CBL Mariner 2)。

为什么收到错误消息“无效的引擎'azcloudhsm_openssl'无法加载共享库”?

错误消息表明未配置必备环境变量 LD_LIBRARY_PATH 。 此配置是必需的。 将 LD_LIBRARY_PATH 环境变量设置为 Azure Cloud HSM SDK 所在的目录。

必须通过运行以下命令来更新环境变量以反映正确的 SDK 版本:

export LD_LIBRARY_PATH=/opt/azurecloudhsm/lib64/:$LD_LIBRARY_PATH

为什么收到错误消息“未设置环境变量azcloudhsm_openssl_conf”?

错误消息指示未配置必备环境变量 azcloudhsm_openssl_conf 。 将 azcloudhsm_openssl_conf 环境变量设置为 Azure Cloud HSM SDK 目录中 azcloudhsm_openssl_dynamic.conf 文件的文件路径位置。

必须通过运行以下命令来更新环境变量以反映正确的 SDK 版本:

export azcloudhsm_openssl_conf=/opt/azurecloudhsm/bin/azcloudhsm_openssl_dynamic.conf  

为什么收到错误消息“未设置环境变量azcloudhsm_password”?

错误消息表明未配置必备环境变量 azcloudhsm_password 。 将 azcloudhsm_password 环境变量设置为值 cryptouser:password

必须更新环境变量以反映正确的加密用户和密码:

export azcloudhsm_password="cu1:user1234"

适用于 Azure 云 HSM 的 JCE 提供程序

以下部分回答了与Java加密扩展(JCE)相关的问题。

JCE 与 Azure Cloud HSM 的集成是否支持Windows?

否。 JCE 与 Azure Cloud HSM 集成仅支持 Linux(Ubuntu 20.04、Ubuntu 22.04、RHEL 7、RHEL 8、CBL Mariner 2)。

为什么收到错误消息“找不到用于登录 HSM 的凭据”?

此错误表明在查找或验证登录到 Cloud HSM 所需的凭据时出现了问题。 在使用本文档中的示例或将 Azure Cloud HSM 的 JCE 提供程序集成到应用程序中时,必须使用凭据显式登录:

// Explicit Login with Credentials
LoginManager lm=LoginManager.getInstance();
lm.login("PARTITION_1","cu1","user1234");

// Logout of the HSM
lm.logout();

为什么收到错误消息“此操作的属性的值为 0? 应为用户 KEK 设置属性”?

此错误指明未创建用户生成的密钥加密密钥 (KEK),未将其指定为可提取,并且将 wrap_with_trusted 设置为 1。 有关执行密钥导入、密钥包装和密钥解包操作时要使用的适当设置,请参阅有关在 JCE 集成指南中创建用户生成的 KEK 的部分

为什么收到错误消息“守护程序套接字连接错误,API 登录失败”?

此错误表明在查找或验证登录到 Cloud HSM 所需的凭据时出现了问题。 在使用 JCE 集成指南中的样本或将 Azure Cloud HSM JCE 提供程序整合到您的应用程序中时,明确使用凭据登录以确保成功连接是至关重要的。

Azure 云端 HSM 的 PKCS#11 库

为什么收到错误消息“C_Login失败并出现错误代码:0xa3”?

此错误 0xa3 指示登录失败。 失败可能与要传递的 PIN 参数的格式相关,或者 PIN(密码)可能不正确。

应采用以下格式提供 PIN: char pPin[256] = "crypto_user:user123";pPin值应遵循<username><password>结构。 验证是否以此格式提供 pPin 值,因为任何偏差都可能导致登录失败。

为什么收到错误消息“C_Initialize() 失败,错误代码为 00000005(无法连接套接字)”?

期间 C_Initialize 套接字连接失败可能与系统上未运行的 azcloudhsm_client 工具相关。 要使 PKCS#11 应用程序成功运行, azcloudhsm_client 必须正在运行。 可以在单独的终端中运行以下任一命令来启动 azcloudhsm_client

如果使用 DEB 或 RPM 安装了 Azure Cloud HSM SDK,则客户端不会自动配置为作为服务运行。 在安装过程中,SDK 在 /etc/systemd/system/azure-cloud-hsm.service 下包括服务单元文件。 若要启用 azcloudhsm_client作为服务运行,请使用预定义的 azure-cloud-hsm.service 文件。

systemd重新加载配置并启用服务以确保它持续运行。 执行以下步骤:

  1. 打开终端窗口并将目录更改为云 HSM 服务单元文件所在的目录 /etc/systemd/system

    cd /etc/systemd/system
    
  2. 启动并启用云 HSM 客户端服务:

    sudo systemctl start azure-cloud-hsm.service
    sudo systemctl enable azure-cloud-hsm.service
    
  3. 检查云 HSM 客户端服务的状态:

    sudo systemctl status azure-cloud-hsm.service
    
  4. 重新加载systemd配置:

    sudo systemctl daemon-reload
    sudo systemctl list-units --type=service --state=running
    

Linux (手动)

如果客户端守护程序未运行,请启动它:

sudo ./azcloudhsm_client azcloudhsm_client.cfg

还可以使用以下命令选择在后台运行客户端守护程序。 或者,可以将客户端守护程序作为服务运行,以确保它始终运行。

sudo ./azcloudhsm_client azcloudhsm_client.cfg > /dev/null 2>&1 &

如果使用 MSI 包安装了 Azure Cloud HSM SDK,则客户端已配置为作为服务运行。 如果客户端未运行,可以打开 Services.msc,右键单击 Microsoft Azure Cloud HSM 客户端服务,然后选择 Start

Windows(手动)

如果客户端守护程序未运行,请启动它:

cd C:\Program Files\Microsoft Azure Cloud HSM Client SDK 
.\azcloudhsm_client.exe .\azcloudhsm_resource.cfg 

适用于 Linux 的 PKCS#11 库如何了解如何查找客户端配置?

PKCS#11 库知道如何查找客户端配置,因为你必须在运行应用程序并使用 PKCS#11 库的应用程序服务器上拥有分区所有者证书(PO.crt)的副本。 除了分区所有者证书:

  • 必须在已安装 SDK 的应用程序服务器上更新 /azcloudhsm_client/azcloudhsm_client.cfg,以指向 Azure Cloud HSM 部署(即 hsm1.chsm-<resource-name>-<unique-string>.privatelink.cloudhsm.azure.net)。
  • azcloudhsm_client 工具必须在连接到 Azure Cloud HSM 部署的应用程序服务器上运行。
  • 在 PKCS#11 应用程序中,必须使用语法 <username>:<password> 指定 PIN。 此 PIN 用于调用 C_Login 来进行 Azure 云 HSM 部署。
  • 必须在 PKCS#11 应用程序中包括 pkcs11_headers/include/cryptoki.hpkcs11_headers/include/pkcs11t.h,才能使用适用于 Azure Cloud HSM 的 PKCS#11 库。

Windows PKCS#11 库(azcloudhsm_pkcs11.dll)如何查找客户端配置?

Azure Cloud HSM Windows SDK 中的 azcloudhsm_pkcs11.dll 文件知道如何查找客户端配置,因为必须在运行应用程序并使用 PKCS#11 库的应用程序服务器上拥有分区所有者证书(PO.crt)的副本。 除了分区所有者证书:

  • 必须在已安装 SDK 的应用程序服务器上更新 /azcloudhsm_client/azcloudhsm_client.cfg,以指向 Azure Cloud HSM 部署(即 hsm1.chsm-<resource-name>-<unique-string>.privatelink.cloudhsm.azure.net)。
  • azcloudhsm_client 工具必须在连接到 Azure Cloud HSM 部署的应用程序服务器上运行。
  • 在 PKCS#11 应用程序中,必须使用语法 <username>:<password> 指定 PIN。 此 PIN 用于调用 C_Login 来进行 Azure 云 HSM 部署。
  • 必须在 PKCS#11 应用程序中包括 pkcs11_headers\include\cryptoki.hpkcs11_headers\include\pkcs11t.h,才能使用适用于 Azure Cloud HSM 的 PKCS#11 库。

尝试设置密钥或密钥存储时,为什么遇到 PKCS#11 错误?

确保已运行 Azure Cloud HSM 客户端(sudo ./azcloudhsm_client azcloudhsm_client.cfg)。 用户不正确、密码不正确、未运行液体安全客户端或客户端无法连接可能会导致以下错误:

Error Message:ERROR at line 1:
ORA-28407: Hardware Security Module failed with PKCS#11 error
CKR_GENERAL_ERROR(5)

PKCS#11 库 (azcloudhsm_pkcs11.dll) 如何与 OpenSC 集成?

在使用开源智能卡(OpenSC)工具时,您必须使用 --sensitive--private 参数,因为敏感属性和私有属性无法 0。 如果没有这些参数,OpenSC 工具会将敏感属性和私有属性设置为 0。 这些属性会生成异常,因为 Azure Cloud HSM 始终施加敏感和私有行为。

下面是高级加密标准(AES)包装示例:

pkcs11-tool.exe --sensitive --private --module "C:\AzureCloudHSM-ClientSDK\AzureCloudHSM-ClientSDK-Windows-<version>\libs\pkcs11\azcloudhsm_pkcs11.dll" --login --login-type user --pin cu1:user1234 --keygen --key-type AES:32*

下面是椭圆曲线加密 (ECC) P521 示例:

pkcs11-tool.exe --sensitive --private --module "C:\AzureCloudHSM-ClientSDK\AzureCloudHSM-ClientSDK-Windows-<version>\libs\pkcs11\azcloudhsm_pkcs11.dll" --login --login-type user --pin cu1:user1234 --keypairgen --key-type EC:prime256v1 --usage-sign

用于 Azure Cloud HSM 的 SSL/TLS 卸载处理

以下部分回答了与卸载安全套接字层(SSL)或传输层安全性(TLS)处理相关的问题。

用于 Azure Cloud HSM 的 OpenSSL 引擎是否支持 PKCS#11 进行 SSL/TLS 卸载?

否。 适用于 Azure Cloud HSM 的 OpenSSL 引擎不支持用于 SSL/TLS 卸载的 PKCS#11。 需要 PKCS#11 进行 SSL/TLS 卸载的客户必须使用 托管 HSM 的 TLS 卸载库

运行azcloudhsm_util时,为何收到错误消息“无法连接套接字,LIQUIDSECURITY:守护程序套接字连接错误” ?

错误消息表明 azcloudhsm_client 未运行。 确保azcloudhsm_client正在运行,以便Azure云 HSM 工具正常运行。 可以通过确保它作为服务运行或在单独的终端中手动运行以下命令之一来启动 azcloudhsm_client

如果使用 DEB 或 RPM 安装了 Azure Cloud HSM SDK,则客户端不会自动配置为作为服务运行。 在安装过程中,SDK 在 /etc/systemd/system/azure-cloud-hsm.service 下包括服务单元文件。 若要启用 azcloudhsm_client作为服务运行,请使用预定义的 azure-cloud-hsm.service 文件。

systemd重新加载配置并启用服务以确保它持续运行。 执行以下步骤:

  1. 打开终端窗口并将目录更改为云 HSM 服务单元文件所在的目录 /etc/systemd/system

    cd /etc/systemd/system
    
  2. 启动并启用云 HSM 客户端服务:

    sudo systemctl start azure-cloud-hsm.service
    sudo systemctl enable azure-cloud-hsm.service
    
  3. 检查云 HSM 客户端服务的状态:

    sudo systemctl status azure-cloud-hsm.service
    
  4. 重新加载systemd配置:

    sudo systemctl daemon-reload
    sudo systemctl list-units --type=service --state=running
    

Linux (手动)

如果客户端守护程序未运行,请启动它:

sudo ./azcloudhsm_client azcloudhsm_client.cfg

还可以使用以下命令选择在后台运行客户端守护程序。 或者,可以将客户端守护程序作为服务运行,以确保它始终运行。

sudo ./azcloudhsm_client azcloudhsm_client.cfg > /dev/null 2>&1 &

为什么收到错误消息“未设置环境变量azcloudhsm_password”?

错误消息表明未配置必备环境变量 azcloudhsm_password 。 若要解决此问题,请将 azcloudhsm_password 环境变量设置为值 cryptouser:password

更新环境变量以反映正确的加密用户和密码:

export azcloudhsm_password="cu1:user1234"

尝试导入密钥时,为什么收到错误消息“找不到密钥/令牌”或“无效的密钥句柄/令牌” ?

错误消息表明指定的包封密钥句柄(KEK 句柄 ID)不正确。 该参数 -f 指定要导入的密钥的文件名,而 -w 指定包装键句柄。 在创建用户生成的 KEK 期间,-w 值应为用户生成的 KEK ID 的密钥句柄 ID。

azcloudhsm_util singlecmd loginHSM -u CU -p user1234 -s cu1 importPrivateKey -l importTestKey -f key.pem -w 262150

尝试配置 NGINX 源时,为何收到错误消息“/configure: error: C compiler cc not found”?

错误消息表明,当您运行命令 configure 时,系统缺少一个 C 编译器。 根据您的安装情况,在运行以下命令后,您可能还需要安装openssl libssl-devzlib1g zlib1g-dev。 这些项是依赖项。

基于 Red Hat 的系统(使用 YUM)

sudo yum update
sudo yum groupinstall "Development Tools"

基于 Red Hat 的系统(使用 DNF)

sudo dnf update
sudo dnf install "Development Tools"

基于 Ubuntu 的系统(使用 APT)

sudo apt update  
sudo apt install build-essential 

为什么收到错误消息“/configure: error: SSL 模块需要 OpenSSL 库”?

错误消息指示需要 OpenSSL 库才能为 NGINX 启用 SSL 模块。 若要解决此问题,请运行以下命令,然后再次运行 configure

sudo apt-get install libssl-dev

为什么收到错误消息“/configure: error: HTTP gzip 模块需要 zlib 库”?

错误消息指示 NGINX 中的 HTTP gzip 模块需要 zlib 库。 若要解决此问题,请运行以下命令,然后再次运行 configure

sudo apt-get install zlib1g-dev

为什么收到错误消息“HSM 错误:RET_USER_LOGIN_FAILURE”?

错误消息表明,您尝试执行加密操作的一个或多个节点上不存在指定的用户。 尽管Azure云 HSM 使用包含三个节点的群集运行,但该操作被定向到登录失败的节点。

在这种情况下,critical_err_info_ 目录中会生成 AzureCloudHSM-ClientSDK 文件。 该文件显示“状态:HSM 错误:此用户不存在”。

若要缓解此错误,需要创建在 Azure Cloud HSM 部署的所有三个节点上复制的加密用户(CU)。 以下示例演示了启动azcloudhsm_mgmt_util以及管理员以加密官员 (CO) 用户身份登录的过程。 然后,该示例创建一个具有 CU 角色的 cu1 用户。

sudo ./azcloudhsm_mgmt_util ./azcloudhsm_mgmt_util.cfg
loginHSM CO admin adminpassword 
createUser CU cu1 user1234
logoutHSM
loginHSM CU cu1 user1234

如果现有用户在一个或多个节点中缺失,请参阅跨 Azure Cloud HSM 节点同步用户和密钥,了解识别和修复缺失用户的详细步骤。

如何显示我创建的 CRT、CSR 或密钥文件的内容?

若要显示在终端中创建的证书(CRT)、证书签名请求(CSR)或密钥文件的内容,请使用以下命令:

cat filename.key

若要显示隐私增强邮件(PEM)文件中包含的 X.509 证书的详细信息,请使用以下命令。 如果 PEM 文件包含私钥或其他类型的数据,则可能需要相应地调整命令。

openssl x509 -in filename.pem -text -noout

若要显示有关 CSR 的详细信息,请使用以下命令。 此信息包括主题、公钥和请求中包含的任何属性。

openssl req -in filename.csr -text -noout

若要显示有关 Rivest-Shamir-Adleman (RSA) 私钥的详细信息,请使用以下命令。 此信息包括密钥的模数、公共指数和其他参数。

openssl rsa -in filename.key -text -noout

若要显示有关椭圆曲线(EC)私钥的详细信息,请使用以下命令。 它显示曲线参数、私钥值和其他相关信息。

openssl ec -in filename.key -text -noout

如何在 Azure Cloud HSM 中生成 ED25519 密钥对进行签名?

ED25519密钥通常用于自签名证书或直接使用私钥的证书签名过程中。 可以使用 azcloudhsm_util 或适用于 Azure Cloud HSM 的 OpenSSL 引擎生成ED25519密钥对。

重要

不建议使用 openssl genpkeyopenssl ecparam。 使用 openssl genpkeyopenssl ecparam-engine azcloudhsm_openssl 生成 ED25519 或 ECCKeyPair 密钥不会产生 HSM 密钥。 而是生成软件密钥。 如果需要使用ED25519或其他 EC 密钥类型,必须通过 azcloudhsm_util 在 HSM 中创建密钥。

Openssl genpkey 并且 openssl ecparam 都是用于生成加密密钥的 OpenSSL 命令,但它们的作用不同,并支持不同的密钥类型。 在需要生成各种非对称加密密钥(包括 RSA、DSA、ECDSA 和 ED25519 密钥)时使用 openssl genpkeyopenssl ecparam专门用于生成椭圆曲线加密密钥(ECDSA),例如 prime256v1、secp384r1 或 secp521r1。

./azcloudhsm_util singlecmd loginHSM -u CU -p user1234 -s cu1 genECCKeyPair -i 28 -l labelED25519Test

在使用 Azure Cloud HSM OpenSSL 引擎生成 CSR 之前,是否可以使用azcloudhsm_util生成 RSA 和 EC 密钥?

是的。 可以 azcloudhsm_util 运行以下命令来创建 RSA 或 EC 密钥,然后将私钥提取到假 PEM 格式。 将 <private-key-handle> 替换为创建的 RSA 或 EC 密钥的私钥句柄。

PEM 格式的私钥元数据文件不包含任何敏感的私钥材料。 元数据标识私钥,只有用于 Azure Cloud HSM 的 OpenSSL 引擎才能理解此文件。

使用此命令创建 RSA 密钥:

./azcloudhsm_util singlecmd loginHSM -u CU -p user1234 -s cu1 genRSAKeyPair -m 2048 -e 65537 -l labelRSATest 
./azcloudhsm_util singlecmd loginHSM -u CU -p user1234 -s cu1 getCaviumPrivKey -k <private-key-handle> -out web_server_fake_PEM.key 
openssl req -new -key web_server_fake_PEM.key -out web_server.csr -engine azcloudhsm_openssl 
openssl x509 -req -days 365 -in web_server.csr -signkey web_server_fake_PEM.key -out web_server.crt -engine azcloudhsm_openssl 

使用此命令创建 EC 密钥:

./azcloudhsm_util singlecmd loginHSM -u CU -p user1234 -s cu1 genECCKeyPair -i 2 -l labelECTest 
./azcloudhsm_util singlecmd loginHSM -u CU -p user1234 -s cu1 getCaviumPrivKey -k <private-key-handle> -out web_server_fake_PEM.key 
openssl req -new -key web_server_fake_PEM.key -out web_server.csr -engine azcloudhsm_openssl 
openssl x509 -req -days 365 -in web_server.csr -signkey web_server_fake_PEM.key -out web_server.crt -engine azcloudhsm_openssl 

适用于 Azure Cloud HSM 的 SQL Server EKM

以下部分回答了与 SQL Server 中的可扩展密钥管理(EKM)功能相关的问题。

Azure云 HSM 的 SQL Server EKM 提供程序是否支持对称密钥?

否。 SQL Server不支持透明数据加密的对称密钥。 仅支持非对称密钥。

Azure 云 HSM 的 SQL Server EKM 提供程序是否支持 Linux 上的 SQL Server?

否。 Azure Cloud HSM 的 SQL Server EKM 提供程序仅支持Windows Server。

Azure云 HSM 的 SQL Server EKM 提供商是否支持 SQL Server SaaS/PaaS?

否。 Azure 云 HSM 仅提供基础设施即服务(IaaS)。 软件即服务(SaaS)或平台即服务(PaaS)客户应使用托管 HSM,该 HSM 支持对Azure SQL 数据库和Azure SQL 托管实例进行透明数据加密。

Azure 云 HSM 的 SQL Server EKM 提供程序是否支持多个登录、凭证和连接?

对于适用于 Azure Cloud HSM 的 SQL Server EKM 提供程序,登录或 SQL 连接受到限制,只能分配单个凭据。

为什么收到错误消息“错误:无法初始化加密提供程序。 提供程序错误代码:1。 (失败 - 有关详细信息,请查阅 EKM 提供程序)”?

安装SQL Server后,为 Azure Cloud HSM 运行 MSI 包时,可能会出现此常见错误。 重新启动 SQL Server 时错误消失了。 在此时,它会获取你在运行 Azure Cloud HSM 的 MSI 包时创建的环境变量和设置。

AD CS 与 Azure Cloud HSM 集成

以下部分回答了与Active Directory证书服务(AD CS)相关的问题。

尝试使用提供的示例从 Microsoft KSP 迁移证书时,为何会收到错误消息“无法打开 openssl-ca.cnf 文件” ?

此错误通常发生在尝试从密钥存储提供程序(KSP)迁移证书时,openssl-ca.cnf 文件不存在。 你可以自行创建文件或从另一个源获取该文件。

能否对使用 Azure 云 HSM 作为 SaaS 解决方案的企业网络中的服务器进行签名?

Azure云 HSM 仅限 IaaS。 但是,可以在企业网络中使用自己的签名服务器。

可以从本地网络网关配置站点到站点或点到站点 VPN 连接。 这是最常见的方法,适用于大多数用例。 设置企业网络本地服务器与部署 Azure Cloud HSM 的位置之间的 VPN 连接。 有关详细信息,请参阅 Tutorial:在 Azure 门户中创建站点到站点 VPN 连接

可以为本地签名服务器设置 AD CS。 SDK 必须位于本地主机上,并且客户端必须可以访问Azure虚拟网络中的专用 IP 地址。 需要满足以下要求:

  • 如果计算机存在适用于 Azure 云 HSM 的加密 API:下一代 (CNG) 提供程序,则需要在同一台计算机上运行 azcloudhsm_client
  • azcloudhsm_client 工具应能够与Azure虚拟网络的专用 IP 通信。

测试 AD CS 时,我们生成了 RSA 密钥对,然后使用证书管理进行签名。

唯一接受的方法是通过云 HSM 提供商(例如,azcloudhsm_util)进行签名或验证吗?

否。 建议使用 Azure Cloud HSM SDK 及其提供的接口(如 PKCS#11、CNG、KSP、JCE 和 OpenSSL 引擎)。 还可以使用签名工具(signtool.exe)进行签名或验证操作。

AD CS 配置为将 CNG 或 KSP 用于 Azure 云 HSM。

是否可以通过 signtool.exe 使用云 HSM 的签名/验证?

是的。 签名工具会自动转到云 HSM 部署。 无需使用 azcloudhsm_util。 我们包含在 azcloudhsm_util 说明中,作为客户快速测试和验证其 AD CS 配置的方式。

是否可以使用基于云 HSM 中的密钥对的自签名证书进行测试?

是的。 可以使用基于密钥对的自签名证书进行测试。

是否有集成或通过本地Windows证书存储提供证书的方法?

可以使用该工具 certreq.exe 实现此目的。

Azure云 HSM 的 CNG 和 KSP 提供程序支持哪些算法?

  • RSA 加密和解密
  • 使用 SHA1、SHA256、SHA384、SHA512 和 MD5 哈希算法进行 RSA 签名
  • ECC 曲线ECDSA_P256、ECDSA_P384和ECDSA_P521

如何更改或管理Windows上非管理员用户的私钥权限?

使用 KSP 或 CNG 为 Azure Cloud HSM 生成密钥时,仅向管理员授予对私钥的访问权限。 通过Microsoft 管理控制台(MMC)查看安全信息或修改权限可能会遇到困难。 此行为是有意的。

默认情况下,当您使用 KSP 或 CNG 时,只有 SYSTEM 和管理员可以访问新密钥的私钥文件。 如果需要为特定私钥文件向非管理员用户提供access,请标识私钥的文件名并直接分配权限。 私钥位于云 HSM 密钥的WindowsC:\Users\Default\AppData\Roaming\Microsoft\Crypto\CaviumKSP目录中。

azcloudhsm_ksp_import_key.exe 有什么用途?

可用于 azcloudhsm_ksp_import_key.exe 在云 HSM KSP 中导入或表示非对称密钥。

支持的算法是 RSA(2048 到 4096 的 256 倍数)、ECDSA 和 ECDH。 对于 ECDSA 和 ECDH,支持的曲线为 P256、P384 和 P521。 在云 HSM KSP 中导入或表示密钥后,应仅从云 HSM KSP 管理密钥。

可以通过虚拟网络进行连接。 使用这些工具:

  • azcloudhsm_mgmt_util 工具执行操作(HSM 上的管理任务)。 需要分区加密专员(PCO)认证。
  • 该工具 azcloudhsm_client (客户端守护程序)通过分区加密用户(PCU)凭据进行连接。

azcloudhsm_client 工具和应用程序需要在virtual network中的同一 VM 上运行。 原因是应用程序通过远程过程调用(RPC)连接到客户端进程。

Azure 云 HSM 服务会在 443 端口(azcloudhsm_client 请求)、444 端口(azcloudhsm_mgmt_util 请求)和 445 端口(服务器到服务器通信)上进行侦听。

前端端口是 TCP over TLS 协议的 2224 和 2225。 这些端口仅适用于客户。