CodeGym /课程 /Docker SELF /管理证书和设置自动更新

管理证书和设置自动更新

Docker SELF
第 7 级 , 课程 4
可用

管理证书和设置自动更新

1. 检查当前证书

命令 certbot certificates

咱们从简单的开始:怎么查看你服务器上已经安装了哪些证书?Let's Encrypt 提供了一个很方便的工具 — certbot。用命令 certbot certificates 可以获取当前证书的详细信息。

sudo certbot certificates

运行之后你会看到类似这样的结果:

Found the following certs:
  Certificate Name: example.com
    Domains: example.com www.example.com
    Expiry Date: 2023-12-31 10:00:00+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/example.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/example.com/privkey.pem

这里会列出一些重要的细节:

  • 证书名称。
  • 证书覆盖的域名。
  • 到期日期(这样你可以及时更新)。
  • 证书文件和私钥文件的路径。

一个小技巧:

如果你有忽略过期提醒的“坏习惯”,那么这个命令会是你最好的朋友。毕竟,没有人想成为知道证书过期消息后被用户“教做人”的程序员。


2. 证书自动更新

Let's Encrypt的内部机制

Let's Encrypt的证书有效期是90天,这样可以最大程度减少安全风险。但每3个月手动更新一次,这实在不现实。幸运的是,有一个内置的命令可以用来实现自动化:

sudo certbot renew

这个过程会检查所有证书,并自动更新那些接近失效的证书。

通过Cron设置自动更新

Cron是Linux系统中一个内置的任务计划工具。它可以按照预设的时间表运行命令,这正是我们需要用来自动化证书更新的工具。以下是Cron的配置方式:

  1. 打开当前用户的Cron编辑器:

    sudo crontab -e
    
  2. 在文件末尾添加以下行:

    0 0 * * * certbot renew --quiet
    

    这条命令会每天午夜运行certbot renew--quiet标志会屏蔽不必要的输出,所以更新过程会安静地进行,不打扰任何人。

  3. 保存更改并退出编辑器。

现在你的服务器会自动更新证书,你就不用再担心证书到期的问题了(或者几乎不用了)。


3. 手动更新证书

有时候自动化不能解决所有问题,你需要手动更新证书。比如,当你刚刚在网站配置中添加了新域名时,你需要手动请求一个新的证书。这时又需要使用certbot

命令示例:

sudo certbot renew

更新指定域名的证书

如果你需要更新与某个特定域名关联的证书,可以使用以下命令格式:

sudo certbot certonly --nginx -d example.com -d www.example.com

这里:

  • --nginx表示配置会被自动应用到Nginx服务器。如果是Apache服务器,可以使用--apache
  • -d标志用于列出需要证书的域名。

执行命令后,Certbot会检查服务器配置,申请新的证书并完成配置。


4. 通知和监控

Email通知

安装Certbot时,它会要求你提供email地址。如果你提供了,那么在证书到期前20天,你就会收到通知。如果你没有提供email或者想更换,可以这样做:

sudo certbot register --update-registration --email newaddress@example.com

现在你几乎不会被任何情况所困扰了。嗯,几乎。

外部检查

有一些第三方服务可以帮你跟踪证书的有效期。比如,SSL Labs。只需输入网站地址,服务就会检查它的证书,包括有效期、信任链和安全级别。


5. 删除不需要的证书

有时候,旧证书可能不再需要了,比如你不再维护某个域名了。为了防止系统变得杂乱,最好删除它们。

删除证书的命令:

sudo certbot delete

Certbot 会显示可用证书的列表,并让你选择要删除的证书。

有用的小提示:

删除证书时要小心,别不小心搞崩了运行中的网站。一定要确认这个证书已经没有任何地方在用了。


6. 示例和错误调试

更新后检查

在对证书进行任何更改或更新之后,一定要检查网站是否正常运行。最简单的方法是使用curl

curl -I https://example.com

预期结果 — 代码 HTTP/1.1 200 OK

如果发生任何问题,首先查看日志:

  • Nginx日志:

      sudo tail -f /var/log/nginx/error.log
    
  • Apache日志:

      sudo tail -f /var/log/apache2/error.log
    

常见错误: "Too Many Requests"

如果你过于频繁地请求新证书,Let's Encrypt可能会因"Too Many Requests"错误而限制你的访问。在这种情况下,建议使用Let's Encrypt的测试服务器:

sudo certbot certonly --test-cert --nginx -d example.com

这个命令会生成一个测试证书,该证书无法用于实际场景,但可以帮助检查配置。


7. 最后一步:自动重启Web服务器

Let's Encrypt会更新证书文件,但像Nginx或Apache这样的Web服务器在未重启前不会察觉到这些更改。这也能自动化处理。更新Cron记录:

0 0 * * * certbot renew --quiet && systemctl reload nginx

或者对于Apache:

0 0 * * * certbot renew --quiet && systemctl reload apache2

现在任何证书更新之后,都会立即应用到服务器上。


这节讲座的目的是让你晚上可以安心睡觉,知道你的证书会自动更新,网站已保护好,不会在半夜三点接到老板的电话说“用户抱怨网站无法访问”。证书管理是一个重要技能,在实际工作中会非常有用,特别是当你计划从事大规模Web应用部署或DevOps工程时。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION