Letsencrypt+certbot为域名免费配置ssl
1、基础概念
Let’s Encrypt 是一个提供免费 SSL/TLS 证书的认证机构
,它的目标是让互联网上的通信更加安全,特别是普及 HTTPS。通过 Let’s Encrypt 提供的证书,网站可以使用加密连接,保护用户的数据传输。
Certbot 是一个由电子前沿基金会(EFF)开发的开源工具
,它可以自动化获取和更新 Let’s Encrypt 证书的过程。简而言之,Certbot 是用来与 Let’s Encrypt 的服务进行交互,帮助网站管理员轻松地申请、安装和更新 SSL 证书。
前提条件:
- 首先,配置自己服务器的域名,有一个可以公共访问的域名,然后关联配置到服务器,这部分此文不做赘述。
- 确认适合自己系统的具体命令,以下步骤以 Ubuntu 的系统为例。
2、安装 Certbot 插件
先更新系统的包管理器
sudo apt update
确保你的服务器上已经安装并运行 Nginx:
检查 Nginx 是否安装:
nginx -v
如果未安装,可以使用以下命令安装:
sudo apt install nginx
启动 Nginx 并设置开机自启:
sudo systemctl start nginx
sudo systemctl enable nginx
安装 Certbot 的 Nginx 插件
对于基于 Debian/Ubuntu 的系统,需要安装 python3-certbot-nginx 包:
sudo apt install python3-certbot-nginx
重新运行 Certbot
插件安装完成后,重新运行 Certbot 以获取并配置 SSL 证书:
sudo certbot --nginx
按照提示完成证书的获取和配置过程。Certbot 会自动检测你的 Nginx 配置,并为指定的域名安装 SSL 证书。
3、自动续期
虽然 Certbot 通常会自动配置续期,手动测试续期过程以确保一切正常:
sudo certbot renew --dry-run
如果没有错误提示,说明自动续期配置正确。
此外,既然定时器已设置为自动执行,如果希望验证是否能够按时触发,可以等到预定的时间,或者手动触发服务来测试:这将立即触发
certbot 执行证书更新操作。
sudo systemctl start certbot.service
检查 certbot 的服务状态:
sudo systemctl status certbot.timer
查看当前证书的状态以及是否即将过期:
sudo certbot certificates
4、手动续期
运行命令
sudo certbot renew
等待自动续期完成即可
5、开放80端口、确保nginx配置
否则就会报错
- 确保服务器可以访问端口 80 和 443:
sudo ufw allow 'Nginx Full'
想要 Certbot 自动续期成功,需要开放80端口 443端口
这是因为certbot 在进行域名验证时通常使用 HTTP 或 HTTPS 服务来验证所有权。如果服务器上没有正确运行 HTTP (80端口) 或 HTTPS (443端口) 服务,验证过程也会失败。
Failed to renew certificate xxx.com with error: Some challenges have failed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
All renewals failed. The following certificates could not be renewed:
/etc/letsencrypt/live/xxxx.com/fullchain.pem (failure)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1 renew failure(s), 0 parse failure(s)
- 检查 Nginx 配置是否正确:
在某些情况下,Nginx 的配置文件可能有误,导致 Certbot 无法正确配置 SSL。可以使用以下命令测试 Nginx 配置:
sudo nginx -t
如果有错误,请根据提示修正配置文件。