写点什么

Let’s Encrypt 实践指北

  • 2020-09-25
  • 本文字数:3437 字

    阅读完需:约 11 分钟

Let’s Encrypt实践指北

最近刚好有个项目需要配置 HTTPS,也购买了域名,尤其在知道了本文要介绍的“神器” —— Let’s Encrypt 之后,大大简化了学习成本和时间。

初衷

一直以来,对于 HTTPS 证书的概念都有些含糊不清,似懂非懂。原因是自己之前比较懒,对于一些需要前置条件(买域名买证书等)才能玩的东西总是积极不起来(对!一定是穷)。而最近刚好有个项目需要配置 HTTPS,也购买了域名(实践时自己还是买了域名),尤其在知道了本文要介绍的“神器” —— Let’s Encrypt 之后,大大简化了学习成本和时间。趁着一些碎片化的时间,研究了证书的一些基本概念以及使用方法,总结下来,以供参考。另外,在我查找一些相关文档的过程中发现一个问题,就是由于这方面知识的时效性很差,出现很多信息不对等的情况,索性我将参考过的所有官网文档链接贴在了最后,方便大家在看到这篇文章时,根据链接查看最新官方支持情况。


( Let’s Encrypt 以下简称 “ LE ”)

Let’s Encrypt

不支持 IP 绑定

首先需要说明的是,本来基于成本考虑,是没有打算再购买一个域名来实践 HTTPS 的,因为市面上的一些主流证书都可以既支持域名,又支持公有 IP。但是由 LE 官方论坛得知,目前只支持域名,并没有计划支持公有 IP。所以我就打消了这个念头,转而在阿里云上单独购买了一个域名。

证书类型

以下介绍几个关于证书类型的基本概念。


已知的 LE 现在支持三种证书类型。分别是 单域名证书,SAN 证书和 Wildcard 证书


  • 单域名证书,顾名思义,此证书只包含一个域名,属于基本类型。

  • SAN 证书,一张证书可以包含多个域名,早期用于多个子域名申请同一张证书的情况。经实践得知,此种证书在使用客户端申请时最大的弊端需要一次性写出所有的域名,对于后期扩展不太方便。

  • 最后一种是通配符证书,是本文详细介绍的对象。此种证书类型是 LE 后期支持的,使用起来极大方便了小型开发团队和个人开发者。比如针对.example.com这个域名,申请通配符证书(表达式为*.example.com)后,凡是基于它的子域名,都可以使用这个证书。但为了支持此特性,用于申请证书的客户端也必须要支持 ACME 的 V2 版本。(官方推荐的 Cerbot 客户端在 0.22 版本后)


需要注意的是,无论哪种证书,根据 LE 的最新的中文官方文档(2019 年 2 月 24 日最后更新),单张证书下最多可包含 100 个子域名,而每个注册域名(顶级域名)的证书数量是 50 张/每周,综上所述,每周可为 5000 个不同的子域名申请证书,且在 2019 年三月后,续期证书也算入域名证书数量内,对于个人或第三方独立开发者的正常使用而言,这个支持量级是足够的。

ACME 客户端 —— Cerbot

搞清了证书方面的知识,我们接下来看看如何实践。在客户端方面,LE 支持很多种不同的证书申请客户端,官方推荐的是 Certbot,但值得注意的是,无论选择哪种客户端,都必须支持 ACME 的 v2 版本,因为从 2019 年的 11 月开始,LE 将 停止通过 ACMEv1 进行账号注册 ,计划于 2020 年的 6 月开始将停止新域名的验证。

Certbot 的选择

个人建议在实践时使用更为推荐的 certbot-auto 客户端,在官方的解释中,certbot-auto 相当于 certbot 的 wrapper,使用它能自动选择最新版本的 cerbot,对已有 cerbot 进行升级等操作。并且因为 certbot 运行时需要用到 python 环境,所以对应的依赖也能自动装载到 python 的虚拟环境中。

Certbot 插件选择

使用 Certbot 主要分两部分,一部分为申请获取证书,另一部分为在基础设置上安装证书。而 Cerbot 本身支持很多插件来简化这些操作。详情见下表:



Certbot 插件选择


在申请证书的过程中,LE 需要对该域名的所有权进行验证,而以上几个插件都支持了 http-01 或 dns-01 中的一种,亦或是同时支持两种。不同的验证方式会有不同的操作,这个后面会说。

实践

好了,上面啰啰嗦嗦说了这么多,下面可以进入到实战环节了。我们以申请通配符证书为例。

安装 certbot-auto

cd ~wget https://dl.eff.org/certbot-autosudo mv certbot-auto /usr/local/bin/certbot-autosudo chown root /usr/local/bin/certbot-autosudo chmod 0755 /usr/local/bin/certbot-auto/usr/local/bin/certbot-auto --help
复制代码

获取证书

这里背景是这样的,由于我们需要申请通配符证书,LE 官方 FAQ 指出只能通过 dns-01的方式来验证。插件选择manual,表示手动方式来配置。所以就有了以下这条命令。


certbot-auto certonly  \ -d *.your_domain.com --manual --preferred-challenges dns \ --server https://acme-v02.api.letsencrypt.org/directory
复制代码


这里几个参数着重说一下:


  • certonly : 表示使用 certbot 只用来申请获取证书,而不做安装操作。

  • -d : 域名。这里注意,通配符证书一定配置为 *.domain.com,而不是 domain.com

  • —manual : 手动模式,理论上也可以选择DNS plugins

  • —preferred-challenges : 虽然 manual 模式下是同时支持两种验证方式的,而通配符证书需要采用dns-01验证方式

  • —server : ACME v2 验证使用的具体地址


返回的命令行输出如下:


Saving debug log to /var/log/letsencrypt/letsencrypt.logPlugins selected: Authenticator manual, Installer NoneEnter email address (used for urgent renewal and security notices) (Enter 'c' tocancel): your_email@gmail.com
-------------------------------------------------------------------------------Please read the Terms of Service athttps://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You mustagree in order to register with the ACME server athttps://acme-v02.api.letsencrypt.org/directory-------------------------------------------------------------------------------(A)gree/(C)ancel: A
Plugins selected: Authenticator manual, Installer NoneObtaining a new certificatePerforming the following challenges:dns-01 challenge for your_domain.com
-------------------------------------------------------------------------------NOTE: The IP of this machine will be publicly logged as having requested thiscertificate. If you're running certbot in manual mode on a machine that is notyour server, please ensure you're okay with that.
Are you OK with your IP being logged?-------------------------------------------------------------------------------(Y)es/(N)o: y
复制代码


从这里开始需要一些交互:


  • 第一个:输入联系人的 email,方便以后接受更新证书提醒和安全提示的

  • 第二个:同意条款

  • 第三个:记录此 IP 为申请证书的机器

DNS 配置

上步之后,命令行输出如下:


-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name_acme-challenge.your_domain.com with the following value:
`一串base64编码`
Before continuing, verify the record is deployed.-------------------------------------------------------------------------------Press Enter to Continue
复制代码


这时不要着急继续,按照上述提示,需要去你的 DNS 服务提供商那里手动配置一条记录,用于验证你对此域名的所有权。以 Azure 为例,如下图:



Azure


配置好之后,过一分钟左右,利用 dig 命令查询一下是否生效:


$ dig  -t txt  _acme-challenge.your_domain.com @8.8.8.8    
;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:; udp: 512;; QUESTION SECTION:;_acme-challenge.your_domain.com. IN TXT
;; ANSWER SECTION:_acme-challenge.your_domain.com. 599 IN TXT "刚才那串base64编码"
复制代码


这里一定注意,有ANSWER SECTION才算成功,我第一次配置错了没有出来这个,但也没有注意到,于是敲回车键就挂掉了。不过大家在实践中如果挂掉了也不要担心,重新执行命令即可。

成功

网络没什么问题的话这步就应该已经成功了,输出的信息会提示你证书生成的所在位置。不出意外的话应该在/etc/letsencrypt/archive/your_domain.com 下。这里值得注意的是,LE 申请的证书有效期一般都是为三个月,所以到期后需要再次申请,网上相关自动化工具一抓一大把,就不在这里赘述了。如果遇到问题,可以继续探讨。


作者介绍


