让我们加密免费的TLS / SSL证书续订错误

当我在2015年启动此网站时,我使用的是非常便宜的VPS,每年花费10美元。 我从Let’s Encrypt获得了免费的TLS / SSL证书,并将Nginx配置为提供HTTPS流量。

2016年3月,我将网站迁移到了数字海洋(无会员链接)SSD云服务器,该服务器每月收费5美元(从我的会员链接获得10美元的免费信用)。 为了继续提供HTTPS流量,我还需要将TLS / SSL证书传输到新服务器。

Nginx需要两个文件来提供HTTPS流量:完整链证书和您的私钥。 在“让我们加密”的情况下,这两个文件位于

/etc/letsencrypt/live/your-site.com/fullchain.pem

/etc/letsencrypt/live/your-site.com/privkey.pem

正确地说,这两个文件是分别指向以下两个文件的符号链接。

/etc/letsencrypt/archive/yoursite.com/fullchain1.pem

/etc/letsencrypt/archive/yoursite.com/privkey1.pem

因此,我认为我只需要将上述两个文件复制到我的Digital Ocean SSD服务器中即可。

证书续签问题

您可能知道,让我们对证书进行持续90天的加密。 您必须每3个月更新一次证书。

由于我只有 fullchain1.pemprivkey1.pem 在我的服务器上。 与“让我们加密”文件有关的所有其他文件都消失了。 这两个文件使Nginx能够提供HTTPS流量,但是当您续订证书时,它们还不够。

我用来续订证书的命令是

sudo letsencrypt renew

但是,让我们加密客户端没有尝试续订我的证书。 这是因为客户端依赖于更新配置文件才能知道如何更新证书,即使用什么插件和什么选项。

因此,我找到了一个示例续订配置文件,并使用以下命令创建了一个。

sudo nano /etc/letsencrypt/renewal/linuxbabe.com.conf

并将以下行放入文件中。

cert = /etc/letsencrypt/live/linuxbabe.com/cert.pem
privkey = /etc/letsencrypt/live/linuxbabe.com/privkey.pem
chain = /etc/letsencrypt/live/linuxbabe.com/chain.pem
fullchain = /etc/letsencrypt/live/linuxbabe.com/fullchain.pem

# Options used in the renewal process
[renewalparams]
authenticator = webroot
installer = None
account = 7b3fa88c32887c234036234f6cc6358ab
webroot_path = /usr/share/nginx/linuxbabe.com,
[[webroot_map]]
linuxbabe.com = /usr/share/nginx/linuxbabe.com

上面的配置告诉我们加密客户端使用Webroot插件续订证书。 然后再次运行更新命令。 我遇到的第一个错误是:

renewal configuration file is broken

这是由于两个原因:

  1. 我的服务器上没有cert.pem和chain.pem文件。
  2. 我使用真实文件而不是符号链接。

cert.pem是由Let’s Encrypt颁发的证书,chain.pem是由根证书颁发机构颁发的Let’s Encrypt的中间证书。 这两个文件用于创建fullchain.pem文件。 您可以在fullchain.pem文件中找到cert.pem在chain.pem之上。

因此,要获取cert.pem和chain.pem,只需复制fullchain.pem的上半部分并将其保存到名为cert.pem的文件中。 然后复制fullchain.pem的下半部分并将其保存到名为chain.pem的文件中。

现在,我在/etc/letsencrypt/archive/linuxbabe.com目录下有cert.pem,chain.pem fullchain.pem和privkey.pem。

然后创建符号链接。

sudo ln -sf /etc/letsencrypt/archive/linuxbabe.com/cert.pem /etc/letsencrypt/live/linuxbabe.com/cert.pem

sudo ln -sf /etc/letsencrypt/archive/linuxbabe.com/chain.pem /etc/letsencrypt/live/linuxbabe.com/chain.pem

sudo ln -sf /etc/letsencrypt/archive/linuxbabe.com/fullchain.pem /etc/letsencrypt/live/linuxbabe.com/fullchain.pem

sudo ln -sf /etc/letsencrypt/archive/linuxbabe.com/privkey.pem /etc/letsencrypt/live/linuxbabe.com/privkey.pem

再次运行证书更新命令。

sudo letsencrypt renew

这次,我得到了这个错误:

max() arg is an empty sequence

以上消息是python中的常见错误消息。 但这并没有告诉您真正发生了什么。 要解决此错误,我只需要重命名/etc/letsencrypt/archive/linuxbabe.com/下的四个pem文件。

cd /etc/letsencrypt/archive/linuxbabe.com

mv cert.pem cert1.pem

mv chain.pem chain1.pem

mv fullchain.pem fullchain1.pem

mv privkey.pem privekey1.pem

然后再次创建符号链接。 现在,我可以毫无问题地续签证书了。

Sidebar