在 IAM 中管理服务器证书 - Amazon Identity and Access Management
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

在 IAM 中管理服务器证书

要在 Amazon 中启用与您的网站或应用程序的 HTTPS 连接,您需要 SSL/TLS 服务器证书。对于 Amazon Certificate Manager (ACM) 支持的区域中的证书,我们建议您使用 ACM 预置、管理和部署您的服务器证书。在不支持的区域中,您必须将 IAM 作为证书管理器。要了解 ACM 支持的具体区域,请参阅《Amazon Web Services 一般参考》中的 Amazon Certificate Manager 端点和限额

只有当您必须在 ACM 不支持的区域中支持 HTTPS 连接时,才应使用 IAM 作为证书管理器。IAM 安全地加密您的私有密钥并将加密的版本存储在 IAM SSL 证书存储中。IAM 支持在所有区域部署服务器证书,但您必须从外部提供商获取证书,以便与 Amazon 搭配使用。您无法将 ACM 证书上传到 IAM。此外,您还无法从 IAM 控制台管理证书,

有关将第三方证书上传到 IAM 的更多信息,请参阅以下主题。

上传服务器证书 (Amazon API)

要将服务器证书上传到 IAM,您必须提供证书及其匹配的私有密钥。如果证书不是自签名的,则您还必须提供证书链。(上传自签名证书时无需证书链。) 在上传证书前,请确保您已具有所有这些项目而且它们满足以下条件:

  • 证书在上传时必须是有效的。您不能在证书有效期开始 (证书的 NotBefore 日期) 之前或证书有效期到期 (证书的 NotAfter 日期) 之后上传证书。

  • 私有密钥必须是未加密的。您不能上传受密码或口令保护的私有密钥。有关解密已加密的私有密钥的帮助信息,请参阅问题排查

  • 证书、私有密钥和证书链必须均采用 PEM 编码。有关将这些项目转换为 PEM 格式的帮助信息,请参阅问题排查

要使用 IAM API 上传证书,请发送 UploadServerCertificate 请求。以下示例说明如何使用 Amazon Command Line Interface (Amazon CLI) 执行该操作。示例假定以下各项:

  • PEM 编码的证书存储在名为 Certificate.pem 的文件中。

  • PEM 编码的证书链存储在名为 CertificateChain.pem 的文件中。

  • PEM 编码的未加密私有密钥存储在名为 PrivateKey.pem 的文件中。

  • (可选)您希望用键-值对标记服务器证书。例如,您可以添加标签键 Department 和标签值 Engineering 来帮助识别和组织证书。

要使用以下示例命令,请用自己的文件名替换这些文件名。将 ExampleCertificate 替换为已上传证书的名称。如果要标记证书,请将 ExampleKeyExampleValue 标签键值对替换为您自己的值。在一个连续行上键入命令。为更便于阅读,以下示例包含了换行符和多余的空格。

aws iam upload-server-certificate --server-certificate-name ExampleCertificate --certificate-body file://Certificate.pem --certificate-chain file://CertificateChain.pem --private-key file://PrivateKey.pem --tags '{"Key": "ExampleKey", "Value": "ExampleValue"}'

如果上述命令执行成功,则它将返回有关上传的证书的元数据,包括其 Amazon Resource Name (ARN)、友好名称、标识符 (ID)、到期日期、标签等。

注意

如果您要上传服务器证书以用于 Amazon CloudFront,则必须使用 --path 选项指定路径。路径必须以 /cloudfront 开头且必须包含尾部反斜杠 (例如,/cloudfront/test/)。

要使用 Amazon Tools for Windows PowerShell上传证书,请使用 Publish-IAMServerCertificate

检索服务器证书 (Amazon API)

要使用 IAM API 检索证书,请发送 GetServerCertificate 请求。以下示例说明如何使用 Amazon CLI 执行该操作。将 ExampleCertificate 替换为要检索的证书的名称。

aws iam get-server-certificate --server-certificate-name ExampleCertificate

如果上述命令执行成功,则它将返回证书、证书链 (如果已上传一个) 和有关证书的元数据。

注意

在您上传后,无法从 IAM 下载或检索私有密钥。

要使用 Amazon Tools for Windows PowerShell 检索证书,请使用 Get-IAMServerCertificate

列出服务器证书 (Amazon API)

要使用 IAM API 列出您已上传的服务器证书,请发送 ListServerCertificates 请求。以下示例说明如何使用 Amazon CLI 执行该操作。

aws iam list-server-certificates

如果上述命令执行成功,则它将返回包含有关每个证书的元数据的列表。

要使用 Amazon Tools for Windows PowerShell 列出您已上传的服务器证书,请使用 Get-IAMServerCertificates

标记和取消标记服务器证书 (Amazon API)

您可以将标签附加到 IAM 资源以组织和控制对这些资源的访问。要使用 IAM API 为现有的服务器证书添加证书,请发送 TagServerCertificate 请求。以下示例说明如何使用 Amazon CLI 执行该操作。

aws iam tag-server-certificate --server-certificate-name ExampleCertificate --tags '{"Key": "ExampleKey", "Value": "ExampleValue"}'

上述命令成功后,不会返回任何输出。

要使用 IAM API 取消标记服务器证书,请发送 UntagServerCertificate 请求。以下示例说明如何使用 Amazon CLI 执行该操作。

aws iam untag-server-certificate --server-certificate-name ExampleCertificate --tag-keys ExampleKeyName

上述命令成功后,不会返回任何输出。

重命名服务器证书或更新其路径 (Amazon API)

要使用 IAM API 重命名服务器证书或更新其路径,请发送 UpdateServerCertificate 请求。以下示例说明如何使用 Amazon CLI 执行该操作。

要使用以下示例命令,请将旧的证书名称和证书路径替换为新的,然后在一个连续行上键入命令。为更便于阅读,以下示例包含了换行符和多余的空格。

aws iam update-server-certificate --server-certificate-name ExampleCertificate --new-server-certificate-name CloudFrontCertificate --new-path /cloudfront/

如果上述命令执行成功,则它不会返回任何输出

要使用 Amazon Tools for Windows PowerShell 重命名服务器证书或更新其路径,请使用 Update-IAMServerCertificate

删除服务器证书 (Amazon API)

要使用 IAM API 删除服务器证书,请发送 DeleteServerCertificate 请求。以下示例说明如何使用 Amazon CLI 执行该操作。

要使用以下示例命令,请将 ExampleCertificate 替换为要删除的证书的名称。

aws iam delete-server-certificate --server-certificate-name ExampleCertificate

如果上述命令执行成功,则它不会返回任何输出

要使用 Amazon Tools for Windows PowerShell 删除服务器证书,请使用 Remove-IAMServerCertificate

问题排查

您必须先确保证书、私有密钥和证书链均是 PEM 编码的,然后才能将证书上传到 IAM。您还必须确保私有密钥是未加密的。请见以下示例。

例 PEM 编码证书示例
-----BEGIN CERTIFICATE----- Base64-encoded certificate -----END CERTIFICATE-----
例 PEM 编码的未加密的私有密钥示例
-----BEGIN RSA PRIVATE KEY----- Base64-encoded private key -----END RSA PRIVATE KEY-----
例 PEM 编码的证书链示例

一个证书链包含一个或多个证书。您可以使用文本编辑器、Windows 中的复制命令或 Linux cat 命令,以将证书文件串联到一个链中。如果包含多个证书,则每个证书必须证明上一个证书。您可以串联证书以完成该操作,包括最后的根 CA 证书。

以下示例包含三个证书,但证书链可能包含更多或更少的证书。

-----BEGIN CERTIFICATE----- Base64-encoded certificate -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- Base64-encoded certificate -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- Base64-encoded certificate -----END CERTIFICATE-----

如果这些项目在上传到 IAM 时未采用正确的格式,您可以使用 OpenSSL 将其转换为正确的格式。

将证书或证书链从 DER 转换为 PEM

使用 OpenSSL x509 命令,如以下示例所示。在以下示例命令中,将 Certificate.der 替换为包含您的 DER 编码的证书的文件的名称。将 Certificate.pem 替换为要包含 PEM 编码的证书的输出文件的首选名称。

openssl x509 -inform DER -in Certificate.der -outform PEM -out Certificate.pem

 

将私有密钥从 DER 转换为 PEM

使用 OpenSSL rsa 命令,如以下示例所示。在以下示例命令中,将 PrivateKey.der 替换为包含您的 DER 编码的私有密钥的文件的名称。将 PrivateKey.pem 替换为要包含 PEM 编码的私有密钥的输出文件的首选名称。

openssl rsa -inform DER -in PrivateKey.der -outform PEM -out PrivateKey.pem

 

解密已加密的私有密钥 (删除密码或口令)

使用 OpenSSL rsa 命令,如以下示例所示。要使用以下示例命令,请将 EncryptedPrivateKey.pem 替换为包含您的已加密的私有密钥的文件的名称。将 PrivateKey.pem 替换为要包含 PEM 编码的未加密私有密钥的输出文件的首选名称。

openssl rsa -in EncryptedPrivateKey.pem -out PrivateKey.pem

 

将证书包从 PKCS#12 (PFX) 转换为 PEM

使用 OpenSSL pkcs12 命令,如以下示例所示。在以下示例命令中,将 CertificateBundle.p12 替换为包含您的 PKCS#12 编码的证书包的文件的名称。将 CertificateBundle.pem 替换为要包含 PEM 编码的证书捆绑包的输出文件的首选名称。

openssl pkcs12 -in CertificateBundle.p12 -out CertificateBundle.pem -nodes

 

将证书包从 PKCS#7 转换为 PEM

使用 OpenSSL pkcs7 命令,如以下示例所示。在以下示例命令中,将 CertificateBundle.p7b 替换为包含您的 PKCS#7 编码的证书包的文件的名称。将 CertificateBundle.pem 替换为要包含 PEM 编码的证书捆绑包的输出文件的首选名称。

openssl pkcs7 -in CertificateBundle.p7b -print_certs -out CertificateBundle.pem