AWS Identity and Access Management
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

使用服务器证书

要在 AWS 中启用与您的网站或应用程序的 HTTPS 连接,您需要 SSL/TLS 服务器证书。您可以使用 AWS Certificate Manager (ACM) 提供的服务器证书,也可以使用从外部提供商获得的服务器证书。可以使用 ACM 或 IAM 存储和部署服务器证书。

ACM 是预配置、管理和部署您的服务器证书的首选工具。利用 ACM,您可以请求证书或将现有 ACM 或外部证书部署到 AWS 资源。ACM 提供的证书是免费的,并将自动续订。您可以使用 ACM 从控制台或以编程方式管理服务器证书。有关使用 ACM 的更多信息,请参阅AWS Certificate Manager 用户指南

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

有关请求 ACM 证书的更多信息,请参阅AWS Certificate Manager 用户指南中的请求公有证书请求私有证书

有关将第三方证书导入 ACM 的更多信息,请参阅AWS Certificate Manager 用户指南中的导入证书

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

上传服务器证书 (AWS API)

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

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

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

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

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

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

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

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

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

$ aws iam upload-server-certificate --server-certificate-name ExampleCertificate --certificate-body file://Certificate.pem --certificate-chain file://CertificateChain.pem --private-key file://PrivateKey.pem

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

注意

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

要使用 适用于 Windows PowerShell 的 AWS 工具上传证书,请使用 Publish-IAMServerCertificate

检索服务器证书 (AWS API)

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

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

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

注意

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

要使用 适用于 Windows PowerShell 的 AWS 工具 检索证书,请使用 Get-IAMServerCertificate

列出服务器证书 (AWS API)

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

$ aws iam list-server-certificates

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

要使用 适用于 Windows PowerShell 的 AWS 工具 列出您已上传的服务器证书,请使用 Get-IAMServerCertificates

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

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

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

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

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

要使用 适用于 Windows PowerShell 的 AWS 工具 重命名服务器证书或更新其路径,请使用 Update-IAMServerCertificate

删除服务器证书 (AWS API)

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

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

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

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

要使用 适用于 Windows PowerShell 的 AWS 工具 删除服务器证书,请使用 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 编码的证书链

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

-----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