关于 Let's encrypt ACMEv1 弃用。如何在 Ubuntu 14.04 中再次使证书续订工作?

关于 Let's encrypt ACMEv1 弃用。如何在 Ubuntu 14.04 中再次使证书续订工作?

我正在运行一个旧的 Ubuntu 14.04 服务器。它多年来一直运行良好,没有出现问题,但是,随着 ACMEv1 的最近弃用,我无法再次更新证书。我在 Google 上搜索了如何解决这个问题,但我不知道该怎么做。

在我的服务器中没有对 letsencrypt 进行“官方安装”。相反,我只是将其克隆到某个自定义文件夹中。

我的问题是,我是否可以只制作一个git updateletsencrypt 或将其再次克隆到较新的版本,并期望一切都正常工作?目前,升级我的服务器不是一个选项。关于克隆,我怀疑我的旧版本 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 上运行面向公众的服务器目前可能不是一个好主意。

相关内容