在 IAM 中管理服务器证书
要在 Amazon 中启用与您的网站或应用程序的 HTTPS 连接,您需要 SSL/TLS 服务器证书。对于 Amazon Certificate Manager (ACM) 支持的区域中的证书,我们建议您使用 ACM 预置、管理和部署您的服务器证书。在不支持的区域中,您必须将 IAM 作为证书管理器。要了解 ACM 支持的区域,请参阅 Amazon 一般参考中的 Amazon Certificate Manager 端点和配额。
只有当您必须在 ACM 不支持的区域中支持 HTTPS 连接时,才应使用 IAM 作为证书管理器。IAM 安全地加密您的私有密钥并将加密的版本存储在 IAM SSL 证书存储中。IAM 支持在所有区域部署服务器证书,但您必须从外部提供商获取证书,以便与 Amazon 搭配使用。您无法将 ACM 证书上传到 IAM。此外,您还无法从 IAM 控制台管理证书,
有关将第三方证书上传到 IAM 的更多信息,请参阅以下主题。
目录
上传服务器证书 (Amazon API)
要将服务器证书上传到 IAM,您必须提供证书及其匹配的私有密钥。如果证书不是自签名的,则您还必须提供证书链。(上传自签名证书时无需证书链。) 在上传证书前,请确保您已具有所有这些项目而且它们满足以下条件:
要使用 IAM API 上传证书,请发送 UploadServerCertificate 请求。以下示例说明如何使用 Amazon Command Line Interface (Amazon CLI)
-
PEM 编码的证书存储在名为
Certificate.pem
的文件中。 -
PEM 编码的证书链存储在名为
CertificateChain.pem
的文件中。 -
PEM 编码的未加密私有密钥存储在名为
PrivateKey.pem
的文件中。 -
(可选)您希望用键-值对标记服务器证书。例如,您可以添加标签键
Department
和标签值Engineering
来帮助识别和组织证书。
要使用以下示例命令,请用自己的文件名替换这些文件名。将 ExampleCertificate
替换为已上传证书的名称。如果要标记证书,请将 ExampleKey
和 ExampleValue
标签键值对替换为您自己的值。在一个连续行上键入命令。为更便于阅读,以下示例包含了换行符和多余的空格。
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-keysExampleKeyName
上述命令成功后,不会返回任何输出。
重命名服务器证书或更新其路径 (Amazon API)
要使用 IAM API 重命名服务器证书或更新其路径,请发送 UpdateServerCertificate 请求。以下示例说明如何使用 Amazon CLI 执行该操作。
要使用以下示例命令,请将旧的证书名称和证书路径替换为新的,然后在一个连续行上键入命令。为更便于阅读,以下示例包含了换行符和多余的空格。
aws iam update-server-certificate --server-certificate-name
ExampleCertificate
--new-server-certificate-nameCloudFrontCertificate
--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 命令
,如以下示例所示。在以下示例命令中,将
替换为包含您的 DER 编码的证书的文件的名称。将Certificate.der
替换为要包含 PEM 编码的证书的输出文件的首选名称。Certificate.pem
openssl x509 -inform DER -in
Certificate.der
-outform PEM -outCertificate.pem
- 将私有密钥从 DER 转换为 PEM
-
使用 OpenSSL rsa 命令
,如以下示例所示。在以下示例命令中,将
替换为包含您的 DER 编码的私有密钥的文件的名称。将PrivateKey.der
替换为要包含 PEM 编码的私有密钥的输出文件的首选名称。PrivateKey.pem
openssl rsa -inform DER -in
PrivateKey.der
-outform PEM -outPrivateKey.pem
- 解密已加密的私有密钥 (删除密码或口令)
-
使用 OpenSSL rsa 命令
,如以下示例所示。要使用以下示例命令,请将
替换为包含您的已加密的私有密钥的文件的名称。将EncryptedPrivateKey.pem
替换为要包含 PEM 编码的未加密私有密钥的输出文件的首选名称。PrivateKey.pem
openssl rsa -in
EncryptedPrivateKey.pem
-outPrivateKey.pem
- 将证书包从 PKCS#12 (PFX) 转换为 PEM
-
使用 OpenSSL pkcs12 命令
,如以下示例所示。在以下示例命令中,将
替换为包含您的 PKCS#12 编码的证书包的文件的名称。将CertificateBundle.p12
替换为要包含 PEM 编码的证书捆绑包的输出文件的首选名称。CertificateBundle.pem
openssl pkcs12 -in
CertificateBundle.p12
-outCertificateBundle.pem
-nodes - 将证书包从 PKCS#7 转换为 PEM
-
使用 OpenSSL pkcs7 命令
,如以下示例所示。在以下示例命令中,将
替换为包含您的 PKCS#7 编码的证书包的文件的名称。将CertificateBundle.p7b
替换为要包含 PEM 编码的证书捆绑包的输出文件的首选名称。CertificateBundle.pem
openssl pkcs7 -in
CertificateBundle.p7b
-print_certs -outCertificateBundle.pem