如何在 Linux 环境下使用 Certbot 自动生成 SSL 证书并部署到 Nginx 服务中
SSL加密技术对网络传输的数据安全非常重要,然而,申请SSL证书却很麻烦,而且免费的SSL证书最多使用3个月,使得广大程序员十分不方面,流程如下
这里风云给大家介绍一个工具,自动帮我们完成该项工作,使用Certbot 工具生成 SSL 证书并自动部署到 Nginx 服务中,主要步骤如下:
安装 Certbot
配置 Nginx
获取和安装 SSL 证书
自动部署 SSL 证书到 Nginx
配置自动续期
1. 安装 Certbot
Certbot 是一个用于自动化获取和管理 SSL 证书的工具,它与 Let's Encrypt 证书颁发机构紧密集成,支持自动化配置 SSL 证书。你可以使用以下命令安装 Certbot:
1.1 安装 Certbot 和 Nginx 插件
首先,确保你的系统包管理器已经更新,然后安装 Certbot 和 Nginx 插件。
对于 Ubuntu/Debian 系统
sudo apt updatesudo apt install certbot python3-certbot-nginx
对于 CentOS/RHEL 系统
sudo yum install epel-releasesudo yum install certbot python3-certbot-nginx
对于 Fedora 系统
sudo dnf install certbot python3-certbot-nginx
安装完成后,你可以使用以下命令来检查 Certbot 是否正确安装:
certbot --version
2. 配置 Nginx
在生成 SSL 证书之前,确保你的 Nginx 配置正确,并且已经指向你的网站根目录。
2.1 配置虚拟主机
编辑 Nginx 配置文件(通常是 /etc/nginx/sites-available/default 或 /etc/nginx/nginx.conf,具体路径可能会有所不同)来配置虚拟主机。假设你的域名是 example.com,可以参考以下配置:
server {listen 80;server_name example.com www.example.com;root /var/www/html; # 网站根目录index index.html index.htm;location / {try_files $uri $uri/ =404;}
}
保存并退出配置文件后,重新加载 Nginx 配置:
sudo nginx -t # 测试 Nginx 配置文件是否有误
sudo systemctl reload nginx # 重新加载配置
确保 example.com 的 DNS 记录已经正确指向你的服务器 IP。
3. 使用 Certbot 获取 SSL 证书
3.1 使用 Certbot 自动获取和配置 SSL 证书
Certbot 支持通过 自动化插件 来生成和安装 SSL 证书。我们将使用 Certbot 自带的 Nginx 插件来自动生成和安装 SSL 证书,并自动更新 Nginx 配置。
运行以下命令:
sudo certbot --nginx -d example.com -d www.example.com
此命令会做以下几件事:
自动与 Let's Encrypt 通信并请求 SSL 证书。
自动配置 Nginx 来启用 SSL,并配置 HTTPS。
自动重启 Nginx 服务以使更改生效。
说明:
--nginx 指示 Certbot 使用 Nginx 插件进行自动配置。
-d example.com -d www.example.com 指定需要申请 SSL 证书的域名。
3.2 证书验证
Certbot 会提示你输入电子邮件地址,并要求你同意 Let's Encrypt 的服务条款。
输入一个有效的电子邮件地址,以便在证书即将过期时接收到提醒。
同意服务条款。
如果一切顺利,你将看到类似以下的输出:
Successfully obtained SSL certificate for example.com and www.example.com
4. 自动部署 SSL 证书到 Nginx
4.1 Certbot 自动配置 Nginx
Certbot 会自动为你配置 Nginx,使得 HTTPS 生效。如果 Nginx 配置中有问题或需要手动调整,你可以查看 Nginx 配置文件,确保它包含以下内容:
server {listen 443 ssl http2;server_name example.com www.example.com;ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {root /var/www/html;index index.html index.htm;}
}server {listen 80;server_name example.com www.example.com;return 301 https://$host$request_uri; # 强制跳转 HTTPS
}
4.2 验证配置
在浏览器中访问 https://example.com,你应该看到网站已经通过 HTTPS 加载,并且地址栏显示安全锁。
如果需要检查 SSL 证书的有效性,可以使用工具如 SSL Labs' SSL Test 来验证证书配置和网站安全性。
5. 配置自动续期
Let's Encrypt 证书有效期为 90 天,因此需要定期续期。Certbot 提供了自动续期功能。
5.1 设置自动续期
Certbot 在安装时默认会为你设置定时任务(cron job)来自动续期证书。你可以通过以下命令检查续期设置:
sudo systemctl status certbot.timer
5.2 手动续期
如果你想手动测试续期,可以运行以下命令:
sudo certbot renew --dry-run
此命令不会实际续期证书,但会模拟续期过程,以确保自动续期功能正常。
Certbot 和 Let's Encrypt 提供了免费的 SSL 证书,帮助网站快速实现 HTTPS 加密,确保安全的通信和用户数据保护。