《Letsencrypt简单教程》一文较为详细地介绍了Letsencrypt的安装以及使用方法,然而,最近在一台服务器部署letsencrypt时,执行letsencrypt-auto命令出现错误:

./letsencrypt-auto --help all
Skipping bootstrap because certbot-auto is deprecated on this system.
Your system is not supported by certbot-auto anymore.
Certbot cannot be installed.
Please visit https://certbot.eff.org/ to check for other alternatives.

系统不再被支持!!!

查看certbot(https://github.com/certbot/certbot/releases)在

2021年1月的更新日志:

●certbot-auto was deprecated on all systems. For more information about this
change, see
Certbot-auto no longer works on Debian based systems - #7 by bmw - Help - Let's Encrypt Community Support.

可知:

certbot-auto不再支持所有的操作系统!根据作者的说法,certbot团队认为维护certbot-auto在几乎所有流行的UNIX系统以及各种环境上的正常运行是一项繁重的工作,加之certbot-auto是基于python 2编写的,而python 2即将寿终正寝,将certbot-auto迁移至python 3需要大量工作,这非常困难,因此团队决定放弃certbot-auto的维护。

既然如此,现在我们还能继续使用certbot吗?certbot团队使用了基于snap的新的分发方法。

1. 环境

操作系统:CentOS 7

WebserverNginx

2. 安装letsencrypt

2.1. 安装letsencrypt之前,需要先安装snaps。

a. 先安装epel。

yum install epel-release

b. 安装snapd。

yum install snapd

c. 启用snapd.socket。

systemctl enable --now snapd.socket

d. 创建/var/lib/snapd/snap和/snap之间的链接。

ln -s /var/lib/snapd/snap /snap

e. 退出账号并重新登录,或者重启系统,确保snap启用。

f. 安装/更新core软件包。

snap install core

snap refresh core

如果执行以上命令提示错误:

error: too early for operation, device not yet seeded or device model not acknowledged

则需要先禁用SELinux:

setenforce 0

2.2. 卸载已安装的certbot

如果之前在系统上已经部署过certbot,则需要先将其进行卸载。

a. 卸载certbot。

yum remove certbot

b. 根据certbot安装位置删除相关文件。

rm /usr/local/bin/certbot-auto

c. 删除certbot附加软件包。

rm -rf /opt/eff.org/certbot

2.3. 安装certbot。

a. 通过snap安装certbot。

snap install --classic certbot

b. 创建/snap/bin/certbot的软链接,方便certbot命令的使用。

ln -s /snap/bin/certbot /usr/bin/certbot

3. letsencrypt的使用

3.1. 获取证书。

a. 生成证书。

确保nginx处于运行状态,需要获取证书的站点在80端口,并且可以正常访问。

certbot certonly --nginx --email xxx@mail.com -d a.do.com -d b.do.com

b. 更新nginx配置并重启nginx。

3.2. 更新证书。

certbot renew

4.    错误

运行certbot 相关命令时提示一下错误:

An unexpected error occurred:
ValueError: Requesting acme-v02.api.letsencrypt.org/directory: Network is unreachable

执行curl确认网络是否正常:

curl -4 -v https://acme-v02.api.letsencrypt.org/directory
curl -6 -v https://acme-v02.api.letsencrypt.org/directory

如确实无法访问,请确认防火墙设置,如防火墙设置正确,则等待一段时间后重试。出现过该站点在一段时间内在指定服务器无法访问,过一段时间后恢复正常的情况。

5.    Letsencrypt根证书过期问题

Letsencrypt的根证书DST Root CA X3已在2021-9-30过期,以下为在服务端通过Letsencrypt证书管理程序申请证书时生成的fullchain.pem文件中的证书链示例,需要指出的是,证书链中实际并不包含根证书,根证书由客户端从本地可信任证书存储区域中匹配补全:

[Leaf]:
subjectName: CN=dancen.com
issuerName: CN=R3,O=Let's Encrypt,C=US
notBefore: 2021/08/30_10:18:42
notAfter: 2021/11/28_10:18:41
subjectAlternativeName: [dancen.com,www.dancen.com][Intermediate_1/2]:
subjectName: CN=R3,O=Let's Encrypt,C=US
issuerName: CN=ISRG Root X1,O=Internet Security Research Group,C=US
notBefore: 2020/09/04_08:00:00
notAfter: 2025/09/16_00:00:00[Intermediate_2/2]:
subjectName: CN=ISRG Root X1,O=Internet Security Research Group,C=US
issuerName: CN=DST Root CA X3,O=Digital Signature Trust Co.
notBefore: 2021/01/21_03:14:03
notAfter: 2024/10/01_02:14:03[Root](由客户端补全):
subjectName: CN=DST Root CA X3,O=Digital Signature Trust Co.
issuerName: CN=DST Root CA X3,O=Digital Signature Trust Co.
notBefore: 2000/10/01_05:12:19
notAfter: 2021/09/30_22:01:15

对于根证书过期,Letsencrypt早在几年以前已经提供了新的名为ISRG Root X1的根证书,该证书与上面的证书链中的中间证书ISRG Root X1同名,并且使用相同的公钥,但实际为一个自签名的根证书,即证书链中的中间证书R3是由两个同名,但不同的ISRG Root X1证书交叉签名的。因此,对于终端证书,实际上存在两条可用的证书链,只不过fullchain.pem文件中明确指定的证书链为证书链1:

证书链1:guangzhuiyuan.com > R3 > ISRG Root X1(中间CA证书) > DST Root CA X3
证书链2:guangzhuiyuan.com > R3 > ISRG Root X1(根证书)

由于Letsencrypt证书管理程序在服务端生成的证书文件fullchain.pem使用的是包含过期根证书的已经失效的证书链1,因此,该证书链将无法通过客户端的验证。

幸运的是,windows、浏览器等很多客户端在建立https连接时不会直接采纳服务端提供的证书链,它们会结合本地可信任证书存储区域中的证书重新构建证书链,最终形成证书链2,不至于在建立https连接时无法通过证书验证。

然而,悲剧的是,对于Java程序等客户端,它们在与服务端建立https连接时,会直接使用服务端提供的证书链,由于证书链中根证书已经过期,https连接将无法通过证书验证。这也导致了我们在10月1日时的一些运维事故,因为一些服务器无法和另外的服务器建立https连接。

更加悲剧和不可思议的是,即便是在根证书DST Root CA X3已经过期的当下,使用Letsencrypt证书管理程序在服务端生成证书文件时,很多情况下其仍然使用了过期的根证书形成的证书链。也就是说,即使现在重新从Letsencrypt申请证书也不能解决根证书过期的问题。

解决方案1:
解决方案之一是在客户端本地的可信任证书存储区域中手动移除已过期的根证书DST Root CA X3,并且,如果客户端没有安装根证书ISRG Root X1的话,需要手动安装之,这样,客户端就能够抛弃服务端返回的证书链1,重新构建出合法的证书链2。

解决方案2:
解决方案之二是手动修正服务端fullchain.pem文件中的证书链,将其由证书链1调整为证书链2。

fullchain.pem文件中存储的证书链信息自上而下,依次对应终端证书、中间CA证书……修改证书链的方法为删除文件中的中间证书等内容,仅保留其中的终端证书,然后补上中间证书R3的内容,再强制补上根证书ISRG Root X1的内容。最终,新的fullchain.pem文件内容如下:

-----BEGIN CERTIFICATE-----
[终端证书]
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFFjCCAv6gAwIBAgIRAJErCErPDBinU/bWLiWnX1owDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjAwOTA0MDAwMDAw
WhcNMjUwOTE1MTYwMDAwWjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCUjMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQC7AhUozPaglNMPEuyNVZLD+ILxmaZ6QoinXSaqtSu5xUyxr45r+XXIo9cP
R5QUVTVXjJ6oojkZ9YI8QqlObvU7wy7bjcCwXPNZOOftz2nwWgsbvsCUJCWH+jdx
sxPnHKzhm+/b5DtFUkWWqcFTzjTIUu61ru2P3mBw4qVUq7ZtDpelQDRrK9O8Zutm
NHz6a4uPVymZ+DAXXbpyb/uBxa3Shlg9F8fnCbvxK/eG3MHacV3URuPMrSXBiLxg
Z3Vms/EY96Jc5lP/Ooi2R6X/ExjqmAl3P51T+c8B5fWmcBcUr2Ok/5mzk53cU6cG
/kiFHaFpriV1uxPMUgP17VGhi9sVAgMBAAGjggEIMIIBBDAOBgNVHQ8BAf8EBAMC
AYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMBIGA1UdEwEB/wQIMAYB
Af8CAQAwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYfr52LFMLGMB8GA1UdIwQYMBaA
FHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcw
AoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzAnBgNVHR8EIDAeMBygGqAYhhZodHRw
Oi8veDEuYy5sZW5jci5vcmcvMCIGA1UdIAQbMBkwCAYGZ4EMAQIBMA0GCysGAQQB
gt8TAQEBMA0GCSqGSIb3DQEBCwUAA4ICAQCFyk5HPqP3hUSFvNVneLKYY611TR6W
PTNlclQtgaDqw+34IL9fzLdwALduO/ZelN7kIJ+m74uyA+eitRY8kc607TkC53wl
ikfmZW4/RvTZ8M6UK+5UzhK8jCdLuMGYL6KvzXGRSgi3yLgjewQtCPkIVz6D2QQz
CkcheAmCJ8MqyJu5zlzyZMjAvnnAT45tRAxekrsu94sQ4egdRCnbWSDtY7kh+BIm
lJNXoB1lBMEKIq4QDUOXoRgffuDghje1WrG9ML+Hbisq/yFOGwXD9RiX8F6sw6W4
avAuvDszue5L3sz85K+EC4Y/wFVDNvZo4TYXao6Z0f+lQKc0t8DQYzk1OXVu8rp2
yJMC6alLbBfODALZvYH7n7do1AZls4I9d1P4jnkDrQoxB3UqQ9hVl3LEKQ73xF1O
yK5GhDDX8oVfGKF5u+decIsH4YaTw7mP3GFxJSqv3+0lUFJoi5Lc5da149p90Ids
hCExroL1+7mryIkXPeFM5TgO9r0rvZaBFOvV2z0gp35Z0+L4WPlbuEjN/lxPFin+
HlUjr8gRsI3qfJOQFy/9rKIJR0Y/8Omwt/8oTWgy1mdeHmmjk7j1nYsvC9JSQ6Zv
MldlTTKB3zhThV1+XWYp6rjd5JW1zbVWEkLNxE7GJThEUG3szgBVGP7pSWTUTsqX
nLRbwHOoq7hHwg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
-----END CERTIFICATE-----

Letsencrypt简单教程调整相关推荐

  1. https 证书工具 Letsencrypt 简单教程

    https取代http是大势所趋,https的好处本文不在赘述,很多公司和机构都在推进这一进程,Apple公司甚至规定,iOS上的App应用必须使用https.因此,正是受到Apple的限制,我们的站 ...

  2. Git和Github简单教程

    网络上关于Git和GitHub的教程不少,但是这些教程有的命令太少不够用,有的命令太多,使得初期学习的时候需要额外花不少时间在一些当前用不到的命令上. 这篇文章主要的目标是用较少的时间学习Git和Gi ...

  3. nginx https透明代理_Nginx反向代理https,配置lets-encrypt证书教程

    前言 本站也终于迁移到https了,由于全Docker部署,迁移过程中真是艰难无比(wordpress那块被折腾的想放弃了),也欢迎访问本人博客,(知乎的排版有些乱) Nginx反向代理https,配 ...

  4. WCF简单教程(8) 安全 - Windows认证

    第八篇:WCF安全 WCF提供了非常丰富的加密机制与审核机制,以保证对外提供的服务安全可靠.本文是简单教程,所以只挑其中的一小部分来聊聊. 先来看看最简单的Windows认证. 所谓Windows认证 ...

  5. OpenGL ES 简单教程

    OpenGL ES 简单教程 2014-04-24 13:35 佚名 apkbus 字号:T | T 什么是OpenGL ES?OpenGL ES (为OpenGL for Embedded Syst ...

  6. 【微信小程序系列】微信小程序超简单教程,基本语法,获取用户基本数据信息,实现对云数据库的增删改查及小程序外部api的引用示例(附源码)

    [微信小程序系列]微信小程序超简单教程 小程序项目结构 静态页面的构成 HTML:结构 css:样式 js:行为 小程序 页面全部存放在pages, 而且pages目录只能存放页面 页面包括4个文件, ...

  7. photoshop制作html,用Photoshop制作好的网页模板再来用dreamweave制作出html的简单教程...

    用图层组管理网页元素 首先是在Photoshop中制作好网页的框架.网页中的元素有很多,像Banner条.文本框.文字.版权.Logo.广告等.尽量把这些相对独立的元素放在不同的图层中,这样方便以后的 ...

  8. 【游戏】金融帝国2:金融帝国实验室(Capitalism Lab)市长模式DLC+简单教程

    游戏:金融帝国2:金融帝国实验室(Capitalism Lab)市长模式DLC+简单教程 只放出补丁包和翻译文件----解压到游戏根目录即可 (翻译还未完善,没翻译到的可以给我留言或者截图到群里) ...

  9. Cadence SIP Layout 简单教程-第二章

    [从whp1920 网易博客迁移至CSDN] 第一章在正式布线之前做了必须做的准备工作,下面进入正题,打开Candence SIP RF Layout GXL软件. 第一节 导入外形尺寸 打开SIP设 ...

最新文章

  1. Cell select
  2. 马化腾六年后知乎再提问:未来十年哪些基础科学突破会影响互联网科技产业?...
  3. 先安装证书服务(CA),再安装IIS,导致默认certsrv站点不能访问
  4. 手动将自定制的WebPart部署到 SharePoint 2010 中
  5. sql not exists用法_SQL Server 2012 高级用法(一)
  6. 【LeetCode】按 tag 分类索引 (900题以下)
  7. iOS compare 字符串比较
  8. vue 组件 props配置
  9. 如何更改HomePod使用的Apple ID?
  10. 通过plotly.express库和Flask框架部署企鹅数据可视化的网页
  11. python比c语言好学吗-总算找到c语言和python哪个好学
  12. (十三)office2016-excel提取出生年月
  13. 关于BD文件的一些操作
  14. Opencv实战(二) 文字区域的提取 (VS2013 + C++)
  15. RuntimeError: Attempting to deserialize object on CUDA device 2 but torch.cuda.device_count() is 2.
  16. 资源调度源码分析和任务调度源码分析
  17. 无刷直流电机的simulink仿真
  18. android 三种常用的加密方式
  19. 谷歌商店上架流程_Googleplay 上架流程(2022版)
  20. Python爬虫 | 获取股票行业资金流向

热门文章

  1. html正则半角,JS正则密码校验之:JS正则匹配半角英文符号
  2. conda查看版本包命令
  3. python 路边停车
  4. OpenGL之建立三维坐标网格
  5. db2获取当前日期、时间、时间戳、年份
  6. ORA-01119、ORA-27040的两种可能存在的错误
  7. C#设计模式(6)——原型模式(Prototype Pattern)
  8. AI 一键抠图助你快速打造活动宣传海报
  9. 创客匠人教您实现流量变现
  10. 五大要求让BPM与企业对接