此亚马逊云科技解决方案有何用途?
China CloudFront SSL Plugin 解决方案可以帮助您在亚马逊云科技中国区域生成、更新和下载免费的 SSL 证书,并支持与 Amazon CloudFront 的集成及关联 SSL 证书的自动更新。SSL 利用数据加密、身份验证和消息完整性验证机制,保证网络上数据传输的安全性,可以帮助保护网站上的敏感信息,例如个人身份信息和信用卡信息,防止被黑客窃取。
关于本教程 | |
预计部署时间 | 3分钟 |
费用 | 几乎免费 |
主题 | 免费 SSL/TLS 证书颁发、下载并支持与Amazon CloudFront 集成的 SSL 插件 - China CloudFront SSL Plugin |
受众 | 开发人员,运维人员 |
级别 | 200 |
相关产品 | Amazon Lambda, Amazon CloudFront, Amazon Route 53, Amazon EventBridge, Amazon S3, Amazon API Gateway, Amazon SNS, Amazon IAM |
相关行业 | 网站搭建,内容分发 |
上次更新时间 | 2023.8.17 |
亚马逊云科技解决方案概述
您可以使用此解决方案的实施指南和随附的 Amazon CloudFormation 模板在您的亚马逊云科技账号中进行自动部署,方案架构图如下:
架构描述
此方案通过 Amazon CloudFormation 模版自动化部署一系列无服务器资源,包括 Amazon Lambda、Amazon SNS 主题、Amazon EventBridge 规则、Amazon API Gateway 等,以实现通过 Let’s Encrypt 与开源工具 Certbot 自动、定期生成免费的 SSL/TLS 证书,并自动将颁发的证书上传至 Amazon IAM SSL 证书存储以及 Amazon S3 中,并支持自动更新 Amazon CloudFront 中的 IAM SSL 证书。同时,本解决方案还提供基于 IAM SSL 证书存储的 API 接口及管理界面。
- Let’s Encrypt 是一家免费、开放、自动化的证书颁发机构 (CA)。
- Certbot 是一款免费的开源软件工具,可自动化的获取、部署和更新由 Let's Encrypt 颁发的 SSL 证书。
- Amazon Lambda 用于运行 Certbot 证书颁发及更新程序、API 管理界面以及 IAM SSL 证书管理 API。
- Amazon Route 53 用于域名解析,Certbot 证书颁发程序将根据域名以及托管在 Amazon Route53 中的托管区,自动生成并添加 DNS 验证记录,以满足 Let’s Encrypt 颁发机构对域名控制权的验证。如果您尚未将域名解析迁移至 Amazon Route 53,请点击参考文档。
- Amazon SNS 用于发送证书颁发状态的邮件通知。
- Amazon EventBridge 用于进行事件驱动,在解决方案堆栈部署与更新成功时自动运行 Certbo 证书 t 颁发程序,以实现证书的颁发。同时通过定时任务,默认每 80 天定期生成免费的 SSL 证书用于证书的续期。
- Amazon API Gateway 用于集成管理 SSL 证书的操作,提供调用接口。
- Amazon S3 存储桶用于存储备份的 SSL 证书,可通过 Amazon S3 控制台将证书下载到本地。
- IAM SSL 证书存储用于存储与 Amazon CloudFront 关联的 SSL 证书。在亚马逊云科技中国区域如果您需要使用 Amazon CloudFront 通过 HTTPS 提供内容,您需要使用 IAM SSL 证书存储,具体详情请参考 Amazon CloudFront 功能可用性和实现差异。本解决方案自动将颁发后的 SSL 证书添加至 IAM SSL 证书存储中,您需要在 Amazon CloudFront 分配中手动选择您需要关联的 SSL 证书,关联后即可实现 SSL 证书在 Amazon CloudFront 中的自动更新。
功能特性
- 几乎免费*:采用无服务器架构及开源工具搭建,根据无服务器服务的调用次数收费,默认每80天才进行一次调用。
- 开箱即用:仅需三分钟即可完成解决方案的部署及证书的颁发,并支持证书下载以及与 Amazon CloudFront 的集成与自动更新。
- 完全开源:此方案中所有的代码均以开源的方式提供,若有不同的需求,您也可以在源代码基础上进行定制化开发。
* 本方案采用无服务器架构,每次证书颁发会产生极少的费用,例如无服务器资源运行费用,少量的 Amazon S3 存储费用和 Amazon CloudWatch 日志存储费用等。但因颁发证书的域名控制权验证需要,使用 Amazon Route 53 托管域名将会收取 3.575 元 / 月的费用。
操作手册
在开始操作前,请再次确认您使用 Amazon Route 53 解析您的域名。如果您尚未将域名解析迁移至亚马逊云科技 Amazon Route 53,请点击参考文档。我们建议您完整阅读本文档以了解所有操作步骤及注意事项。
-
第一步 - 方案部署
1. 初始化部署
通过 CloudFormation 服务部署模板,点击链接,随后将跳转至中国区 CloudFormation 控制台创建堆栈。点击右下角【下一步】操作。
2. 输入部署参数信息
为堆栈指定详细信息,请注意以下参数信息。
- 堆栈名称:请为堆栈命名,例如您的网站项目名称
- Email:输入您的邮箱用于订阅 SNS 邮件提醒以了解证书颁发和更新的状态,仅支持一个邮箱
- Domain Name:输入域名用于获取 SSL 证书,域名支持通配符域名和多个域名。请使用英文逗号分隔。例如: example.com, *.example.com;
- SSL Renew Interval Days: 输入更新证书的周期。Let’s encrypt 颁发的证书有效期为 90 天,请确保输入的数字在 1-89 内,从而可以及时更新证书。推荐的默认情况为每 80 天更新一次
信息确认完毕后点击,请点击下一步,直接进入第 4 步 “堆栈审核”。
3. 确认部署信息
请在当前页面确认您的部署信息,确认完毕后在页面底部勾选最下方蓝色窗口内的“我确认”,并点击右下角【提交】按钮进行提交。
提交完毕后,将在该堆栈事件栏内看到堆栈内资源正在陆续创建。等待约3分钟。
4. 及时订阅消息通知服务
等待堆栈部署过程请及时查看您的邮箱,您将收到由如图所示的邮件地址发送的 SNS 邮件提醒订阅的确认请求。请尽快点击订阅确认链接以便及时接收 SNS 消息通知,否则您可能会错过首次证书颁发的信息。
订阅成功后的提示如下。
5. 查看堆栈部署进度
订阅完毕后,您可以返回堆栈,继续查看堆栈状态。当堆栈状态转变为 CREATE_COMPLETE 即为创建完毕。
您可以在堆栈 “输出” 标签页中查看解决方案为您提供的快速链接:- CloudfrontConsole:访问 Amazon CloudFront 控制台,快速绑定已经颁发的证书
- ManagementWebURL:访问 SwaggerUI,查看或删除 IAM 中已有的 SSL 证书
- S3BucketURL:访问 Amazon S3 控制台,下载颁发的 SSL 证书
6. 在 Amazon CloudFront 控制台中绑定 SSL 证书
堆栈部署完毕后,将自动为您的域名申请 SSL 证书。如果已经及时在邮件中订阅 SNS 主题,您会收到由如图所示的邮件地址发送的邮件提醒,以提示您成功颁发 SSL 证书。
证书名称由堆栈名称与 SSL 证书过期时间组成。例如:Certbot-2023-11-14-1540,名称后的数字代表证书过期时间,如图所示为 2023 年 11 月 14 日 15 点 40 分。
打开 CloudFront 控制台,创建或选择您已有的分配,找到编辑备用域名与 SSL 证书的选项入口。
请在设置菜单的备用域名处填入您申请SSL证书的域名,并在自定义 SSL 证书的下拉菜单中选择对应的 SSL 证书,随后将更改进行保存。
部署完毕后,您可以通过浏览器访问由 Amazon CloudFront 加速的站点,并查看由 Let’s Encrypt 颁发的 SSL 证书信息,有效时长 90 天。
-
第二步 - SSL证书下载、更新及管理
1. 证书下载
请通过操作手册 “方案部署” 第 5 步中的堆栈的输出 (S3BucketURL),直接跳转或通过控制台查找对应的 SSL 证书桶中,选择您需要下载到的 SSL 证书压缩文件。
注意:last_iam_ssl_info.txt 文件用于存储上一次生成的证书信息,以匹配绑定的 Amazon CloudFront 信息。请勿修改或删除该文件。
解压上述下载完成的文件,并访问到解压文件夹中 /tmp/certbot/config/archive/ssl 路径的文件夹中,即可看到生成的 SSL 证书、证书私钥、证书链等文件。
2. 证书的自动更新以及注意事项
本解决方案可在 SSL 证书过期前自动更新证书,并根据上一次证书生成的 ID 与证书名称,自动替换已关联在 Amazon CloudFront 的证书。
注意:每个生成的免费证书有效期为 90 天,首次 SSL 证书生成后,会通过 Amazon Eventbridge 的规则在指定天数后(默认为 80 天)自动生成新证书,并发送一封 SSL 证书颁发成功及 Amazon CloudFront SSL 证书更新记录的通知邮件。
请您仔细阅读该邮件,并注意以下事项:
- 若证书更新成功,为了节省限额将会自动删除存储在 IAM SSL 存储中的证书,但不会删除 Amazon S3 桶中的备份证书。
- 若证书颁发失败或 Amazon CloudFront SSL 证书更新失败,请及时手动替换,以免您网站访问中断。
更新记录的数据结构意义如下:
- Get_Last_IAM_SSL_Info: 上一次颁发的 SSL 证书信息,来源于 Amazon S3 桶的 last_iam_ssl_info.txt 文件记录。
- Matched_CloudFront:通过上一次颁发的 SSL 证书信息,匹配到的 Amazon CloudFront 分配 ID。
- Update_CloudFront_Status:Amazon CloudFront 更新状态,请结合匹配的 Amazon CloudFront ID 信息进行比对。
- Delete_Last_IAM_SSL_Cert:若无匹配的 Amazon CloudFront 分配或都已更新成功,将自动删除上一次颁发的 SSL 证书。
3. 管理 SSL 证书(可选)
以下可选内容包括已生成 SSL 证书的列表查询以及 SSL 证书删除。
若因证书更新失败等原因,您可能需要手动删除证书。浏览器访问堆栈部署完成后 Output 中提示的 ManagementWebURL已生成证书查询:选中 List API,点击 “Try it out”→ Execute, 将列出所有存放在 IAM SSL 证书中的信息。
您可以找到已过期的 SSL 证书,并复制 SSL 证书名称。
证书删除:点击 Delete API,将刚刚已经复制的名称粘贴替换 certName,并触发执行 API,看到如下提示信息,即删除成功。
-
常见问题及问题排查
常见问题
- 可以为一个域名生成几个证书,是否有速率限制?
• 根据 Let's Encrypt 文档,每个注册域名每周可签发 50 张证书,重复的域名每周可以签发 5 个证书。详情请查看文档:https://letsencrypt.org/zh-cn/docs/rate-limits/,https://letsencrypt.org/zh-cn/docs/duplicate-certificate-limit/。 - 可以在 IAM 中存放多少个 SSL 证书?
•根据亚马逊云科技文档,IAM 服务存在证书上限,每个账号默认不能上传超过20个 SSL 证书,该限额可以调整至1000个,请点击链接“Server certificates per account”提交 IAM 证书限额。 - 如果无法访问 SSL 管理界面怎么办?
•请确保您已经完成 ICP 备案流程。如果您在完成 ICP 备案前部署该方案,可能需要您重新部署该方案。
问题排查
- 如何删除堆栈资源 / 删除堆栈过程中出现错误提示?
•请您先清空对应 Amazon S3 桶中的内容,再进行堆栈删除。•请确保您已经完成 ICP 备案流程。如果您在完成 ICP 备案前部署该方案,可能需要您重新部署该方案。
- 证书已经颁发,没有收到证书颁发信息该怎么办?
•如果您是首次部署该堆栈,可能会因为确认订阅的时机较晚而丢失通知信息。如果您未收到证书更新的信息,请确保您收到订阅邮件并点击订阅,您可以在堆栈的资源标签页中搜索 “SNS::Topic”,找到对应的通知服务,检查确认状态。
- 如果已经确认订阅状态,依旧没有收到颁发 / 更新的邮件或者该怎么办?
• 如果是颁发过程出现错误,您可以查看 Certbot Lambda Function 的运行日志。如果是因为未成功执行自动触发规则,请查看 Amazon EventBridge 监控 - 如果收到的邮件有错误信息该如何排查?
• 您可以查看 Certbot Lambda Function 的运行日志。 - 如何查看 Lambda Function 日志信息?
• 您可以通过 CloudWatch 日志监控查询。在堆栈的资源标签页中搜索 “Lambda::Function”,选中 CertBot 起始的 Function。
- 点击进入后,在页面下方监控标签页中,点击右侧 查看 CloudWatch Logs
- 根据触发时间,在页面下方,日志流标签页中点击查看日志信息,以排查运行日志。
- 如何查看 Amazon EventBridge 监控?
- 在堆栈的资源标签页中搜索 “Events::Rule”,选中 CertScheduledRule 起始的规则,点击进入,查看监控标签页,选择的时间段查看 Invocation 状态。
- 如何手动触发证书的颁发或更新?
- 您可以通过 Lambda Function 中点击测试来进行手动触发颁发 / 更新 SSL 证书流程。在堆栈的资源标签页中搜索 “Lambda::Function”,选中 CertBot 起始的 Function。
- 随后在测试标签页中,点击橙色测试按钮,完成手动触发证书颁发流程。
- 您也可以通过“联系我们”来帮助您解决问题。
参考文档
- 可以为一个域名生成几个证书,是否有速率限制?
现在就开始在亚马逊云上构建
无论您是在寻找计算能力、数据库、存储、内容分发、人工智能与机器学习,大数据分析还是其他功能,亚马逊云科技都有相应的服务来帮助您建立具有更高灵活性、可扩展性和可靠性的复杂应用。