近刷到一些关于SSL免费证书的相关文章,记起了以前待过的一个公司,部分域名证书也是使用开源的,记得当时还稍微研究了一下,今天把以前的文章拿出来分享一下,希望对有些朋友能够提供一些参考。
一、域名的概念相关
注意:关于域名,应该先搞清楚下面的概念
1.1、域名和域名系统两码事
### 关于概念
域名(Domain Name):是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。
域名的主要目的是方便人们记忆和输入,通过域名系统将域名翻译成可由计算机是被的IP地址,从而实现网络的互联。
域名系统:通常称作DNS,是Domain Name System的缩写,翻译成中文就是“域名系统”,DNS使用UDP端口53。
DNS是互联网中的一项核心服务,是用于实现域名和IP地址相互映射的一个分布式数据库,它将域名翻译成可由计算机识别的IP地址,使用户可以更快速便捷地访问互联。
### 关于范围
域名:简单的说域名是通往网站的路,它由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称
域名系统:将域名和IP地址相互映射的一个分布式数据库,是进行域名和与之相对应的IP地址 转换的系统。
1.2、域名系统(DNS)相关
#1、域名系统的名字空间
域名系统的名字空间是层次结构的,可看作是一个树状结构,域名系统不区分树内节点和叶子节点,而统称为节点,不同节点可以使用相同的标记。
域名按照从右到左的顺序来划分优先等级,最右边的是最高级的根域,根域就是所谓的”.”,接下来就是顶级域又称一级域,一级域之后还有二级三级域,依此类推。
#2、域名的分配与管理
因特网域名与地址管理机构(ICANN,Internet Corporation for Assigned Names and Numbers),承担域名系统管理、IP地址分配、协议参数配置工作。
ICANN为不同的国家或地区设置了相应的顶级域名,这些域名通常都由两个英文字母组成。例如:.uk代表英国、.fr代表法国、.jp代表日本。中国的顶级域名是.cn,.cn下的域名由CNNIC进行管理。
除了代表各个国家顶级域名之外,ICANN最初还定义了7个顶级类别域名,它们是.com、.top、.edu、.gov、.mil、.net、.org;.com、.top用于企业,.edu用于教育机构,.gov用于政府机构,.mil用于军事部门,.net用于互联网络及信息中心等,.org用于非盈利性组织
随着因特网的发展,ICANN又增加了两大类共7个顶级类别域名,分别是.aero、.biz、coop、.info、.museum、.name、.pro
#3、域名系统服务器
DNS服务器是能提供域名解析的服务器。每一层域都会有一堆域名(DNS)服务器,记录类型可以是A(address)记录,NS(name server)记录,MX(mail),CNAME等
全世界只有13台根DNS服务器,但其实这是错误的观点,根DNS服务器只有具体的13个IP地址,但机器的数量不止13台。
DNS服务器一般分三种,根DNS服务器,顶级DNS服务器,权威DNS服务器
#4、DNS 查询方式
本地查询: 保存近期的DNS查询记录,主要包含两块:一是hosts文件,另外一个是客户机的高速缓存,可以用ipconfig/displaydns查看。
直接查询: 本地DNS服务器(家庭路由器),主要是将查询请求转发至转发器。转发器即家庭路由器WAN口设置的由ISP提供的外网DNS地址
迭代查询: 转发器按照域名级别高低,先后需要经过根域名服务器、二级域名服务器、三级域名服务器等多次挨个查询,才能得到相应的结果。
递归查询: 转发器将查询结果返回至本地DNS服务器,本地DNS服务器将其返回至主机得到查询结果,只需发出一次请求,就能得到相应的结果。
二、域名与SSL证书相关
2.1、什么是域名SSL证书
SSL证书是一种遵循SSL协议的数字证书,用于在网络上提供身份验证和加密功能。以下是关于SSL证书的详细说明
- 定义相关:SSL证书包含拥有者的公钥及相关身份信息,由受信任的数字证书颁发机构 (CA) 颁发。
- 功能相关: 它用于在SSL协议通信过程中对通信双方的身份进行认证,并协商加密的通信信道,以确保安全性。
- 身份验证:SSL证书建立HTTPS并信任传输,可以验证服务器的身份,防止恶意攻击者冒充合法服务器。
- 数据传输加密:通过使用SSL证书,可以加密通信数据,防止数据在传输过程中被篡改或窃取。
- 安全风险防范:SSL证书有助于提升系统的安全性,确保设备内的各服务间以及设备与外部通信的安全性。
2.2、域名与SSL证书的关系
- SSL证书是第三方机构认证的数字凭证,用于保护浏览器与网站之间的数据传输安全。但是SSL证书不是必须使用的。
- SSL证书并非只与域名有关系。一个网站可能会有多个子域名。这些子域名代表的不同区域都需要使用相应的SSL证书。
- SSL证书是一次性的,当目前的证书不能满足您的要求或者即将过期,需再购买新的证书并将新证书配置到目标域名再使用。
2.3、SSL证书类型相关
对 比 | 域名验证型(DV) | 组织验证型(OV) | 扩展验证型(EV) |
---|---|---|---|
验证内容 | 域名的所有权 | 全面企业身份验证,域名的所有权 | 最高等级企业身份验证,域名的所有权 |
签发速度 | 几分钟到一小时 | 一到三个工作日 | 三到七个工作日 |
申请年限 | 一年 | 一年到两年 | 一年到两年 |
适用场景 | 个人站点、博客等 | 中小型企业官网、政府机构和非敏感平台 | 大型电商网站、金融机构和政府部门 |
优缺点相关 | 价格便宜签发快,安全性较低 | 提供一定程度的信任, 验证过程复杂 | 提供最高信任度, 验证过程最复杂周期长,价格最贵 |
绑定域名数 | 通配符1个、通配符多域名100个 | 单域名、通配符域名1个,通配符多域名100个 | 支持单域名1个 |
三、收费与免费证书的区别
3.1、收费的SSL证书特点
- 专业认证: 收费SSL证书提供更加严格的企业身份认证,可以为企业网站增加更高的信任度。
- 完善保障: 收费SSL证书相比免费证书具备更全面的责任保障,提供更高的赔付金额和风险承担。
- 定制化选项: 收费SSL证书提供更多的定制化选项,以满足用户对于功能和安全性方面的需求。
- 更长有效期: 某些收费SSL证书提供更长的有效期,减少证书需要频繁进行更新的麻烦和操作。
3.2、免费SSL证书的特点
-
免费获取: 获取很容易。不论个人网站还是小型企业网站,都可通过一些权威机构或开放项目获得免费的SSL证书。
-
基本加密: 免费SSL证书提供了数据在传输过程中的基本加密功能,也能够避免数据在传输过程中有被窃取的风险。
-
网站认证: 虽然免费SSL证书通常只提供域名验证,但对于绝大部分个人网站和小型企业来说已经足够满足需求。
-
SEO优化: 使用SSL证书有助于提升网站在搜索引擎结果中的排名,因为所有的搜索引擎更倾向于推荐安全加密的网站。
3.3、收费与免费证书比较
-
安全性: 免费SSL证书只提供基本的加密功能,收费SSL证书在认证和安全性方面能够提供更高级别的保护。
-
信任度: 与免费的SSL证书相比,收费的SSL证书在企业身份验证和品牌认可度方面更能够让用户更加信任。
-
责任保障: 收费SSL证书通常提供更完善的责任保障和赔偿机制,也更能够为网站运营者提供更全面的保护。
-
价格区别: 免费SSL证书无需支付费用;收费SSL证书则费用根据品牌、保障等级以及有效期等因素而价格上都有所不同。
3.4、免费与收费相关总结
- 免费SSL证书适用于个人网站和小型企业,提供了基本的加密和信任功能,对于预算有限的用户来说是一种良好的选择。
- 收费SSL证书则适用于中大型企业和电子商务平台,具备更严格的认证和安全性保障,建立更高度的信任并为提供更全面的保护。
- 选择何种类型的SSL证书,需根据实际的需求和预算进行综合考量,任何选择的前提,都是要确保网站的数据安全和用户信任。
四、免费的证书工具相关
4.1、免费证书使用配置流程
宗旨: 开源免费的软件工具,旨在帮助用户自动获取、安装和续订颁发的免费SSL/TLS证书
具体的配置和使用流程:(此处不涉及续期操作)
- 根据主域名确定好泛域名,在DNS域名解析处,先添加二级泛域名的A记录解析
- 安装好开源的证书工具或者提供相关的执行命令
- 使用工具或者命令,生成域名对应的免费证书
- 在DNS域名解析栏 (公网云平台) 添加域名的TXT记录解析
- 上传证书文件到代理服务器对应的位置并配置好配置文件重启服务
4.2、部分开源的证书工具
- Acme.sh 工具 : 较早出现的一款、基于ACME 开放协议标准的工具,支持 ACME 的可视化平台,对于一般使用者的要求比较高。
- Certbot 工具: 自动获取和续签 SSL/TLS 证书,支持自动证书的申请和续签,支持泛域名的免费SSL证书,极大简化了证书的管理工作。
- Certd 工具: 开源免费SSL证书管理工具,支持私有部署、自动申请续期证书,后缀d 取自 Linux 守护进程的命名风格,意为证书守护进程。
- Certimate 工具: 一个由国人开发的 SSL 证书管理工具,提供一个 Web UI 界面,申请证书、部署证书,以及证书到期续签都是自动完成。
- Httpsok 工具: 一个专为 Nginx 和 OpenResty 设计的证书自动续签工具。支持泛解析、多域名、多服务器场景,并且兼容主流的 Linux 系统。
- Mkcert 工具: 基于 Let’s Encrypt 证书颁发机构的命令行工具,为个人或小型网站生成自签名证书。支持 Windows、Linux、MacOS 平台。
五、Certbot 工具安装相关
5.1、Certbot 安装方式介绍
### 安装Certbot有三种方式:
1、使用Certbot官方提供的对应平台的RPM包安装(YUM安装)
2、使用Certbot官方的提供的certbot-auto安装
3、使用pip安装Certbot,因为Certbot是Python程序
说明: 安装方式较多的是第一种方式和第三种方式,下面就拿这两种举例
5.2、相关安装方式举例
# YUM 的安装方式:
[root@localhost ~]# yum update
[root@localhost ~]# yum update
[root@localhost ~]# yum install certbot
[root@localhost ~]# certbot --version
certbot 1.11.0
# PIP 的安装方式
[root@aliyuntest ~]# mkdir -p /mnt/certbot
[root@aliyuntest ~]# cd /mnt/certbot/
[root@aliyuntest certbot]# python3 -m venv venv
[root@aliyuntest certbot]# source venv/bin/activate
(venv) [root@aliyuntest certbot]# pip install --upgrade pip
(venv) [root@aliyuntest certbot]# pip install --upgrade pip
(venv) [root@aliyuntest certbot]# pip install pyOpenSSL==23.1.0
(venv) [root@aliyuntest certbot]# pip install certbot
(venv) [root@aliyuntest certbot]# certbot --version
certbot 1.23.0
5.3、Certbot 相关命令介绍
# 1、 显示所有Certbot生成的证书
(venv) [root@aliyuntest certbot]# certbot certificates
# 2、显示某个域名证书的有效时间(同浏览器上显示)
(venv) [root@aliyuntest certbot]# openssl x509 -noout -in /etc/letsencrypt/live/tes.abcd.com/cert.pem -dates
# 3、撤销某个域名的相关证书
(venv) [root@aliyuntest certbot]# certbot revoke --cert-path /etc/letsencrypt/archive/tes.abcd.com/cert1.pem
说明:在一些老的版本里面,在撤销证书之后,还要进去删除操作(certbot delete),此版本不需要
# 4、强制更新证书,无视30的期限,一般做实验时也只有通过整个命令来验证下结果
(venv) [root@aliyuntest certbot]# certbot renew --force-renewal
六、 Certbot 配置及后续使用
6.1、Certbot 生成证书流程
1、添加域名 A 记录
### 在阿里云上面添加一个 A 记录后
# 登录阿里云操作
“控制台” --- “域名” --- “域名控制台” --- “域名控制台” --- “abcd.com” --- “域名解析” --- “添加记录”:
# 选项说明:
记录类型: A
主机记录: *.tes
解析请求来源: 默认
记录值: 121.196.188.188 # NGINX 服务所在的服务器外网地址
TTL: 10分钟
2、命令生成 SSL 证书
# YUM 安装的 Certbot 命令
[root@localhost ~]# certbot certonly --preferred-challenges dns --manual -d *.tes.abcd.com --server https://acme-v02.api.letsencrypt.org/directory --register-unsafely-without-email
... ...
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y
Account registered.
Requesting a certificate for *.tes.abcd.com
Performing the following challenges:
dns-01 challenge for tes.abcd.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.tes.abcd.com with the following value:
qKjZRCPS3U2NN5kjjVBAfUGjvL0SuAgTtxXGUYwodkA ###
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue ### 此处不要执行回车操作 !!!
# PIP 安装的 Certbot 命令
[root@aliyuntest ~]# cd /mnt/certbot/
[root@aliyuntest certbot]# source venv/bin/activate
(venv) [root@aliyuntest certbot]# certbot certonly --preferred-challenges dns --manual -d *.tes.dbcd.com --server https://acme-v02.api.letsencrypt.org/directory
... ...
# 说明:
1、 两种方式安装的Certbot,生成证书的命令是相同的
2、 YUM方式安装的Certbot,生成证书时,默认要求输入邮箱相关信息,使用 “--register-unsafely-without-email” 可屏蔽掉
3、添加域名 TXT 记录
### 在阿里云上面添加一个 TXT 记录后,再上面回车操作
# 登录阿里云操作
“控制台” --- “域名” --- “域名控制台” --- “域名控制台” --- “abcd.com” --- “域名解析” --- “添加记录”:
# 选项说明:
记录类型: txt
主机记录: _acme-challenge.tes
解析请求来源: 默认
记录值: qKjZRCPS3U2NN5kjjVBAfUGjvL0SuAgTtxXGUYwodkA # 上面的命令生成的
TTL: 10分钟
# 阿里云添加TXT记录后,阿里云添加TXT记录后,阿里云添加TXT记录后, 再执行 上面的回车操作,(重要的事情说三遍!!!)
4、查看 SSL 证书相关
[root@aliyuntest conf.d]# cd /etc/letsencrypt/ ### 主目录
[root@aliyuntest letsencrypt]# ll
drwx------ 4 root root 4096 Aug 4 12:01 accounts
drwx------ 3 root root 4096 Aug 15 10:06 archive
drwxr-xr-x 2 root root 4096 Aug 15 12:33 csr
drwx------ 2 root root 4096 Aug 15 12:33 keys
drwx------ 3 root root 4096 Aug 15 10:06 live
drwxr-xr-x 2 root root 4096 Aug 15 12:33 renewal
drwxr-xr-x 5 root root 4096 Aug 4 11:38 renewal-hooks
### renewal(配置文件)、archive(证书文件源文件) 、live(证书文件映射文件)
[root@aliyuntest letsencrypt]# cd live/tes.abcd.com
[root@aliyuntest tes.abcd.com]# ll
lrwxrwxrwx 1 root root 41 Aug 15 12:33 cert.pem -> ../../archive/tes.abcd.com/cert1.pem
lrwxrwxrwx 1 root root 42 Aug 15 12:33 chain.pem -> ../../archive/tes.abcd.com/chain1.pem
lrwxrwxrwx 1 root root 46 Aug 15 12:33 fullchain.pem -> ../../archive/tes.abcd.com/fullchain1.pem
lrwxrwxrwx 1 root root 44 Aug 15 12:33 privkey.pem -> ../../archive/tes.abcd.com/privkey1.pem
[root@aliyuntest letsencrypt]# cd archive/tes.abcd.com
[root@aliyuntest tes.abcd.com]# ll
-rw-r--r-- 1 root root 1777 Aug 15 10:06 cert1.pem
-rw-r--r-- 1 root root 3749 Aug 15 10:06 chain1.pem
-rw-r--r-- 1 root root 5526 Aug 15 10:06 fullchain1.pem
-rw------- 1 root root 1704 Aug 15 10:06 privkey1.pem
[root@aliyuntest letsencrypt]# cd renewal
[root@aliyuntest renewal]# ll
-rw-r--r-- 1 root root 744 Aug 15 12:33 tes.abcd.com.conf
[root@aliyuntest renewal]# cat abc.testabc.com.com.conf
# renew_before_expiry = 30 days
version = 1.23.0
archive_dir = /etc/letsencrypt/archive/tes.abcd.com
cert = /etc/letsencrypt/live/tes.abcd.com/cert.pem
privkey = /etc/letsencrypt/live/tes.abcd.com/privkey.pem
chain = /etc/letsencrypt/live/tes.abcd.com/chain.pem
fullchain = /etc/letsencrypt/live/tes.abcd.com/fullchain.pem
# Options used in the renewal process
[renewalparams]
account = d37cda10c16f316a8f18d3bc58436dbe
pref_challs = dns-01,
authenticator = manual
server = https://acme-v02.api.letsencrypt.org/directory
6.2、配置访问代理(NGINX)
### 只粘贴主要的配置部分
server {
listen 80;
listen 443 ssl;
server_name nginx.tes.abcd.com;
ssl_certificate /etc/letsencrypt/live/tes.abcd.com/fullchain.pem; ##
ssl_certificate_key /etc/letsencrypt/live/tes.abcd.com/privkey.pem; ##
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
6.3、浏览器访问验证证书
说明:左图为证书更新后效果,右边是某大厂的门户网站证书信息 ( 居然也是使用免费证书!)
6.4、证书配置使用相关说明
### 关于上面说到的五个步骤说明
# 1、 步骤一的配置域名A记录解析,这个是第一次使用域名及证书时配置,配置一次后后面不再有相关的操作
# 2、 步骤二和步骤一一样,安装好Certbot命令工具后后续只要命令正常使用,后面不再有相关的操作(如果是Docker方式也一样)
# 3、 后续涉及的操作一直就是 步骤三、步骤四、步骤五,这些才是重点
3.1、步骤三的操作是生成证书操作
3.2、步骤四关于域名TXT记录(有手动和自动两种方式实现(具体下一节详说))
3.3、步骤五是更新证书文件和使配置文件重新生效的操作
七、DNS TXT记录的添加相关
7.1、手动方式添加流程
# 手动的方式添加,就是在创建SSL证书的过程中(未创建完之前)
根据Certbot命令执行后,给出的提示,去公有云的DNS上添加TXT解析 ,提示如下:
[root@localhost ~]# certbot certonly --preferred-challenges dns --manual -d *.tes.abcd.com --server https://acme-v02.api.letsencrypt.org/directory
# 输出如下:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name:
_acme-challenge.tes.abcd.com.
with the following value:
qKjZRCPS3U2NN5kjjVBAfUGjvL0SuAgTtxXGUYwodkA
Before continuing, verify the TXT record has been deployed. Depending on the DNS
provider, this may take some time, from a few seconds to multiple minutes. You can
check if it has finished deploying with aid of online tools, such as the Google
Admin Toolbox: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.tes.abcd.com.
Look for one or more bolded line(s) below the line ';ANSWER'. It should show the
value(s) you've just added.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue ### 此处不要执行回车操作 !!!
### 在阿里云上面添加一个 TXT 记录后,再上面回车操作
# 登录阿里云操作
“控制台” --- “域名” --- “域名控制台” --- “域名控制台” --- “abcd.com” --- “域名解析” --- “添加记录”:
# 选项说明:
记录类型: txt
主机记录: _acme-challenge.tes
解析请求来源: 默认
记录值: qKjZRCPS3U2NN5kjjVBAfUGjvL0SuAgTtxXGUYwodkA # 上面的命令生成的
TTL: 10分钟
# 阿里云操作后 再执行 上面的回车操作,阿里云添加TXT记录后,阿里云添加TXT记录后 (重要的事情说三遍)
7.2、自动的方式添加流程
自动添加相关说明
## 不管是申请还是续期,只要是通配符证书,Certbot 操作者必须手动添加 DNS TXT 记录,这个操作比较麻烦。
## Certbot 提供了一个 hook,可以调用 DNS 服务商的 API 接口,动态添加 TXT 记录,这样就无需人工干预了。
# 实现能够自动添加DNS 的 TXT解析记录的前提条件
1、 配置一个阿里云子账号并申请相关权限
2、 安装支持Certbot并能够调用DNS API的组件
# 关于添加阿里云子账号相关的这里忽略,下面重点介绍 DNS相关的API组件
八、DNS 相关API组件相关
8.1、certbot-dns-aliyun 组件
[root@aliyuntest ~]# mkdir -p /mnt/certbot
[root@aliyuntest ~]# cd /mnt/certbot/
[root@aliyuntest certbot]# python3 -m venv venv
[root@aliyuntest certbot]# source venv/bin/activate
(venv) [root@aliyuntest certbot]# pip install --upgrade pip
(venv) [root@aliyuntest certbot]# pip install --upgrade pip
Looking in indexes: http://mirrors.cloud.aliyuncs.com/pypi/simple/
Requirement already satisfied: pip in ./venv/lib/python3.6/site-packages (21.3.1)
(venv) [root@aliyuntest certbot]# pip install pyOpenSSL==23.1.0
(venv) [root@aliyuntest certbot]# pip install certbot-dns-aliyun
(venv) [root@aliyuntest certbot]# cd /mnt/certbot
(venv) [root@aliyuntest certbot]# vim credentials.ini
certbot_dns_aliyun:dns_aliyun_access_key = LTAI5tNGtKFuXXXXXXXX
certbot_dns_aliyun:dns_aliyun_access_key_secret = BT4KtvcE2LTMGnXXXXXXXX
(venv) [root@aliyuntest certbot]# chmod 600 credentials.ini
(venv) [root@aliyuntest certbot]# /mnt/certbot/venv/bin/certbot certonly -d *.u.abcd.com -a certbot-dns-aliyun:dns-aliyun --certbot-dns-aliyun:dns-aliyun-credentials /mnt/certbot/credentials.ini --register-unsafely-without-email
from cryptography.hazmat.bindings.openssl.binding import Binding
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugin legacy name certbot-dns-aliyun:dns-aliyun may be removed in a future version. Please use dns-aliyun instead.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y
Account registered.
Requesting a certificate for *.u.abcd.com
Waiting 30 seconds for DNS changes to propagate
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/u.abcd.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/u.abcd.com/privkey.pem
This certificate expires on 2023-11-14.
These files will be updated when the certificate renews.
NEXT STEPS:
- The certificate will need to be renewed before it expires. Certbot can automatically renew the certificate in the background, but you may need to take steps to enable that functionality. See https://certbot.org/renewal-setup for instructions.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
8.2、certbot-letencrypt-wildcardcertificates-alydns-au 组件
[root@aliyuntest ~]# git clone https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au
[root@aliyuntest ~]# cd certbot-letencrypt-wildcardcertificates-alydns-au/
[root@aliyuntest ~]# cp au.sh au.sh.bak
[root@aliyuntest ~]# vim au.sh
#填写 阿里云的 AccessKey ID 及 AccessKey Secret
ALY_KEY="LTAI5tNGtKFuhXXXXXXXXX"
ALY_TOKEN="BT4KtvcE2LTMGXXXXXXXXXXX"
[root@aliyuntest ~]# chmod + au.sh
[root@aliyuntest ~]# cd /mnt/certbot/
[root@aliyuntest certbot]# source venv/bin/activate
(venv) [root@aliyuntest ~]# certbot certonly -d *.abc.test.com --manual --preferred-challenges dns --manual-auth-hook "/root/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh python aly add" --manual-cleanup-hook "/root/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh python aly clena"
from cryptography.hazmat.bindings.openssl.binding import Binding
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for *.abc.test.com
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/abc.test.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/abc.test.com/privkey.pem
This certificate expires on 2023-11-02.
These files will be updated when the certificate renews.
NEXT STEPS:
- The certificate will need to be renewed before it expires. Certbot can automatically renew the certificate in the background, but you may need to take steps to enable that functionality. See https://certbot.org/renewal-setup for instructions.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
九、证书到期的续期相关
9.1、证书续期期限问题
# 1、 由于 Let's Encrypt 政策,SSL/TLS 证书的有效期只有三个月(90天)。但是也可以到期自动续约,不影响使用。
# 2、 证书续订的命令: Certbot renew
# 它会自动检查您的证书是否过期,并在需要时进行续订。如果运行该命令时没有到期的证书需要更新,它将不会执行任何操作。
[root@aliyuntest conf.d]# cd /etc/letsencrypt/ ### 主目录
[root@aliyuntest letsencrypt]# ll
drwx------ 4 root root 4096 Aug 4 12:01 accounts
drwx------ 3 root root 4096 Aug 15 10:06 archive
drwxr-xr-x 2 root root 4096 Aug 15 12:33 csr
drwx------ 2 root root 4096 Aug 15 12:33 keys
drwx------ 3 root root 4096 Aug 15 10:06 live
drwxr-xr-x 2 root root 4096 Aug 15 12:33 renewal
drwxr-xr-x 5 root root 4096 Aug 4 11:38 renewal-hooks
## archive 、live 、renewal
[root@aliyuntest letsencrypt]# cd renewal
[root@aliyuntest renewal]# ll
-rw-r--r-- 1 root root 744 Aug 15 12:33 tes.abcd.com.conf
[root@aliyuntest renewal]# cat tes.abcd.com.conf
# renew_before_expiry = 30 days
version = 1.23.0
archive_dir = /etc/letsencrypt/archive/tes.abcd.com
cert = /etc/letsencrypt/live/tes.abcd.com/cert.pem
privkey = /etc/letsencrypt/live/tes.abcd.com/privkey.pem
chain = /etc/letsencrypt/live/tes.abcd.com/chain.pem
fullchain = /etc/letsencrypt/live/tes.abcd.com/fullchain.pem
# Options used in the renewal process
[renewalparams]
account = d37cda10c16f316a8f18d3bc58436dbe
pref_challs = dns-01,
authenticator = manual
server = https://acme-v02.api.letsencrypt.org/directory
# 3、 证书到期前的30天之内才能够续期,否则certbot会判断没有必要进行续期
# 3.1 申请证书:
(venv) [root@aliyuntest certbot]# certbot certonly -d *.tes.abcd.com --manual --preferred-challenges dns --manual-auth-hook "/root/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh python aly add" --manual-cleanup-hook "/root/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh python aly clena"
(venv) [root@aliyuntest certbot]# openssl x509 -noout -in /etc/letsencrypt/live/tes.abcd.com/cert.pem -dates
notBefore=Aug 15 01:05:49 2023 GMT
notAfter=Nov 13 01:05:48 2023 GMT
[root@aliyuntest letsencrypt]# cd live/tes.abcd.com
[root@aliyuntest tes.abcd.com]# ll
lrwxrwxrwx 1 root root 41 Aug 15 10:06 cert.pem -> ../../archive/tes.abcd.com/cert1.pem
lrwxrwxrwx 1 root root 42 Aug 15 10:06 chain.pem -> ../../archive/tes.tabcd.com/chain1.pem
lrwxrwxrwx 1 root root 46 Aug 15 10:06 fullchain.pem -> ../../archive/tes.abcd.com/fullchain1.pem
lrwxrwxrwx 1 root root 44 Aug 15 10:06 privkey.pem -> ../../archive/tes.abcd.com/privkey1.pem
[root@aliyuntest letsencrypt]# cd archive/tes.abcd.com
[root@aliyuntest tes.abcd.com]# ll
-rw-r--r-- 1 root root 1777 Aug 15 10:06 cert1.pem
-rw-r--r-- 1 root root 3749 Aug 15 10:06 chain1.pem
-rw-r--r-- 1 root root 5526 Aug 15 10:06 fullchain1.pem
-rw------- 1 root root 1704 Aug 15 10:06 privkey1.pem
# 3.2 Cretbot renew 尝试续期
(venv) [root@aliyuntest certbot]# certbot renew --manual --preferred-challenges dns --manual-auth-hook "/root/certbot-letencrypt-wildcardcerau/au.sh python aly add" --manual-cleanup-hook "/root/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh python aly clean"
from cryptography.hazmat.bindings.openssl.binding import Binding
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/tes.abcd.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Certificate not yet due for renewal #############################################################
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
The following certificates are not due for renewal yet:
/etc/letsencrypt/live/tes.abcd.com/fullchain.pem expires on 2023-11-13 (skipped)
No renewals were attempted.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[root@aliyuntest letsencrypt]# cd live/tes.abcd.com
[root@aliyuntest tes.abcd.com]# ll
lrwxrwxrwx 1 root root 41 Aug 15 10:06 cert.pem -> ../../archive/tes.abcd.com/cert1.pem
lrwxrwxrwx 1 root root 42 Aug 15 10:06 chain.pem -> ../../archive/tes.abcd.com/chain1.pem
lrwxrwxrwx 1 root root 46 Aug 15 10:06 fullchain.pem -> ../../archive/tes.abcd.com/fullchain1.pem
lrwxrwxrwx 1 root root 44 Aug 15 10:06 privkey.pem -> ../../archive/tes.abcd.com/privkey1.pem
[root@aliyuntest letsencrypt]# cd archive/tes.abcd.com
[root@aliyuntest tes.abcd.com]# ll
-rw-r--r-- 1 root root 1777 Aug 15 10:06 cert1.pem
-rw-r--r-- 1 root root 3749 Aug 15 10:06 chain1.pem
-rw-r--r-- 1 root root 5526 Aug 15 10:06 fullchain1.pem
-rw------- 1 root root 1704 Aug 15 10:06 privkey1.pem
# 3.3 Cretbot 使用强制更新续期 (certbot renew --force-renewal)
(venv) [root@aliyuntest certbot]# certbot renew --force-renewal --manual --preferred-challenges dns --manual-auth-hook "/root/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh python aly add" --manual-cleanup-hook "/root/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh python aly clean"
from cryptography.hazmat.bindings.openssl.binding import Binding
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/tes.abcd.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Renewing an existing certificate for *.tes.abcd.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all renewals succeeded: ###################################################
/etc/letsencrypt/live/tes.abcd.com/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[root@aliyuntest letsencrypt]# cd archive/tes.abcd.com/
[root@aliyuntest tes.abcd.com.com]# ll
-rw-r--r-- 1 root root 1777 Aug 15 10:06 cert1.pem
-rw-r--r-- 1 root root 1777 Aug 15 10:26 cert2.pem
-rw-r--r-- 1 root root 3749 Aug 15 10:06 chain1.pem
-rw-r--r-- 1 root root 3749 Aug 15 10:26 chain2.pem
-rw-r--r-- 1 root root 5526 Aug 15 10:06 fullchain1.pem
-rw-r--r-- 1 root root 5526 Aug 15 10:26 fullchain2.pem
-rw------- 1 root root 1704 Aug 15 10:06 privkey1.pem
-rw------- 1 root root 1704 Aug 15 10:26 privkey2.pem
[root@aliyuntest letsencrypt]# cd live/tes.abcd.com.com/
[root@aliyuntest tes.abcd.com]# ll
lrwxrwxrwx 1 root root 41 Aug 15 10:26 cert.pem -> ../../archive/tes.abcd.com/cert2.pem
lrwxrwxrwx 1 root root 42 Aug 15 10:26 chain.pem -> ../../archive/tes.abcd.com/chain2.pem
lrwxrwxrwx 1 root root 46 Aug 15 10:26 fullchain.pem -> ../../archive/tes.abcd.com/fullchain2.pem
lrwxrwxrwx 1 root root 44 Aug 15 10:26 privkey.pem -> ../../archive/tes.abcd.com/privkey2.pem
-rw-r--r-- 1 root root 692 Aug 15 10:06 README
(venv) [root@aliyuntest certbot]# openssl x509 -noout -in /etc/letsencrypt/live/tes.abcd.com/cert.pem -dates
notBefore=Aug 15 01:25:59 2023 GMT
notAfter=Nov 13 01:25:58 2023 GMT
9.2、续期方式命令的不同
# 1、使用 certbot-dns-aliyun 组件
Certbot 结合 certbot-dns-aliyun组件,进行证书续期的时候,命令为: certbot renew
certbot renew --cert-name *.tes.abcd.com
# 2、使用 certbot-letencrypt-wildcardcertificates-alydns-au 组件
Certbot 结合 certbot-letencrypt-wildcardcertificates-alydns-au 组件,进行证书续期的时候,命令为: Certbot renew, 但是要带上组件相关参数
# 对比下申请命令和续期命令
(venv) [root@aliyuntest certbot]# certbot certonly -d *.tes.abcd.com --manual --preferred-challenges dns
--manual-auth-hook "/PATH/au.sh python aly add" --manual-cleanup-hook "/PATH/au.sh python aly clena"
(venv) [root@aliyuntest certbot]# certbot renew --cert-name *.tes.abcd.com --manual --preferred-challenges dns
--manual-auth-hook "/PATH/au.sh python aly add" --manual-cleanup-hook "/PATH/au.sh python aly clean"
十、SSL证书使用更新完整流程
10.1、手动的方式使用的完整流程
### 此情况下没有安装使用 DNS 的相关组件
1、公有云上添加DNS里面对应 A 记录
2、使用 Certbot 生成证书
3、公有云上添加DNS里面对应 TXT 记录
4、准备好SSL的两个证书文件
5、代理服务器上配置SSL相关条目
6、到期前进行证书的手动续签
7、准备好SSL的两个证书文件
8、重启下服务代理生效配置
10.2、自动的方式使用的完整流程
### 此情况下是在安装了并使用DNS相关组件
1、第一次申请证书的时候,手动申请,命令里面带上DNS API 相关参数
[root@localhost ~]# certbot certonly -d *.tes.abcd.com --server https://acme-v02.api.letsencrypt.org/directory \
--register-unsafely-without-email \
-a certbot-dns-aliyun:dns-aliyun --certbot-dns-aliyun:dns-aliyun-credentials /etc/aliyun/access-keys
或者是下面
(venv) [root@aliyuntest certbot]# certbot certonly -d *.tes.abcd.com --manual --preferred-challenges dns
--manual-auth-hook "/root/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh python aly add" \
--manual-cleanup-hook "/root/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh python aly clena"
2、准备好SSL的两个证书文件
3、代理服务器上配置SSL相关条目
4、使用计划任务进行证书续签
[root@localhost ~]# certbot renew --cert-name *.tes.abcd.com
(venv) [root@aliyuntest certbot]# certbot renew --cert-name *.tes.abcd.com --manual --preferred-challenges dns
--manual-auth-hook "/PATH/au.sh python aly add" --manual-cleanup-hook "/PATH/au.sh python aly clean"
5、准备好SSL的两个证书文件(脚本实现)
6、重启下服务代理生效配置(脚本实现)