《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
Webserver:Nginx
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 -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根证书过期问题
[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。
-----BEGIN CERTIFICATE----- [终端证书] -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFFjCCAv6gAwIBAgIRAJErCErPDBinU/bWLiWnX1owDQYJKoZIhvcNAQELBQAw TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh cmNoIEdyb3VwMRUwEwYDVDEwxJU1JHIFJvb3QgWDEwHhcNMjAwOTA0MDAwMDAw WhcNMjUwOTE1MTYwMDAwWjAyMQswCQYDVGEwJVUzEWMBQGA1UEChMNTGV0J3Mg RW5jcnlwdDELMAkGA1UEAxMCUjMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQC7AhUozPaglNMPEuyNVZLD+ILxmaZ6QoinXSaqtSu5xUyxr45r+XXIo9cP R5QUVTVXjJ6oojkZ9YI8QqlObvU7wy7bjcCwXPNZOOftz2nwWgsbvsCUJCWH+jdx sxPnHKzhm+/b5DtFUkWWqcFTzjTIUu61ru2P3mBw4qVUq7ZtDpelQDRrK9O8Zutm NHz6a4uPVymZ+DAXXbpyb/uBxa3Shlg9F8fnCbvxK/eG3MHacV3URuPMrSXBiLxg Z3Vms/EY96Jc5lP/Ooi2R6X/ExjqmAl3P51T+c8B5fWmcBcUr2Ok/5mzk53cU6cG /kiFHaFpriV1uxPMUgP17VGhi9sVAgMBAAGjggEIMIIBBDAOBgNVHQ8BAf8EBAMC AYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMBIGA1UdEwEB/wQIMAYB Af8CAQAwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYfr52LFMLGMB8GA1UdIwQYMBaA FHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcw AoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzAnBgNVHR8EIDAeMBygGqAYhhZodHRw Oi8veDEuYy5sZW5jci5vcmcvMCIGA1UdIAQbMBkwCAYGZ4EMAQIBMA0GCysGAB gt8TAQEBMA0GCSqGSIb3DQEBCwUAA4ICAQCFyk5HPqP3hUSFvNVneLKYY611TR6W PTNlclQtgaDqw+34IL9fzLdwALduO/ZelN7kIJ+m74uyA+eitRY8kc607TkC53wl ikfmZW4/RvTZ8M6UK+5UzhK8jCdLuMGYL6KvzXGRSgi3yLgjewQtCPkIVz6D2z 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 cmNoIEdyb3VwMRUwEwYDVDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVGEwJVUzEpMCcGA1UEChMgSW50ZXJu 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-----
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231141.html原文链接:https://javaforall.net
