50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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:042785

评论

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

百度公共IM系统的Andriod端IM SDK组件架构设计与技术实现

JackJiang

即时通讯;IM;网络编程

万界星空科技MES系统的智能排产功能

万界星空科技

制造业 mes 万界星空科技mes MES、 生产排班排产

借力豆包大模型,中手游为《仙剑世界》打造丰富的AI NPC生态

新消费日报

整理 TiDB 的一些使用限制

TiDB 社区干货传送门

实践案例

【TiDB 企业实践-麦谷科技】超详细的升级最佳实践-从 TiDB v5.3.0 到 v7.5.2

TiDB 社区干货传送门

版本升级

好用的mac磁盘分析工具 Disk Xray v4.4激活版

Rose

PDF解析+RAG,手把手教你在Coze搭建个人知识库!

合合技术团队

PDF rag 个人知识库

上云后如何有效控制云成本?有啥好方法?

行云管家

云计算 云服务 企业上云 云成本

如何在建设 DataOps 体系中选择合适的工具或平台?

Aloudata

元数据 DataOps 数据管理 数据血缘

比特币社区心心念念的BTCFi进展如何了?—比特币与DeFi的未来

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 NFT开发 公链开发

测试要不要转岗项目经理?

老张

项目管理 质量保障 项目经理 软件测试工程师

VMware Fusion Pro 13 for Mac v13.6.1中文激活秘钥 VM虚拟机最新版

Rose

高效使用AI,一文掌握提示词的编写原则

禅道项目管理

人工智能 AI 项目管理软件 AIGC ChatGPT

TiDB 监控组件之 Blackbox_exporter 运行原理

TiDB 社区干货传送门

低代码平台如何简化员工培训并提升技术能力?

天津汇柏科技有限公司

低代码平台

高科技行业为何倚重多物理场仿真技术

思茂信息

仿真 建模 结构 高科技 辐射

Android & iOS 使用 ARMS 用户体验监控(RUM)的最佳实践

阿里巴巴云原生

阿里云 云原生 Arms

超强AI图像编辑器 Luminar Neo v1.21.0中文直装版 mac/win

Rose

软件测试学习笔记丨文本处理常用Linux命令-vi、grep、awk、sed

测试人

软件测试

如何用豆包MarsCode 打造简洁高效的星级评分组件?

TRAE.ai

人工智能 AI 代码 组件 模版

TiDB 新版本 Meetup 活动中 TiDBer 最关心的 8 个问题

TiDB 社区干货传送门

TON生态小游戏开发:推广、经济模型与UI设计的建设指南

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

中文最新版3D建模软件:Rhinoceros 8 (犀牛8) v8.12

Rose

RapidComposerV5 for mac v5.3.3 高效歌曲创作辅助工具

Rose

第五届国际科创节探寻新质生产力 候选品牌:行云管家

行云管家

国际科创节

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