工具介绍
Let’s Encrypt 介绍
Let’s Encrypt 是一个免费、自动化、开放的证书颁发机构 (CA),为网站提供数字证书以启用 HTTPS ( SSL/TLS )。它的存在解决了获取、安装和维护证书的复杂性,从而为每个网站提供了一个安全的互联网。
Certbot 工具介绍
Certbot 是一个免费的、开源的命令行工具。它可以极大的简化我们为网站启用 HTTPS 的过程,它提供自动化获取、安装、续订和管理 Let’s Encrypt 提供的 SSL/TLS 证书的功能。
Certbot 和 Let’s Encrypt 的关系
Let’s Encrypt 是一个证书颁发机构( CA ),它提供免费的 SSL/TLS 证书,而 Certbot 是一个工具,用于自动化地从 Let’s Encrypt 获取、安装和管理这些证书。
安装certbot
安装snapd
安装命令
sudo apt update
sudo apt install snapd
确认是否安装成功
~# sudo snap install hello-world
2024-06-21T14:18:16+08:00 INFO Waiting for automatic snapd restart...
hello-world 6.4 from Canonical✓ installed
~# hello-world
Hello World!
安装 Certbot
# 安装 **Certbot**
sudo snap install --classic certbot
# 建立符号链接,确保可以运行certbot命令
sudo ln -s /snap/bin/certbot /usr/bin/certbot
# 检查 certbot 已安装并配置成功,输出命令帮助即表示成功
certbot -h
获取并安装您的证书
运行以下命令以获取证书并让 Certbot
自动编辑您的 nginx
配置以提供服务,只需一步即可打开 HTTPS 访问。
nginx -s reload
sudo certbot --nginx
安装完成后,访问对应域名的 https
请求可正常访问。
证书自动续期
Certbot 申请的 Let’s Encrypt 证书通常具有 90 天的有效期。Certbot 提供了自动续期功能,如果证书距离到期时间少于 30 天,Certbot 默认会尝试自动续约。
Certbot软件包带有cron作业或systemd计时器,可在证书过期前自动更新证书。除非您更改配置,否则您无需再次运行Certbot。
可以通过运行以下命令来测试证书的自动续订:
sudo certbot renew --dry-run
以上命令是用来在不实际更新证书的情况下测试证书续期流程的。
--dry-run
选项会模拟续期过程,模拟过程中即使续期流程成功,现有的证书文件也不会被更改或替换。
常见问题
nginx编码格式错误
【问题描述】
执行获取和安装证书命令时,报如下错误:
~# sudo certbot --nginx
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Could not read file: /etc/nginx/nginx.conf due to invalid character. Only UTF-8 encoding is supported.
Enter email address (used for urgent renewal and security notices)
【问题原因】
看报错内容可以看出,是因为 certbot 仅支持 utf-8 编码,而 nginx 的配置文件不是以格式编码的。
【解决方案】
将nginx的配置文件改为 utf-8 编码格式即可。
我是通过 Mobaxterm 远程连接的服务器,所以直接通过其自带的文本编辑器远程打开修改了编码后保存即可。
申请证书失败
【问题描述】
生成证书是报如下错误:
Certbot failed to authenticate some domains (authenticator: nginx). The Certificate Authority reported these problems:
Domain: breathe.bettergogo.com
Type: connection
Detail: During secondary validation: 47.113.217.166: Fetching http://breathe.bettergogo.com/.well-known/acme-challenge/x2MLmA5qcFHoDSKT0J4GZabYe45_y3msk0y1dxwj0ZY: Timeout during connect (likely firewall problem)
Hint: The Certificate Authority failed to verify the temporary nginx configuration changes made by Certbot. Ensure the listed domains point to this nginx server and that it is accessible from the internet.
Some challenges have failed.
Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /var/log/letsencrypt/letsencrypt.log or re-run Certbot with -v for more details.
【问题原因】
nginx中没有配置对应域名的443端口,导致来自 Let’s Encrypt 验证服务器的连接请求无法连接到对应的服务器上。
【解决方案】
在nginx中配置对应域名的443端口(即HTTPS服务)。
注意修改配置文件后,需要让nginx重载配置文件,让配置生效。自己就是忘记重载了,导致还是不成功。
Pingback: Ubuntu上安装WordPress – MR.H's Notes