受欢迎的博客标签

全站部署https实战系列(3)-Let’s Encrypt免费证书的种类、域名所有权验证及Certbot客户端类型介绍

Published

用Let’s Encrypt申请免费证书,你需要掌握的如下知识点:

Let’s Encrypt用客户端来申请免费证书;

Let’s Encrypt有多种客户端工具可供选择,本系列本文选用Certbot客户端。

Let’s Encrypt用客户端来申请免费证书,首先要验证域名所有权;

Certbot客户端提供了三种验证域名所有权验证方式,本文选用standlone方式。

 

Let’s Encrypt申请证书简介

1.Let’s Encrypt申请证书,分两大部分

一是要证明你对你的域名有控制权,防止你为别人申请证书。

二是证书的颁发和吊销。

工作原理:https://letsencrypt.org/zh-cn/how-it-works/

 

2.Let’s Encrypt 支持三种证书


1)单域名证书:证书仅仅包含一个域名。
2)Multi-domain (SAN) Certificates(SAN 证书)

Our issuance policy allows for up to 100 names per certificate.

一张证书可以包括多个域名(Let’s Encrypt 限制是 20),也就是证书可以包含下列的主机:www.example.com、www.example.cn、blog.example.com 等等。

3)通配符证书
通配符证书就是证书中可以包含一个通配符,比如 .example.com、.example.cn,大型企业也可以使用通配符证书了,一张证书可以防止更多的主机了。

 

3 Let’s Encrypt 的客户端

客户端用于申请、删除、管理服务器上的域名证书。

申请Let's encrypt证书,既可以使用certbot官方客户端工具,也可以使用第三方客户端工具如:acme.sh,各有所长

Let’s Encrypt 的常见的客户端有两种:

2.1.1 certbot-auto 

2.1.2  certbot

2.1.3 acme.sh


certbot-auto 和 certbot 的不同之处在于运行 certbot-auto 会自动安装它自己所需要的一些依赖,并且自动更新,推荐使用(因为各个 Linux 发行版的仓库,更新不是很及时)。

4. certbot 的版本选择 

4.1 Certbot v2.2.0 and older

https://eff-certbot.readthedocs.io/en/stable/using.html#manual

4.2 Certbot v2.3.0 and newer

https://eff-certbot.readthedocs.io/en/stable/using.html#manual

3. Let’s Encrypt 校验域名的所有权

客户在申请 Let’s Encrypt 证书的时候,首先需要校验域名的所有权,证明操作者有权利为该域名申请证书。

目前支持验证方式有2种:

1.DNS验证方式  注意:申请通配符证书,只能使用 dns-01 的方式
2.文件验证

DNS验证dns-01

DNS验证的原理是你需要创建一条TXT的记录,设置指定值,certbot检查到这条记录就完成验证。给域名添加一个 DNS TXT 记录。

文件验证方式http-01

在域名https://example.com/ 的已知 URI 下对应的 Web 服务器下放置一个 HTTP well-known URL 资源文件。


tls-sni-01:在域名对应的 Web 服务器下放置一个 HTTPS well-known URL 资源文件。

文件验证的原理是在你的网站下面放一个验证文件(/.well-known/acme-challenge/目录下),certbot通过域名直接访问到这个验证文件,能访问到说明是你的网站,也就可以申请证书。

 

两种方式各有其适用场景,对于自己可以控制的域名,直接通过DNS验证是最便捷的,不需要任何nginx的辅助就可以完成申请和续期。

如果是给客户提供服务,并没有域名的控制权,就只能使用文件验证的方式。假如使用了DNS的验证方式,客户首次申请是要手动改DNS记录,等到过期后,也不能自动续期,需要再次手动调整DNS记录。

为保证域名正常续期,使用文件验证的方式。

 

3.Certbot支持两种类型的plugin

3.1 Authenticators

用来获取证书

3.2 Installers

用来安装证书

 

4.Certbot常用的plugin简要说明

Certbot provides a variety of ways to obtain SSL certificates through plugins:

webroot
standone
nginx

source:https://eff-certbot.readthedocs.io/en/stable/using.html#certbot-commands

 

certbot  有两种方式验证域名所有权后生成证书

 

Webroot方式: certbot 会利用既有的 web server,在其 web root目录下创建隐藏文件(即创建隐藏文件.well-known), Let’s Encrypt 服务端会通过域名来访问这些隐藏文件,以确认你的确拥有对应域名的控制权。获取证书时无需暂停webserver的运行。

certbot certonly --webroot  -d liuhaolin.com -d www.liuhaolin.com   -w /website/mysite --register-unsafely-without-email

 

standalone 方式: certbot 自己运行一个 web server 来进行验证。如果我们自己的服务器上已经有 web server 正在运行 (比如 Nginx 或 Apache ),用 standalone 方式的话需要先停止服务,释放出80 或 443 端口,否则会出现端口被占用。

服务器未运行webserver可以使用该方式,要保持80或443端口开放。

 

Nginx:自动获取和安装证书(自动修改配置文件)

DNS Plugins: 泛域名支持,可以使用DNS Plugins来实现。

see:https://www.jianshu.com/p/6ea81a7b768f

https://www.cnblogs.com/pheye/p/13021420.html