在本教程中,您将学习如何在 AWS(Amazon Web Services)中安装 SSL 证书。在 AWS 上,您不会像在 Apache 或 Nginx 中那样在单台服务器上安装证书。相反,您需要先将证书导入证书存储库一次,然后将其附加到某个托管服务(负载均衡器、CloudFront 或 API Gateway)上,由该服务为您终止 TLS 连接。本指南涵盖了 AWS Certificate Manager(ACM)、旧版 IAM 证书存储以及 Elastic Load Balancing(ELB)。
在安装之前,您需要生成证书签名请求(CSR)并将其发送给证书颁发机构进行审批。如果您尚未完成此步骤,请先阅读本教程的第一部分。如果您已经拥有 SSL 证书文件,可以直接跳到下面的安装指南。
如何在 AWS 中生成 CSR 代码
申请 SSL 证书时,一个必不可少的步骤是将 CSR 代码提交给您的 SSL 提供商,也称为证书颁发机构。CSR 包含关于您的域名和组织的编码信息。如果不提供这段代码,您将无法获得已签名的 SSL 证书。您有两个选择:
- 使用我们的CSR 生成器自动创建 CSR。
- 手动生成 CSR。最佳做法是在运行 SSL 证书的同一台服务器上创建 CSR。请根据您的平台选择相应教程:
如果您只有负载均衡器而没有可以运行命令的源服务器,可以使用 OpenSSL 工具创建 CSR 和私钥:
openssl req -new -newkey rsa:2048 -nodes -keyout yoursite.key -out example.csr
注意:将 yoursite 替换为您想要保护的域名。该命令还会写入您的私钥(yoursite.key);请妥善保管,因为您稍后导入证书时需要用到它。
运行命令后,OpenSSL 会将 CSR 写入 example.csr 文件。打开该文件并复制整个代码块,包括 —–BEGIN CERTIFICATE REQUEST—– 和 —–END CERTIFICATE REQUEST—– 这两行。您将在激活 SSL 证书时粘贴此代码。
准备好所有证书文件
开始安装之前,请确保您拥有所有必要的证书文件。证书颁发机构对您的 SSL 证书签名后,会将安装文件发送到您的邮箱。您需要准备以下内容:
- 为您想要保护的域名颁发的主证书文件。
- 来自您的证书颁发机构的 CA 捆绑包(中间证书链)。
- 您的私钥。
您的 SSL 证书和 CA 捆绑包位于证书颁发机构发送给您的 ZIP 压缩包中。私钥则是您在生成 CSR 代码时同时创建的那个文件;它保存在您创建 CSR 的同一位置。
最后一件要检查的事情是文件格式。ACM 和 IAM 只接受 PEM 编码的文件,因此请确保您的证书、证书链和私钥都是 PEM 格式。PEM 是一种文本格式,可以有多种文件扩展名(.pem、.key、.cer、.crt 等);PEM 文件以 —–BEGIN CERTIFICATE—– 这样的行开头。私钥必须是未加密的:ACM 会拒绝受密码或口令保护的密钥。
如果您收到的文件是其他格式,例如 PFX/PKCS#12,请先将其转换为 PEM 格式。您可以使用 OpenSSL 命令来完成此操作。文件转换为 PEM 格式后,您就可以安装证书了。
在 AWS Certificate Manager(ACM)中安装 SSL 证书
ACM 是为 AWS 托管服务存储证书的推荐位置。您可以通过控制台或 CLI 导入第三方证书。
方式 A:在 ACM 控制台中导入
- 打开 AWS 控制台,进入 Certificate Manager。确认您所在的区域正确(右上角)。请在将要使用该证书的服务所在的同一区域导入证书。若用于 CloudFront,请使用 US East (N. Virginia), us-east-1。
- 选择导入证书。
- 在证书正文处,粘贴您的主证书(以 —–BEGIN CERTIFICATE—– 开头的代码块)。
- 在证书私钥处,粘贴您未加密的私钥(以 —–BEGIN PRIVATE KEY—– 或 —–BEGIN RSA PRIVATE KEY—– 开头的代码块)。
- 在证书链处,粘贴您的 CA 捆绑包(中间证书)。
- 选择下一步,添加任何标签,然后选择导入。
方式 B:使用 AWS CLI 导入
运行以下命令将您的证书上传到 ACM。请注意 fileb:// 前缀:它告诉 CLI 以原始字节形式读取每个文件,这正是 ACM 所要求的格式。
aws acm import-certificate
--certificate fileb://example.crt
--private-key fileb://example.key
--certificate-chain fileb://example-bundle.crt
注意:请将每个 example 文件名替换为您实际文件的名称。如果导入成功,CLI 会返回证书的 ARN(Amazon 资源名称)。您需要此标识符将证书附加到某个服务上。以下是用于进一步管理证书的完整 ACM 命令列表。
重要注意事项:
- 导入的证书不会自动续订。ACM 只会自动续订它自己颁发的证书。您需要自行追踪已导入证书的到期日期,并在到期前重新导入新证书(AWS 建议至少在到期前 24 小时完成)。重新导入到同一个 ACM 证书中会保留现有的服务关联关系,因此负载均衡器或分发实例会继续使用它,无需进一步更改。
- 区域很重要。ACM 证书是区域性的。请在将要使用该证书的负载均衡器或服务所在的同一区域导入证书。CloudFront 只接受来自 us-east-1 的证书。
在 AWS IAM 中安装 SSL 证书(旧版方法)
IAM 证书存储是较早的方法,AWS 建议新部署使用 ACM。仅在某个服务或区域不支持 ACM,或者您特别需要使用 IAM 存储时(例如某些 CloudFront 配置,路径必须以 /cloudfront/ 开头),才使用 IAM。使用以下命令将证书上传到 IAM:
aws iam upload-server-certificate
--server-certificate-name certificate-name
--certificate-body file://example.crt
--certificate-chain file://example-bundle.crt
--private-key file://example.key
请按下表所示替换各个值:
- –server-certificate-name:一个便于记忆的自定义名称,例如您的域名。仅使用大小写字母和数字;不允许包含空格。
- –certificate-body:您的主 SSL 证书的文件名。
- –certificate-chain:您的 CA 捆绑包的文件名。
- –private-key:您的私钥的文件名。
证书、私钥和证书链都必须为 PEM 编码,且私钥必须与证书匹配。如果上传成功,CLI 会返回服务器证书的元数据,包括其路径、名称、ID、ARN、上传日期和到期日期。如需进一步了解 SSL 管理和故障排查方法,请参阅Amazon 官方指南。
在 ELB(Elastic Load Balancing)中附加证书
将证书导入 ACM 或 IAM 尚不会使其生效。只有当您将该证书的 ARN 附加到某个服务上时,证书才会真正启用。本节假定您已经导入了证书,并希望在现有负载均衡器上创建或更新 HTTPS 监听器。您需要用到证书的 ARN,以及负载均衡器的名称或 ARN。
Classic Load Balancer
使用以下命令在 Classic Load Balancer 上创建 HTTPS 监听器并为其分配证书:
aws elb create-load-balancer-listeners
--load-balancer-name my-load-balancer
--listeners "Protocol=HTTPS,LoadBalancerPort=443,InstanceProtocol=HTTP,InstancePort=80,SSLCertificateId=ARN"
将 ARN 替换为您在 ACM 或 IAM 中获得的证书 ARN。如果您已经有一个 HTTPS 监听器,只想替换成新证书,请使用:
aws elb set-load-balancer-listener-ssl-certificate
--load-balancer-name my-load-balancer
--load-balancer-port 443
--ssl-certificate-id NewARN
将 NewARN 替换为新证书的 ARN。以下是ELB 命令的完整列表,以及关于 Classic Load Balancer 的 HTTPS 监听器的 Amazon 官方指南。
Application Load Balancer
运行以下命令在 Application Load Balancer 上创建 HTTPS 监听器。下面的 –ssl-policy 值选择了一个支持 TLS 1.3 和 TLS 1.2 的安全策略:
aws elbv2 create-listener
--load-balancer-arn my-load-balancer-arn
--protocol HTTPS
--port 443
--certificates CertificateArn=my-certificate-arn
--ssl-policy ELBSecurityPolicy-TLS13-1-2-2021-06
--default-actions Type=forward,TargetGroupArn=my-target-group-arn
您可以通过运行以下命令来获取 my-load-balancer-arn 和 my-target-group-arn 的值:
aws elbv2 describe-target-groups
该命令会显示您账户中相关的负载均衡器和目标组。如需为现有的 HTTPS 监听器添加新证书,请使用:
aws elbv2 modify-listener
--listener-arn my-https-listener-arn
--certificates CertificateArn=my-new-certificate-arn
您可以通过以下命令获取 my-https-listener-arn 的值:
aws elbv2 describe-listeners
--load-balancer-arn my-load-balancer-arn
如需进一步管理您的 Application Load Balancer,请参阅 elbv2 命令参考。
测试您的 SSL 安装
浏览您域名的 HTTPS 版本,检查地址栏是否出现锁形图标。点击该图标可查看证书详情。若要进行更深入的测试,可使用我们的 SSL Checker:它会扫描您的安装情况并立即生成报告。您也可以通过命令行确认证书信息:
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -issuer -dates
该命令会打印出负载均衡器当前使用的证书的颁发者和有效期日期。如果您导入了新证书,但看到的仍是旧证书,请确认监听器指向的是新的 ARN,并确认您测试的是正确的区域和端点。
常见问题
您不会将其安装在单台服务器上。您需要将证书导入 AWS Certificate Manager(ACM),然后将生成的 ARN 附加到终止 TLS 连接的托管服务上,例如 Application 或 Classic Load Balancer、CloudFront 分发实例,或 API Gateway 自定义域名。
不会。ACM 只会自动续订它自己颁发的证书。已导入的第三方证书必须在到期前重新签发并重新导入。重新导入到同一个 ACM 证书中会保留其服务关联关系,因此负载均衡器会继续使用续订后的证书,无需额外更改。
建议使用 ACM。IAM 证书存储是一种旧版方法,AWS 保留它主要是为了向后兼容以及处理 ACM 无法覆盖的情况。对于大多数配置,包括负载均衡器和 CloudFront,ACM 都是推荐的选择。
最常见的原因是该密钥已被加密。ACM 只接受与证书匹配的、未加密的 PEM 编码私钥。请先移除口令,然后再导入。请确保证书、证书链和私钥这三部分都为 PEM 编码。
请将证书导入将要使用它的负载均衡器或服务所在的同一区域,因为 ACM 证书是区域性的。CloudFront 是个例外:它只接受导入到 US East (N. Virginia), us-east-1 的证书。


