您当前的位置:首页 > 电脑百科 > 站长技术 > 服务器

Let’s Encrypt实践指北

时间:2020-09-17 09:25:56  来源:  作者:

最近刚好有个项目需要配置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本身支持很多插件来简化这些操作。详情见下表:

Let’s Encrypt实践指北

Certbot 插件选择

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

实践

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

安装certbot-auto

cd ~
wget https://dl.eff.org/certbot-autosudo mv certbot-auto /usr/local/bin/certbot-auto
sudo chown root /usr/local/bin/certbot-auto
sudo 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.log
Plugins selected: Authenticator manual, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): your_email@gmail.com
-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A
Plugins selected: Authenticator manual, Installer None
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for your_domain.com
-------------------------------------------------------------------------------
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your 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为例,如下图:

Let’s Encrypt实践指北

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申请的证书有效期一般都是为三个月,所以到期后需要再次申请,网上相关自动化工具一抓一大把,就不在这里赘述了。如果遇到问题,可以继续探讨。

Ref

  • Let’s Encrypt - FAQ (中英文)
  • Let’s Encrypt - Rate Limit (中英文)
  • Let’s Encrypt - Challenge Types (中英文)
  • Let’s Encrypt - End of Life Plan for ACMEv1
  • Certbot - Certbot-auto
  • Certbot - Getting certificates and plugins

文/ThoughtWorks朱海波



Tags:Let’s Encrypt   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
最近刚好有个项目需要配置HTTPS,也购买了域名,尤其在知道了本文要介绍的“神器” —— Let’s Encrypt 之后,大大简化了学习成本和时间。初衷一直以来,对于HTTPS...【详细内容】
2020-09-17  Tags: Let’s Encrypt  点击:(62)  评论:(0)  加入收藏
▌简易百科推荐
阿里云镜像源地址及安装网站地址https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b111kK44P更新源之前把之前的国外的镜像先备份一下 切换到yumcd...【详细内容】
2021-12-27  干程序那些事    Tags:CentOS7镜像   点击:(1)  评论:(0)  加入收藏
前言在实现TCP长连接功能中,客户端断线重连是一个很常见的问题,当我们使用netty实现断线重连时,是否考虑过如下几个问题: 如何监听到客户端和服务端连接断开 ? 如何实现断线后重...【详细内容】
2021-12-24  程序猿阿嘴  CSDN  Tags:Netty   点击:(12)  评论:(0)  加入收藏
一. 配置yum源在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repovim /etc/yum.repos.d/google-chrome.repo按i进入编辑模式写入如下内容:[google-chrome]name=googl...【详细内容】
2021-12-23  有云转晴    Tags:chrome   点击:(7)  评论:(0)  加入收藏
一. HTTP gzip压缩,概述 request header中声明Accept-Encoding : gzip,告知服务器客户端接受gzip的数据 response body,同时加入以下header:Content-Encoding: gzip:表明bo...【详细内容】
2021-12-22  java乐园    Tags:gzip压缩   点击:(8)  评论:(0)  加入收藏
yum -y install gcc automake autoconf libtool makeadduser testpasswd testmkdir /tmp/exploitln -s /usr/bin/ping /tmp/exploit/targetexec 3< /tmp/exploit/targetls -...【详细内容】
2021-12-22  SofM    Tags:Centos7   点击:(7)  评论:(0)  加入收藏
Windows操作系统和Linux操作系统有何区别?Windows操作系统:需支付版权费用,(华为云已购买正版版权,在华为云购买云服务器的用户安装系统时无需额外付费),界面化的操作系统对用户使...【详细内容】
2021-12-21  卷毛琴姨    Tags:云服务器   点击:(6)  评论:(0)  加入收藏
参考资料:Hive3.1.2安装指南_厦大数据库实验室博客Hive学习(一) 安装 环境:CentOS 7 + Hadoop3.2 + Hive3.1 - 一个人、一座城 - 博客园1.安装hive1.1下载地址hive镜像路径 ht...【详细内容】
2021-12-20  zebra-08    Tags:Hive   点击:(9)  评论:(0)  加入收藏
以下是服务器安全加固的步骤,本文以腾讯云的CentOS7.7版本为例来介绍,如果你使用的是秘钥登录服务器1-5步骤可以跳过。1、设置复杂密码服务器设置大写、小写、特殊字符、数字...【详细内容】
2021-12-20  网安人    Tags:服务器   点击:(7)  评论:(0)  加入收藏
项目中,遇到了一个问题,就是PDF等文档不能够在线预览,预览时会报错。错误描述浏览器的console中,显示如下错误:nginx代理服务报Mixed Content: The page at ******** was loaded...【详细内容】
2021-12-17  mdong    Tags:Nginx   点击:(7)  评论:(0)  加入收藏
转自: https://kermsite.com/p/wt-ssh/由于格式问题,部分链接、表格可能会失效,若失效请访问原文密码登录 以及 通过密钥实现免密码登录Dec 15, 2021阅读时长: 6 分钟简介Windo...【详细内容】
2021-12-17  LaLiLi    Tags:SSH连接   点击:(16)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条