对 EP11 连接启用第二层认证-仅限标准套餐
要确保对执行加密操作的独占控制,您可以使用 Hyper Protect Crypto Services 证书管理器 CLI 为 EP11 (GREP11 或 PKCS #11 API) 连接启用第二层认证。 通过启用此功能,可以在 Identity and Access Management (IAM) 令牌的基础上向 EP11 应用程序添加额外的访问控制层。 建立相互 TLS 连接以确保只有具有有效客户机证书的 EP11 应用程序才能执行 EP11 操作。
EP11 连接的第二层认证当前仅受 Hyper Protect Crypto Services 标准套餐支持。
用于启用相互 TLS 认证的安全性和可用性最佳实践
通过将相互 TLS 作为用于访问 EP11的第二层认证,您需要了解以下安全性和可用性注意事项:
- 如果需要阻止某些人员访问 EP11,请将证书管理员与服务用户分开。 通过将 Certificate Manager 角色仅分配给管理客户机证书的人员,并将相应角色分配给其他服务用户以供操作使用来控制访问权。 要管理用户访问权,需要为您分配具有帐户管理访问权的 管理员 角色。
- 如果使用无效客户机证书或使用不可用的专用密钥来签署客户机证书,那么无法访问 EP11 API。 要确保可用性,请为多个人员分配 Certificate Manager 角色作为备份。 证书管理员需要安全地维护其唯一管理员专用密钥。 证书管理员还需要在 Hyper Protect Crypto Services 实例外部维护所有客户机证书的备份,例如,使用 IBM Cloud Secrets Manager。 还建议监视证书的到期时间。
准备工作
在为 GREP11 或 PKCS #11 API 连接启用第二层认证之前,请确保完成以下先决条件:
-
将为您分配 Certificate Manager IAM 角色以执行相应的操作。 有关分配 IAM 角色的更多信息,请参阅 管理用户访问权 和 管理对资源的访问权。
-
您在工作站上准备了用于 TLS 认证的客户机证书。 建议使用 IBM Cloud Secrets Manager 来管理应用程序和服务的 SSL/TLS 证书。 它是免费的,为您的证书提供持久存储器。
-
安装 IBM Cloud CLI。
-
使用以下命令安装最新的证书管理器 CLI 插件:
ibmcloud plugin install hpcs-cert-mgr
-
使用 CLI 登录到 IBM Cloud。 如果您有多个帐户,请选择创建服务实例所使用的帐户。 确保使用以下命令登录到服务实例所在的正确区域和资源组:
ibmcloud target -r <region> -g <resource_group>
步骤 1: 配置管理员签名密钥
要启用第二层认证,您需要首先配置管理员签名密钥。 签名密钥用于连接到用于处理证书管理器 CLI 命令的实例证书管理器服务器。
-
使用以下命令生成签名密钥对:
ibmcloud hpcs-cert-mgr adminkey set --crn HPCS_CRN [--private]
将
HPCS_CRN
变量替换为 Hyper Protect Crypto Services 实例的云资源名称 (CRN)。 您可以使用ibmcloud resource service-instances --long
命令来检索 CRN。 参数--private
是可选的。 如果使用此选项,那么证书管理器服务器 URL 将指向专用端点,并且您需要使用专用网络来连接服务实例。执行此命令后,将生成公用和专用密钥对并将其存储在本地工作站上。 缺省文件路径为
/Users/<username>/.hpcs-cert-mgr-cfg/
。 确保安全地存储签名密钥,例如使用密码保护。 公用密钥将自动上载到实例证书管理器服务器以进行签名验证。如果要刷新和更新签名密钥,可以使用
ibmcloud hpcs-cert-mgr adminkey update
命令来执行操作。 有关 CLI 用法的更多信息,请参阅 Hyper Protect Crypto Services 证书管理器 CLI 参考。 -
(可选) 使用以下命令检查并确认是否将公用密钥上载到服务器:
ibmcloud hpcs-cert-mgr adminkey get --crn HPCS_CRN [--private]
如果此命令返回公用密钥值,那么表示您已成功上载公用密钥。
步骤 2: 设置客户机 CA 证书以进行认证
配置管理员签名密钥后,需要将客户机 认证中心(CA)A trusted third-party organization or company that issues the digital certificates. The certificate authority typically verifies the identity of the individuals who are granted the unique certificate. 证书上载到实例证书管理器服务器以进行 TLS 客户机认证。
设置客户机 CA 证书后,无法再通过 UI 访问 EP11 密钥库和 EP11 密钥。
-
(可选) 准备 CA 和客户机证书
您可以使用 OpenSSL 实用程序为 GREP11 基础结构生成 CA 证书。
确保在可用于生成证书的工作站上安装 OpenSSL。 在工作站上完成以下步骤:
- 通过运行以下命令来生成 CA 密钥:
openssl genrsa -out ca.key 2048
- 通过运行以下命令创建 CA 证书:
openssl req -new -x509 -key ca.key -days 730 -out ca.pem
- 通过运行以下命令来创建客户机密钥:
openssl genrsa -out client-key.pem 2048
- 通过运行以下命令来创建客户机证书签名请求:
openssl req -new -key client-key.pem -out client.csr
- 通过运行以下命令来创建客户机证书:
openssl x509 -req -days 730 -in client.csr -CA ca.pem -CAcreateserial -CAkey ca.key -out client.pem
- 通过运行以下命令来生成 CA 密钥:
-
使用以下命令将客户机 CA 证书上载到服务器:
如果客户机证书由证书链中的中间 CA 证书签署,那么需要上载该中间 CA 证书。
ibmcloud hpcs-cert-mgr cert set --crn HPCS_CRN --admin-priv-key ADMIN_PRIV_KEY --cert-id CERT_ID --cert CERT_FILE [--private]
根据下表替换示例请求中的变量。
表 1. 描述上载 TLS 证书所需的变量 变量 描述 HPCS_CRN
必需。 Hyper Protect Crypto Services 实例的云资源名称 (CRN)。 您可以使用 ibmcloud resource service-instances --long
命令来检索 CRN。ADMIN_PRIV_KEY
必需。 在 步骤 1 中生成或更新的本地工作站上当前专用密钥的文件路径。 专用密钥用于向实例证书管理器服务器签署此命令操作。 CERT_ID
必需。 要分配给客户机 CA 证书以进行简单标识的字符串标识。 CERT_FILE
必需。 本地工作站上客户机 CA 证书的文件路径。 参数
--private
是可选的。 如果使用此选项,那么证书管理器服务器 URL 将指向专用端点,并且您需要使用专用网络来连接服务实例。 -
(可选) 使用以下命令检查并确认是否将客户机 CA 证书上载到服务器:
ibmcloud hpcs-cert-mgr cert list --crn HPCS_CRN [--private]
此命令列出服务器上由您管理的所有可用客户机 CA 证书。 如果列表包含先前上载的证书,那么意味着操作已成功完成。
步骤 3: 为 EP11 应用程序建立相互 TLS 连接
设置管理员签名密钥和客户机 CA 证书后,EP11 用户可以为使用 GREP11 或 PKCS #11 API 的应用程序建立相互 TLS 连接。 在 EP11 用户可以执行此操作之前,他们需要使用客户机证书配置 GREP11 或 PKCS #11 应用程序。
要使用 GREP11 或 PKCS #11 API,请确保为 EP11 用户分配了正确的 IAM 角色以执行 EP11 操作。 有关更多信息,请参阅 IAM 服务访问角色 中的 HSM API 选项卡。
-
配置 GREP11 应用程序
根据用于 GREP11 应用程序的编程语言,配置方法会根据相应的 gRPC 包而有所不同。 以下是 Golang 和 JavaScript的示例。
-
Golang 示例代码片段
cert, _ := tls.LoadX509KeyPair("client.pem", "client-key.pem") var callOpts = []grpc.DialOption{ grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{Certificates: []tls.Certificate{cert}})) }
需要根据
Config
类型 struct正确定义tls.Config{}
。 您需要至少设置Certificates
字段。 确保使用客户机密钥和客户机证书。 有关完整的 Golang 示例代码,请参阅 The sample GitHub repository for Golang。 -
JavaScript 示例代码片段
credentials.push(grpc.credentials.createSsl());
有关函数和参数的详细信息,请参阅 凭证模块文档。 您需要为
createSsl()
函数设置private_key
和cert_chain
参数。 有关完整的 JavaScript 示例代码,请参阅 JavaScript的样本 GitHub 存储库。
-
-
配置 PKCS #11 应用程序
PKCS #11 在其 配置文件 中处理相互 TLS。 根据以下示例更新
tls
字段:tls: enabled: true mutual: true cacert: certfile: "<client_certificate>" keyfile: "<client_certificate_private_key>"
根据下表替换示例中的变量:
表 3. 描述配置 PKCS #11 应用程序所需的变量 变量 描述 client_certificate
必需。 证书管理员上载到服务器的客户机证书的文件路径。 client_certificate_private_key
必需。 用于对证书进行签名的客户机证书专用密钥的文件路径。
配置后,当应用程序使用 GREP11 或 PKCS #11 API 来执行加密操作时,将建立相互 TLS 连接并验证客户机证书以进行额外的认证层。
(可选) 禁用相互 TLS 连接
如果不再需要第二层认证,那么可以通过删除服务器上的所有客户机 CA 证书来禁用该功能。
-
使用以下命令删除 CA 证书。 重复此步骤以删除服务器上的所有可用证书,从而禁用来自 EP11 应用程序的 TLS 连接。
ibmcloud hpcs-cert-mgr cert delete --crn HPCS_CRN --admin-priv-key ADMIN_PRIV_KEY --cert-id CERT_ID [--private]
根据下表替换示例请求中的变量。
表 2. 描述删除 CA 证书所需的变量 变量 描述 HPCS_CRN
必需。 Hyper Protect Crypto Services 实例的云资源名称 (CRN)。 您可以使用 ibmcloud resource service-instances --long
命令来检索 CRN。ADMIN_PRIV_KEY
必需。 存储在本地工作站上的当前专用密钥的文件路径。 专用密钥用于向实例证书管理器服务器签署此命令操作。 CERT_ID
必需。 要删除的 CA 证书的字符串标识。 您可以首先使用 ibmcloud hpcs-cert-mgr cert list --crn HPCS_CRN
命令来列出所有证书 (包括其标识)。参数
--private
是可选的。 如果使用此选项,那么证书管理器服务器 URL 将指向专用端点,并且您需要使用专用网络来连接服务实例。如果为服务实例设置了多个证书管理员,请确保删除这些管理员下的所有 CA 证书。
如果从证书管理器服务器中删除 CA 证书,那么使用此 CA 证书发放的客户机证书的所有应用程序都无法通过相互 TLS 连接访问 GREP11 实例。
从证书管理器服务器中删除所有 CA 证书后,将禁用 GREP11 实例的相互 TLS 认证。 然后,应用程序不需要相互 TLS 连接即可连接到 GREP11 实例。
-
(可选) 使用以下命令检查并确认是否删除了所有 CA 证书:
ibmcloud hpcs-cert-mgr cert list --crn HPCS_CRN [--private]
如果未返回任何证书,那么意味着将删除服务实例的所有证书。
-
(可选) 更新 GREP11 或 PKCS #11 应用程序以删除证书配置,以便应用程序不再将证书用于将来的 API 连接。
下一步
- 有关完整的证书管理器 CLI 命令参考,请参阅 Hyper Protect Crypto Services 证书管理器 CLI 插件。
- 有关 GREP11 API 和 PKCS #11 API 参考,请参阅 加密操作: GREP11 API 和 加密操作: PKCS #11 API。