我正在运行一个旧的 Ubuntu 14.04 服务器。它多年来一直运行良好,没有出现问题,但是,随着 ACMEv1 的最近弃用,我无法再次更新证书。我在 Google 上搜索了如何解决这个问题,但我不知道该怎么做。
在我的服务器中没有对 letsencrypt 进行“官方安装”。相反,我只是将其克隆到某个自定义文件夹中。
我的问题是,我是否可以只制作一个git update
letsencrypt 或将其再次克隆到较新的版本,并期望一切都正常工作?目前,升级我的服务器不是一个选项。关于克隆,我怀疑我的旧版本 python/pip 也可能存在问题,即 2.7.6 和 pip 1.5.4。只是看看会发生什么也不是一种选择。有些事情并不容易恢复,所以我更愿意在全力以赴之前得到某种专家的指导。问题的根源是 ACMEv1 的弃用,所以我想知道解决该特定问题的最不具侵入性的方法是什么。git update
或重新克隆看起来很简单。
我克隆的提交是下一个:
$ git log --name-status HEAD^..HEAD
commit 4c28fc417c978090ae8def91b81ed59f439e797a (HEAD -> master, origin/master, origin/HEAD)
Merge: b57371a3 0454031c
Author: bmw <[email protected]>
Date: Tue Jan 5 18:02:19 2016 -0500
Merge pull request #2073 from alex/more-typos
Fixed a pair of typos in docstrings
commit 0454031cce4b88fef44e3e129e879a35b49c2314
Author: Alex Gaynor <[email protected]>
Date: Sun Jan 3 14:37:08 2016 -0500
Fixed a pair of typos in docstrings
M acme/acme/jose/json_util.py
M acme/acme/jose/util.py
所以,是的,它很旧。此外,我有一些本地更改,如果我没记错的话,它们都是由 letsencrypt 自动创建的;我不记得修改过任何这些文件:
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
typechange: acme/examples/standalone/localhost/cert.pem
typechange: acme/examples/standalone/localhost/key.pem
typechange: bootstrap/archlinux.sh
typechange: bootstrap/centos.sh
typechange: bootstrap/debian.sh
typechange: bootstrap/fedora.sh
typechange: bootstrap/gentoo.sh
typechange: bootstrap/manjaro.sh
typechange: bootstrap/suse.sh
typechange: bootstrap/ubuntu.sh
typechange: letsencrypt-apache/letsencrypt_apache/tests/testdata/debian_apache_2_4/default_vhost/apache2/conf-enabled/other-vhosts-access-log.conf
typechange: letsencrypt-apache/letsencrypt_apache/tests/testdata/debian_apache_2_4/default_vhost/apache2/conf-enabled/security.conf
typechange: letsencrypt-apache/letsencrypt_apache/tests/testdata/debian_apache_2_4/default_vhost/apache2/conf-enabled/serve-cgi-bin.conf
typechange: letsencrypt-apache/letsencrypt_apache/tests/testdata/debian_apache_2_4/default_vhost/apache2/sites-enabled/000-default.conf
typechange: letsencrypt-apache/letsencrypt_apache/tests/testdata/debian_apache_2_4/two_vhost_80/apache2/conf-enabled/other-vhosts-access-log.conf
typechange: letsencrypt-apache/letsencrypt_apache/tests/testdata/debian_apache_2_4/two_vhost_80/apache2/conf-enabled/security.conf
typechange: letsencrypt-apache/letsencrypt_apache/tests/testdata/debian_apache_2_4/two_vhost_80/apache2/conf-enabled/serve-cgi-bin.conf
typechange: letsencrypt-apache/letsencrypt_apache/tests/testdata/debian_apache_2_4/two_vhost_80/apache2/sites-enabled/000-default.conf
typechange: letsencrypt-apache/letsencrypt_apache/tests/testdata/debian_apache_2_4/two_vhost_80/apache2/sites-enabled/encryption-example.conf
typechange: letsencrypt-apache/letsencrypt_apache/tests/testdata/debian_apache_2_4/two_vhost_80/apache2/sites-enabled/letsencrypt.conf
typechange: letsencrypt-apache/letsencrypt_apache/tests/testdata/debian_apache_2_4/two_vhost_80/apache2/sites-enabled/mod_macro-example.conf
typechange: letsencrypt-nginx/letsencrypt_nginx/tests/testdata/etc_nginx/ubuntu_nginx_1_4_6/default_vhost/nginx/sites-enabled/default
typechange: letshelp-letsencrypt/letshelp_letsencrypt/testdata/mods-enabled/ssl.load
Untracked files:
(use "git add <file>..." to include in what will be committed)
letsencrypt.zip
no changes added to commit (use "git add" and/or "git commit -a")
最后,我使用以下格式的脚本更新证书:
#!/bin/bash
sudo /.../my-letsencrypt-clone/letsencrypt-auto certonly -v -t --webroot \
-w /var/www/web1/ -d www.domain1.com -d domain1.com -d subdomain.domain1.com \
-w /var/www/web2/ -d web2 \
-w /var/www/web3/ -d www.web3.com -d web3.com
last_cert=$(sudo find /etc/letsencrypt/live/ -type d -iname "www.domain1.com-*" | sort | tail -n 1)
sudo ln -sfn "$last_cert" /etc/ssl/private/domain1.com
sudo service apache2 restart
sudo service postfix restart
sudo doveadm reload
从脚本中可以推断出,该证书由我的 apache2、postfix 和 doveadm 服务共享,没有其他任何人共享。
我的文件夹中/etc/letsencrypt/live
有以下内容:
total 28
drwxr-xr-x 2 root root 4096 Mar 10 2017 www.domain1.com
drwxr-xr-x 2 root root 4096 Jun 12 2017 www.domain1.com-0001
drwxr-xr-x 2 root root 4096 Jun 12 2017 www.domain1.com-0002
drwxr-xr-x 2 root root 4096 Apr 30 2018 www.domain1.com-0003
drwxr-xr-x 2 root root 4096 Oct 11 2018 www.domain1.com-0004
drwxr-xr-x 2 root root 4096 Jun 13 2019 www.domain1.com-0005
drwxr-xr-x 2 root root 4096 Mar 8 20:19 www.domain1.com-0006
因此,脚本选择(last_cert
变量)编号最高的文件夹,即 letsencrypt 正在更新证书的文件夹,并指向/etc/ssl/private/domain1.com
它,因为这是我的服务用于加载多域证书的文件夹。
答案1
切换到依赖关系较少的其他客户端。例如,我建议acme.sh,这取决于主要在 curl 上。我没有测试过,但我看不出它不能在 14.04 上运行的原因。
并开始远离 14.04。它可能不支持 TLS1.3 之类的东西,并且您的软件问题在未来几年内不会变小。在 14.04 上运行面向公众的服务器目前可能不是一个好主意。