写点什么

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

评论

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

什么是云电脑?云电脑怎么实现安全的远程办公环境?

青椒云云电脑

云电脑

使用 promise 重构 Android 异步代码

巫山老妖

android 异步编程

不止于“初见成效”,阿斯利康要让数据流转,以 AI 带动决策智能

Kyligence

数据智能

2023-11-08:用go语言,字符串哈希原理和实现 比如p = 233, 也就是课上说的选择的质数进制 “ 3 1 2 5 6 ...“ 0 1 2 3 4 hash[0] = 3 * p的0

福大大架构师每日一题

福大大架构师每日一题

浪潮海岳inBuilder低代码开发认知实践营正式开营

inBuilder低代码平台

低代码平台

厌恶不确定风险?这款轻量云服务器助力企业稳中向好

平平无奇爱好科技

Linux tail命令:显示文件结尾的内容

芯动大师

Android发热监控实践

得物技术

性能优化 发热功耗 App体验 端侧监控

设计师为什么要选择云电脑?

青椒云云电脑

云电脑

Python 数据库应用教程:安装 MySQL 及使用 MySQL Connector

小万哥

Python 程序员 软件 后端 开发

如何利用华为云耀云服务器L实例搭建个人博客网站?

平平无奇爱好科技

新手必看:Bitget Wallet 上购买 ETH 的步骤解析

BlockChain先知

苹果windows都想要?上大学该怎么选笔记本电脑?

青椒云云电脑

云电脑

康士柏新能源汽车检测解决方案走向市场化

Geek_2d6073

ERP管理屡不见效?记住这些秘诀助企业拨云见日

平平无奇爱好科技

云电脑与5G网络的结合将会带来什么

青椒云云电脑

云电脑

为什么明道云不提供原厂实施服务

明道云

小程序游戏创业大热,找对入局方式方能出奇制胜

平平无奇爱好科技

Bitget Wallet:使用 Base 链购买 ETH 的简明教程

石头财经

2023英特尔全栈解决方案服务商高层论坛成功举行

E科讯

现在哪个云电脑更好用

青椒云云电脑

云电脑

什么是云电脑?云电脑为何被企业青睐?

青椒云云电脑

云桌面 云电脑

T2T2撸毛攻略,以Bitget Wallet为例

股市老人

图形工作站out?云电脑成设计师新宠

青椒云云电脑

云电脑

青椒云桌面云一体机的优势在哪里?

青椒云云电脑

桌面云一体机

产品化的GPT,能否为“百模大战”照亮未来?

脑极体

AI

Kyligence Copilot 亮相第六届进博会,增添数智新活力

Kyligence

数据智能 决策智能

适合小团队协作的app推荐,这8款协同提效工具一定要知道!

彭宏豪95

效率工具 团队协作 在线白板 办公软件 团队协作工具

inBuilder低代码平台新特性推荐-第六期

inBuilder低代码平台

低代码平台

这就是访问者模式

千羽

Java 面试 后端 设计模式 实际应用

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