Let's Encrypt:

Let's Encrypt 是一个开放和自动化的证书颁发机构 (CA) ,其主要目标是创建一个更加安全和隐私保护的网络。它提供免费的 SSL/TLS 证书,使得加密通讯变得既简单又无成本。

在安装证书之前,确保你已经安装了nginx,并属于Ubuntu系统,安装nginx的教程可以在我上一期的文档中查看。

一、安装 Certbot 和 Let's Encrypt 插件

Certbot 是 Let's Encrypt 的一个客户端,用于从 Let's Encrypt 自动获取和安装 SSL 证书。运行以下命令安装 Certbot 和 Certbot 的 Nginx 插件:

 sudo apt install certbot python3-certbot-nginx

二、申请域名证书

以下命令为你的域名生成泛域名证书,与申请单域名证书的方法。

#泛符域名
sudo certbot certonly --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory -d yourdomain.com -d *.yourdomain.com   
#单域名
sudo certbot certonly --standalone -d .yourdomain.com -d www.yourdomain.com

泛域名证书(也称为通配符证书,类似于 *remember.com  )是一个特殊类型的 SSL 证书,它允许你为主域名及其所有子域名提供安全的 HTTPS 连接。在配置大量的子域名时,泛域名证书是一个非常有用的工具,因为你只需要一个证书就可以覆盖所有子域名。

在运行上述命令后,Certbot 会给出一些指示,要求你为域名添加一个特定的 DNS TXT 记录。这是为了验证你对该域名的控制权。

作者忘记截图了,所以大概的描述一下操作的步骤:

 1. 当出现Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): 

时,填入自己常用的邮箱(用于续订提醒、安全通知、账户恢复),并回车

2. 当 输入邮箱后,你将看到以

(A)gree/(C)ancel: 
或
(Y)es/(N)o: 

结尾的服务条款协议,输入A(Y)并按回车同意协议。

 3. 随后你将会看到这样一个字段,格式大概是这样的:

Please deploy a DNS TXT record under the name:

_acme-challenge.remember-hu.top.

with the following value:

__Azopwb33lOMSNMjOd0W_mZWRW-GgiiTVvbqlI

这就是我们需要在域名服务器中添加的dns txt 记录,打开自己的域名服务商,解析添加新记录

对应红色的字段,这样写(这里以华为云为参考):

填写完毕后先不要着急回车,而是新开一个窗口,测试是否添加成功

dig TXT _acme-challenge.remember-hu.top #等待30-60秒后检查

看到返回的结果包含Azopwb33lOMSNMjOd0W_mZWRW-GgiiTVvbqlI 就表示成功了

验证成功后,我们再按Enter键继续

2. 泛域名证书此时还会有第二个验证记录。你将会看到类似:

with the following value:

3AfjOyUEVBXJVHezfqDJ0NW4TpynUjga_p1EBWSoKRI

(This must be set up in addition to the previous challenges; do not remove, replace, or undo the previous challenge tasks yet. Note that you might be asked to create multiple distinct TXT records with the same name. This is permitted by DNS standards.)

这样的对话,此时标红处为我们第二个需要添加的TXT记录,操作方式与上方一致

不过注意其中可能有些厂商无法用

dig TXT _acme-challenge.remember-hu.top #等待30-60秒后检查

验证,也可切换下方方法验证 ,只要能出现添加后记录即可。

dig TXT _acme-challenge.yourname.com +short | awk -F'"' '{for(i=2;i<=NF;i+=2) print $i}'

注:当添加失败或验证失效重新验证,都必须删掉域名服务中的记录重新配置,否则会导致dns记录值混乱。

3、当我们完成以上步骤并无报错退出时,即可看到大概这样的一个字段:

Press Enter to Continue

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/yourname.com/fullchain.pem

Key is saved at: /etc/letsencrypt/live/yourname.com/privkey.pem

This certificate expires on 2026-04-26.

These files will be updated when the certificate renews.

可以看到证书已经被下载在红色标记处地址,蓝色标注为过期日期

三、配置nginx使用域名证书

打开nginx配置文件:

sudo nano /etc/nginx/sites-available/default

监听443端口,写法参考如下:

指定证书和私钥: 在适当的 server 块中,找到或添加以下行,并确保它们指向你的泛域名证书和私钥的路径:

 ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

重定向80端口设置:写法参考如下,注释掉除下面字段所有字段。

保存并退出:CTRL+O 保存  CTRL+X 退出

测试 Nginx 配置:

 sudo nginx -t

确保没有错误返回。

重新加载 Nginx:

 sudo systemctl reload nginx

现在,你的 Nginx 服务器应该已经成功配置了泛域名证书,并为你的域名及其所有子域名提供了安全的 HTTPS 连接。

四、设置定时任务(单域名证书)

Cron 是一种在 Linux 系统上运行定时任务的工具。我们可以利用它来自动运行 certbot renew 命令,确保证书始终保持最新。

编辑crontab:

sudo crontab -e

当你打开crontab时,可能会看到一些已经存在的任务。不要修改它们,而是在文件的末尾添加以下行,设置每天在凌晨 2 点自动尝试更新证书:

 0 2 * * * /usr/bin/certbot renew --quiet

--quiet 选项意味着只有在发生错误或需要交互时,命令才会产生输出。这样,你就不会因为定期的续期尝试而收到不必要的通知。

五、测试证书续期

在设置定时任务之前,你应该首先测试续期过程是否可以正常工作。这可以确保当真正到达续期时,一切都会按预期进行。

使用以下命令进行测试:

sudo certbot renew --dry-run

-dry-run 选项将模拟续期过程,但不会实际更改任何证书。如果这个命令成功运行并没有报错,那么你可以确信真正的续期过程也会顺利进行。

以上就是本文的全部内容了,如果有问题欢迎捉虫交流。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