朱海波,ThoughWorks 高级顾问,架构师,主要聚焦于企业敏捷转型,研发效能提升和人才培养等方面。为国内外多家知名企业提供 IT 咨询与和培训服务,曾担任架构师,技术负责人,工程师等角色。


本文转载自 ThoughtWorks 洞见。


原文链接


Let’s Encrypt实践指北


2020-09-25 10:042773

评论

发布
暂无评论
发现更多内容

Adaptix C2:跨平台渗透测试与对抗仿真框架

qife122

网络安全 跨平台 渗透测试

基于 AI 网关提升大模型应用可用性的实践

阿里巴巴云原生

阿里云 云原生 LLM AI网关

2025图文摘要机构哪家值得信赖?意得辑备受好评

科技汇

AI 绘画增强版:AI 时代风口项目,助力轻松变现

微擎应用市场

零基础也能玩转 AI 智能体?这本实操指南帮你快速落地变现

博文视点Broadview

ISO 50001 与碳足迹核算双达标:MyEMS 的能源管理体系合规实践

开源能源管理系统

开源 开源能源管理系统

东荟城名店仓CLUB CG「Chill『饰』玩周年庆」 过千款材料 打造DIY天堂

编程猫

数栈产品如何实现国际化

袋鼠云数栈

国际化 袋鼠云 数栈

微信分享的图纸在电脑上打不开怎么解决?

在路上

cad

从被动防御到主动免疫进化!迈格网络“天机” AI 安全防护平台,助推全端防护性能提升

迈格网络

腾讯云智算全面升级,AI原生云基础设施迈向主动服务新时代

极客天地

硬件、部署、运维“三难”一解:云易捷为成长型企业IT“减负”

智驱前线

2025 Altair Enlighten Award 获奖名单揭晓!蔚来、中信戴卡、吉利、奇瑞等获全球轻量化大奖

Altair RapidMiner

人工智能 AI 汽车 仿真 CAE

面向企业构建科学完善的财务报告解决方案

智达方通

全面预算管理 财务管理

Modbus 与 MQTT 协议兼容:MyEMS 的泛在能源数据采集技术实现

开源能源管理系统

开源 能源管理系统

当AI和低代码成了你的团队

秃头小帅oi

5支AI短片亮相釜山电影节引热议,创作者肯定Seedance、Seedream模型能力

新消费日报

YashanDB性能监控指标与方法

数据库砖家

MCP Registry 官方发布:Nacos 原生支持,借助 HiMarket 构建企业级私有 MCP 市场

阿里巴巴云原生

阿里云 微服务 云原生 nacos

数据库的高效运行,以下是5个关键指标以及优化建议

数据库砖家

低代码“新建日程”实操攻略,效率直接翻倍拉满

引迈信息

“企业级敏捷教练课程” CSP-SM认证 | 12月27-28日 · 周末班

ShineScrum

敏捷教练 CSP CSP-SM

数字孪生 + 区块链:MyEMS 引领能源管理技术融合新趋势

开源能源管理系统

开源 能源管理系统

如何在CAD图纸中添加外部参照?

在路上

cad cad看图 CAD看图王

从“救火队长”到“战略指挥”:现代项目管理者的效能进化论

Tecjt_锦图科技

项目管理 效率工具 敏捷开发 团队协作

移动端性能监控探索:鸿蒙 NEXT 探针架构与技术实现

阿里巴巴云原生

阿里云 云原生 Arms

非凸底仓增强算法上线西部证券,AI交易工具普惠个人投资者

非凸科技

再添荣誉!凡得科技获信通院 “铸基计划” 权威认证,运营商数字化转型实践成标杆

凡得流程PROCESS X

通信运营商 流程化 电信运营商 行业实践 人工智能、

“全球金牌敏捷课程” · 9月27-28日CSM认证课程 · Jim老师引导团队Agility与企业Agility话题

ShineScrum

敏捷 项目经理 ScrumMaster认证

Graph 流式迭代过程

Disaster

BaikalDB MCP Server :链接数据库和AI的直通桥

百度Geek说

分布式数据库 LLM MCP

Let’s Encrypt实践指北_安全_张凯峰_InfoQ精选文章