在 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,您必须提供证书及其匹配的私有密钥。如果证书不是自签名的,则您还必须提供证书链。(上传自签名证书时无需证书链。) 在上传证书前,请确保您已具有所有这些项目而且它们满足以下条件:
要使用 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 操作
使用以下命令来查看、标记、重命名和删除服务器证书。
-
使用 GetServerCertificate 命令来检索证书。此请求会返回证书、证书链(如果已上传一个)和有关证书的元数据。
注意
在您上传后,无法从 IAM 下载或检索私有密钥。
-
使用 Get-IAMServerCertificate 来检索证书。
-
使用 ListServerCertificates 列出已上传的服务器证书。该请求会返回包含有关每个证书的元数据的列表。
-
使用 Get-IAMServerCertificates 列出已上传的服务器证书。
-
使用 TagServerCertificate 标记现有的服务器证书。
-
使用 UntagServerCertificate 取消标记服务器证书。
-
使用 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。
-
使用 DeleteServerCertificate 删除服务器证书。
要使用 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