订购 SSL/TLS 公用证书
您可以使用 IBM Cloud® Secrets Manager 来存储,请求和生成可用于应用程序或服务的公共 SSL/TLS 证书。
SSL/TLS 证书是一种数字证书类型,用于在服务器和客户机之间建立通信隐私。 证书由 认证中心(CA)发放数字证书的第三方可信组织或公司。 认证中心通常会对被授予唯一证书的个人进行身份验证。 发放,并包含用于在端点之间创建可信和安全连接的信息。 将证书添加到 Secrets Manager 实例后,可以使用该证书来保护云部署或本地部署的网络通信。 您的证书安全地存储在专用 Secrets Manager 服务实例中,您可以在其中集中管理其生命周期。
在 Secrets Manager中,通过第三方认证中心 Secrets Manager 订购的证书是公用证书。 导入到服务的证书是 已导入的证书 (imported_cert
)。使用专用认证中心创建的证书是 专用证书 (private_cert
)。
准备工作
开始之前,请确保您具有所需的访问级别。 要创建或添加私钥,您需要 写入者 服务角色或更高级别的。
在订购证书之前,请确保:
- 准备实例以订购证书。
- 查看可用的认证中心和 DNS 提供程序配置。 要查看为实例定义的配置,请转至 Secrets Manager UI 中的“密钥引擎> 公用证书”页面。
要使用当前未与服务集成的 DNS 提供程序,您不需要添加配置来订购公用证书。
订购公用证书
为实例 配置公用证书引擎 后,可以使用 Secrets Manager 从 Let 's Encrypt 请求公用 SSL/TLS 证书。 在向您发放证书之前,Secrets Manager 使用域验证来验证域的所有权。 订购证书时:
-
Secrets Manager 将您的请求发送到所选认证中心。 证书的状态将更改为 预激活,以指示正在处理您的请求。
-
如果验证成功完成,那么将发出您的证书,并且其状态将更改为 活动。
-
如果验证未成功完成,那么证书状态将更改为 已取消激活。 从私钥表中,可以通过单击 操作 图标
> 查看详细信息来检查证书的发放详细信息。
-
如果验证未成功完成,那么证书状态将更改为 已取消激活。 从私钥表中,可以通过单击 操作 图标
> 查看详细信息来检查证书的发放详细信息。
-
如果验证未成功完成,那么证书状态将更改为 已取消激活。 您可以使用 获取私钥元数据 API 来检查
resources.issuance_info
字段以获取有关证书的发放详细信息。 -
发出证书后,您可以将其部署到集成应用程序,下载或修改其轮换选项。
在 UI 中使用集成 DNS 提供程序订购公用证书
您可以使用 Secrets Manager UI 来订购证书。
-
在控制台中,单击 菜单 图标
> 资源列表。
-
从服务列表中,选择 Secrets Manager的实例。
-
在“私钥”表中,单击 添加。
-
单击 订购公用证书 磁贴。
-
添加名称和描述以轻松识别证书。
-
选择要分配给密文的密文组。
没有秘密小组吗 在 私钥组 字段中,可以单击 创建 以提供新组的名称和描述。 您的私钥将自动添加到新组。 有关私钥组的更多信息,请查看 组织私钥。
-
可选: 添加标签以帮助您在实例中搜索类似私钥。
-
可选: 将元数据添加到私钥或私钥的特定版本。
- 上载文件或输入 JSON 格式的元数据和版本元数据。
-
单击下一步。
-
选择证书颁发机构配置。
您选择的配置将确定用于签署和发放证书的认证中心。 要查看为实例定义的配置,可以转至 密钥引擎> 公用证书。
-
选择要用于为证书生成公用密钥的密钥算法。
您选择的密钥算法确定要用于生成密钥和签署证书的加密算法 (RSA
或 ECDSA
) 和密钥大小。 对于寿命更长的证书,建议使用更长的密钥长度来提供更多的加密保护。 选项包括 RSA2048
,RSA4096
,ECDSA256
和 ECDSA384
。
-
可选: 为证书启用高级选项。
-
要将已发放的证书与中间证书捆绑在一起,请将捆绑开关切换到 开启。 捆绑证书后,无法再将其取消捆绑。 如果选择不捆绑证书,那么只能通过创建新私钥来更改此私钥。
-
要对证书启用自动旋转,请将旋转切换开关切换到 开启。 证书在到期前 31 天轮换。
-
要在每次轮换时请求具有证书的新专用密钥,请将再加密开关切换到 开启。
-
选择 DNS 提供程序配置。
您选择的配置将确定 DNS 提供程序以验证域的所有权。 要查看为实例定义的配置,可以转至 密钥引擎> 公用证书。
-
添加要包含在请求中的域。
-
单击 选择域。
-
从域列表中,选择证书的公共名称。
通用名称为可选输入项。 如果未明确指定通用名称,Let's encrypt会自动分配第一个不超过64个字符的备用名称作为通用名称。 如果没有找到这样的别名,证书将在没有通用名的情况下签发。
您也可以选择使用 手动添加域字段手动添加有效域。
-
单击下一步。
-
查看证书的详细信息。
-
单击添加。
订购证书时,将进行域验证以验证所选域的所有权。 此过程可能需要几分种才能完成。 在您提交证书详细信息后,Secrets Manager 会将您的请求发送至选定的证书颁发机构。 发出证书后,您可以将其部署到集成应用程序,下载或手动对其进行轮换。 SSL/TLS 的专用密钥直接在 Secrets Manager 中生成并安全存储。
需要检查订单状态吗? 从私钥表中,可以通过单击 操作 图标 > 查看详细信息来检查证书的发放详细信息。
从 CLI 订购具有集成 DNS 提供程序的公用证书
开始之前,请 按照 CLI 文档 设置 API 端点。
要使用 Secrets Manager CLI 插件来订购具有集成 DNS 提供程序的公用证书,请运行 ibmcloud secrets-manager secret-create
command.For,以下命令将从您指定的认证中心请求公用证书密钥。
订购证书时,将进行域验证以验证所选域的所有权。 此过程可能需要几分种才能完成。
ibmcloud secrets-manager secret-create --secret-prototype=
'{
"name": "example-public-certificate",
"description": "Extended description for this secret.",
"secret_type": "public_cert",
"secret_group_id": "bc656587-8fda-4d05-9ad8-b1de1ec7e712",
"labels": [
"dev","us-south"
],
"dns": "dns_provider",
"common_name": "cert_common_name"
"alt_names": [
"alt_name1", "alt_name2"
],
"ca": "lets-encrypt-config",
"key_algorithm": "RSA2048",
"rotation": {
"auto_rotate": true,
"rotate_keys":false
},
"custom_metadata" : {
"anyKey" : "anyValue"
},
"version_custom_metadata" : {
"anyKey" : "anyValue"
}
}
此命令将输出私钥的标识值以及其他元数据。 有关命令选项的更多信息,请参阅 ibmcloud secrets-manager secret-create
。
使用 API 对具有集成 DNS 提供程序的公用证书进行排序
您可以通过调用 Secrets Manager API 以编程方式订购证书。
以下示例显示可用于订购证书的查询。 调用 API 时,请将标识变量和 IAM 令牌替换为特定于 Secrets Manager 实例的值。
您可以使用 custom_metadata
和 version_custom_metadata
请求参数来存储与组织需求相关的元数据。 仅针对私钥版本返回 version_custom_metadata
的值。 私钥的定制元数据存储为最多 50 个版本的所有其他元数据,并且不得包含机密数据。
订购证书时,将进行域验证以验证所选域的所有权。 此过程可能需要几分种才能完成。
curl -X POST
-H "Authorization: Bearer {iam_token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"name": "example-public-certificate",
"description": "Description of my public certificate",
"secret_type": "public_cert",
"secret_group_id": "bfc0a4a9-3d58-4fda-945b-76756af516aa",
"labels": [
"dev",
"us-south"
],
"common_name": "example.com",
"alt_names": [
"s1.example.com",
"*.s2.example.com"
],
"ca": "lets-encrypt-config",
"dns": "cloud-internet-services-config",
"rotation": {
"auto_rotate": true,
"rotate_keys": true
},
"bundle_certs": true,
"custom_metadata": {
"metadata_custom_key": "metadata_custom_value"
},
"version_custom_metadata": {
"custom_version_key": "custom_version_value"
}
}' \
"https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets"
当您提交证书详细信息时,Secrets Manager 会将您的请求发送到所选的证书颁发机构。 发出证书后,您可以将其部署到集成应用程序,下载或手动对其进行轮换。 SSL/TLS 的专用密钥直接在 Secrets Manager 中生成并安全存储。 有关必需和可选请求参数的更多信息,请参阅 创建私钥。
需要检查订单状态吗? 使用 获取私钥元数据 API 来检查 resources.issuance_info
字段以获取有关证书的发放详细信息。
使用 Terraform 订购具有集成 DNS 提供程序的公用证书
以下示例显示可用于订购公用证书的配置。
resource "ibm_sm_public_certificate" "sm_public_certificate" {
instance_id = local.instance_id
region = local.region
name = "test-public-certificate"
secret_group_id = "default"
ca = ibm_sm_public_certificate_configuration_ca_lets_encrypt.my_lets_encrypt_config.name
dns = ibm_sm_public_certificate_configuration_dns_cis.my_cis_dns_config.name
rotation {
auto_rotate = true
rotate_keys = false
}
}
在 UI 中使用您自己的 DNS 提供程序订购公用证书
要在 UI 中使用手动 DNS 提供程序来创建公用证书,请完成以下步骤。
-
在控制台中,单击 菜单 图标
> 资源列表。
-
从服务列表中,选择 Secrets Manager的实例。
-
在“私钥”表中,单击 添加。
-
单击 订购公用证书 磁贴。
-
添加名称和描述以轻松识别证书。
-
选择要分配给密文的密文组。
没有秘密小组吗 在 私钥组 字段中,可以单击 创建 以提供新组的名称和描述。 您的私钥将自动添加到新组。 有关私钥组的更多信息,请查看 组织私钥。
-
可选: 添加标签以帮助您在实例中搜索类似私钥。
-
可选: 将元数据添加到私钥或私钥的特定版本。
- 上载文件或输入 JSON 格式的元数据和版本元数据。
-
单击下一步。
-
选择证书颁发机构配置。
您选择的配置将确定用于签署和发放证书的认证中心。 要查看为实例定义的配置,可以转至 密钥引擎> 公用证书。
- 选择要用于为证书生成公用密钥的密钥算法。
您选择的密钥算法确定要用于生成密钥和签署证书的加密算法 (RSA
或 ECDSA
) 和密钥大小。 对于寿命更长的证书,建议使用更长的密钥长度来提供更多的加密保护。 选项包括 RSA2048
,RSA4096
,ECDSA256
和 ECDSA384
。
- 可选: 为证书启用高级选项。
- 要将已发放的证书与中间证书捆绑在一起,请将捆绑开关切换到 开启。 捆绑证书后,无法再将其取消捆绑。 如果选择不捆绑证书,那么只能通过创建新私钥来更改此私钥。
- 要在每次轮换时请求具有证书的新专用密钥,请将再加密开关切换到 开启。
- 选择 手动 作为 DNS 提供程序。
- 添加要包含在请求中的域。
最多可以包含 100 个域,子域或通配符。 证书的公共名称或标准域名长度不能超过 64 个字符。 可以选择通配符作为公共名称。
- 在 公共名称 部分中,从域列表中选择证书的公共名称。
- 单击下一步。
- 查看证书的详细信息。
- 单击添加。
- 通过单击 操作 图标
> 查看详细信息来检查证书的发放详细信息。
- 单击 挑战 以访问与每个域关联的 TXT 记录名称和值。 您需要他们来完成挑战。
- 要验证域的所有权,请将为每个域提供的 TXT 记录手动添加到 DNS 提供者帐户。 您必须仅解决在到期日期之前未验证的问题。
如果为子域 (例如,sub1.sub2.domain.com
) 订购证书,那么需要将 TXT 记录添加到已注册的域 domain.com
。
- 验证您添加到域的 TXT 记录是否已传播。 根据您的 DNS 提供程序,可能需要一些时间才能完成。
- 确认已传播记录后,单击 验证 以请求 Let 's Encrypt 验证对域的提问并创建公用证书。
如果由于未成功传播 TXT 记录而导致订单失败,那么必须启动新订单才能继续。
- 发出证书后,请从 DNS 提供者帐户中的域中清除 TXT 记录并将其除去。
使用 API 订购具有您自己的 DNS 提供者的公用证书
要使用手动 DNS 提供程序创建公用证书,请完成以下步骤。
-
通过执行 添加 CA 配置 中定义的步骤来创建认证中心 (CA) 配置。
-
通过将
manual
指定为 DNS 配置来创建新的公用证书。curl -X POST -H "Authorization: Bearer {iam_token}" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d '{ "name": "example-public-certificate", "description": "description of my public certificate", "secret_type": "public_cert", "secret_group_id": "bfc0a4a9-3d58-4fda-945b-76756af516aa", "labels": [ "dev", "us-south" ], "common_name": "example.com", "alt_names": [ "s1.example.com", "*.s2.example.com" ], "ca": "lets-encrypt-config", "dns": "manual", "rotation": { "auto_rotate": true, "rotate_keys": true }, "bundle_certs": true, "custom_metadata": { "metadata_custom_key": "metadata_custom_value" }, "version_custom_metadata": { "custom_version_key": "custom_version_value" } }' \ "https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets"
示例响应:
"metadata": { "collection_type": "application/vnd.ibm.secrets-manager.secret+json", "collection_total": 1 }, "resources": [ { "alt_names": [ "domain2", "domain3" ], "common_name": "domain1", "created_by": "User", "creation_date": "2022-09-13T06:21:33Z", "crn": "secret crn", "description": "Description for ordered certificate.", "downloaded": false, "id": "38747ae6-8c69-d745-5276-cdf3157b9021", "issuance_info": { "auto_rotated": false, "bundle_certs": false, "ca": "ca_config_name", "challenges": [ { "domain": "domain1", "expiration": "2022-09-20T06:21:36Z", "status": "pending", "txt_record_name": "_acme-challenge.domain1.", "txt_record_value": "TA6J7fFYrwP3Jg-S_IAQSj2Ydqfw4Ycm4sMwlzuCcxk" }, { "domain": "domain2", "expiration": "2022-09-20T06:21:36Z", "status": "pending", "txt_record_name": "_acme-challenge.domain2.", "txt_record_value": "qSDrCkFAViX4xANKuEPcMNairWm1PUtROm6kp9bmSS0" }, { "domain": "domain3", "expiration": "2022-09-20T06:21:36Z", "status": "pending", "txt_record_name": "_acme-challenge.domain3.", "txt_record_value": "8dcgan91fW6aK3aIhPAVZRkHpbYEoMcCNPpVh1n4tSA" } ], "dns": "manual", "ordered_on": "2022-09-13T06:21:33Z", "state": 0, "state_description": "Pre-activation" }, "key_algorithm": "RSA2048", "labels": [], "last_update_date": "2022-09-13T06:21:33Z", "locks_total": 0, "name": "my-public-certificate", "rotation": { "auto_rotate": false, "rotate_keys": false }, "secret_type": "public_cert", "state": 0, "state_description": "Pre-activation", "versions": [], "versions_total": 1 } ]
-
通过将在提问中指定的 TXT 记录添加到 DNS 提供者帐户中的域以验证您对域的所有权,在这些提问到期之前完成标记为
pending
的提问。如果为子域 (例如,
sub1.sub2.domain.com
) 订购证书,那么需要将 TXT 记录添加到已注册的域domain.com
。 -
验证您添加的 TXT 记录是否已传播。 根据您的 DNS 提供程序,可能需要一些时间才能完成。
-
传播记录后,请调用 Secrets Manager 创建私钥操作 API 以请求 Let 's Encrypt 来验证对域的提问并创建公用证书。
curl -X POST --header "Authorization: Bearer {iam_token}" --header "Accept: application/json" --header "Content-Type: application/json" --data '{ "action_type": "public_cert_action_validate_dns_challenge" }'\ "https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets/{id}/actions"
如果需要稍后更新证书,那么可以使用 创建私钥操作 API,但使用操作
rotate
。 但是,无法在 Secrets Manager中自动轮换手动 DNS 提供程序证书。 -
发出证书后,请从 DNS 提供者帐户中的域中清除 TXT 记录并将其除去。
要自动创建公用证书吗? 如果通过 DNS 提供程序配置域,那么可以创建脚本来完成提问。 某些 DNS 提供程序提供了一个 API,用于检查新记录是否已完全传输。 如果 DNS 提供程序不提供此选项,那么可以将客户机配置为等待指定的时间量,有时最多一个小时。 在 Secrets Manager中,调用 validate-dns-challenges
后,可以通过获取证书元数据来检查证书发放的状态。 当返回的 IssuanceInfo.State
字段更改为 active
时,将发出证书。
使用 CLI 订购具有您自己的 DNS 提供者的公用证书
要使用 Secrets Manager CLI 插件订购具有您自己的 DNS 提供程序的公用证书,请运行 ibmcloud secrets-manager secret-create
命令。 例如,以下命令从您指定的认证中心请求公用证书私钥。
订购证书时,将进行域验证以验证所选域的所有权。 此过程可能需要几分种才能完成。
ibmcloud secrets-manager secret-create --secret-prototype \
'{
"name": "example-public-certificate",
"description": "Extended description for this secret.",
"secret_group_id": "bc656587-8fda-4d05-9ad8-b1de1ec7e712",
"labels": [
"dev","us-south"
],
"dns": "manual",
"common_name": "cert_common_name"
"alt_names": [
"alt_name1", "alt_name2"
],
"ca": "lets-encrypt-config",
"key_algorithm": "RSA2048",
"rotation": {
"enabled": false,
"rotate_keys":false
},
"custom_metadata" : {
"anyKey" : "anyValue"
},
"version_custom_metadata" : {
"anyKey" : "anyValue"
}
}
此命令将输出私钥的标识值以及其他元数据。 有关命令选项的更多信息,请参阅 ibmcloud secrets-manager secret-create
。
使用 Terraform 订购具有 Akamai DNS 提供程序的公用证书
要使用 Akamai 作为 DNS 提供者来创建公用证书,请完成以下步骤。
-
通过执行 添加 CA 配置 中定义的步骤来创建认证中心 (CA) 配置。
-
通过将
akamai
指定为 DNS 配置来创建新的公用证书。 -
请使用以下Akamai认证方法之一。 您可以使用
edgerc
文件或直接提供 Akamai 认证凭证。 了解有关 Akamai 认证凭证的更多信息。-
提供
.edgerc
文件和相关config_section
的路径。resource "ibm_sm_public_certificate" "sm_public_certificate" { instance_id = local.instance_id region = local.region name = "test-public-certificate" secret_group_id = "default" ca = ibm_sm_public_certificate_configuration_ca_lets_encrypt.my_lets_encrypt_config.name dns = “akamai” akamai { edgerc { path_to_edgerc = “/path/to/your/edgerc/file” config_section = “default” } } rotation { auto_rotate = true rotate_keys = false } }
2. Provide your Akamai's authentication credentials. ```terraform {: pre} resource "ibm_sm_public_certificate" "sm_public_certificate" { instance_id = local.instance_id region = local.region name = "test-public-certificate" secret_group_id = "default" ca = ibm_sm_public_certificate_configuration_ca_lets_encrypt.my_lets_encrypt_config.name dns = “akamai” akamai { config { client_secret = “your_client_secret” host = “your_host” access_token = "your_access_token" client_token = "your_client_token" } } rotation { auto_rotate = true rotate_keys = false } }
-
在Akamai相关域中新创建的TXT记录不会被自动删除。
使用 Terraform 订购具有您自己的 DNS 提供者的公用证书
-
通过执行 添加 CA 配置 中定义的步骤来创建认证中心 (CA) 配置。
-
通过将
manual
指定为 DNS 配置来创建新的公用证书。
resource "ibm_sm_public_certificate" "sm_public_certificate" {
instance_id = local.instance_id
region = local.region
name = "test-public-certificate"
secret_group_id = "default"
ca = ibm_sm_public_certificate_configuration_ca_lets_encrypt.my_lets_encrypt_config.name
dns = “manual”
rotation {
auto_rotate = true
rotate_keys = false
}
}
示例响应:
{
"alt_names": [
"domain2",
"domain3"
],
"bundle_certs": false,
"ca": "ca_config_name",
"common_name": "domain1",
"created_by": "User",
"creation_date": "2022-09-13T06:21:33Z",
"crn": "secret crn",
"description": "Description for ordered certificate.",
"downloaded": false,
"id": "38747ae6-8c69-d745-5276-cdf3157b9021",
"issuance_info": {
"auto_rotated": false,
"challenges": [
{
"domain": "domain1",
"expiration": "2022-09-20T06:21:36Z",
"status": "pending",
"txt_record_name": "_acme-challenge.domain1.",
"txt_record_value": "TA6J7fFYrwP3Jg-S_IAQSj2Ydqfw4Ycm4sMwlzuCcxk"
},
{
"domain": "domain2",
"expiration": "2022-09-20T06:21:36Z",
"status": "pending",
"txt_record_name": "_acme-challenge.domain2.",
"txt_record_value": "qSDrCkFAViX4xANKuEPcMNairWm1PUtROm6kp9bmSS0"
},
{
"domain": "domain3",
"expiration": "2022-09-20T06:21:36Z",
"status": "pending",
"txt_record_name": "_acme-challenge.domain3.",
"txt_record_value": "8dcgan91fW6aK3aIhPAVZRkHpbYEoMcCNPpVh1n4tSA"
}
],
"dns": "manual",
"ordered_on": "2022-09-13T06:21:33Z",
"state": 0,
"state_description": "Pre-activation"
},
"key_algorithm": "RSA2048",
"labels": [],
"last_update_date": "2022-09-13T06:21:33Z",
"locks_total": 0,
"name": "my-public-certificate",
"rotation": {
"auto_rotate": false,
"rotate_keys": false
},
"secret_type": "public_cert",
"state": 0,
"state_description": "Pre-activation",
"versions": [],
"versions_total": 1
}
-
通过将在提问中指定的 TXT 记录添加到 DNS 提供者帐户中的域以验证您对域的所有权,在这些提问到期之前完成标记为
pending
的提问。如果为子域 (例如,
sub1.sub2.domain.com
) 订购证书,那么需要将 TXT 记录添加到已注册的域domain.com
。 -
验证您添加的 TXT 记录是否已传播。 根据您的 DNS 提供程序,可能需要一些时间才能完成。
-
传播记录后,请求 Let 's Encrypt 验证对域的提问并创建公用证书。 您可以使用 Terraform 的 ibm_sm_public_certificate_action_validate_manual_dns 资源来执行此操作,如以下配置示例中所示:
resource "ibm_sm_public_certificate_action_validate_manual_dns" "sm_public_certificate_action_validate_manual_dns_instance" {
instance_id = local.instance_id
region = local.region
secret_id = ibm_sm_public_certificate.sm_public_certificate.secret_id
}
您可以使用 Terraform 的 depends_on
元参数 来确保以正确的逻辑顺序创建 Terraform 的配置,如以下指示信息中所示。
或者,您可以调用 Secrets Manager 创建私钥操作 API 以请求 Let 's Encrypt 来验证对域的挑战并创建公用证书。
curl -X POST
--header "Authorization: Bearer {iam_token}"
--header "Accept: application/json"
--header "Content-Type: application/json"
--data '{
"action_type": "public_cert_action_validate_dns_challenge"
}'\
"https://{instance_ID}.{region}.secrets-manager.appdomain.cloud/api/v2/secrets/{id}/actions"
-
证书颁发后(状态为
active
),您必须再次运行Terraform命令terraform apply
,以更新您的公共证书的Terraform资源,并使用新颁发的证书。 -
清除 DNS 提供者帐户中的域中的 TXT 记录并将其除去。