在 RHEL 9/8 上安装 Nginx 的 Let’s Encrypt SSL 证书
在本文中,我们将指导您如何生成和安装从 Let's Encrypt 证书颁发机构免费获取的 SSL/TLS 证书,我们将使用该证书来保护 RHEL 上的 Nginx Web 服务器 HTTP 事务,以及基于 RHEL 的发行版,例如 Fedora、Rocky Linux 和 AlmaLinux。
如果您想在 RHEL 和基于 RHEL 的发行版上安装 Apache Let’s Encrypt,请按照以下指南进行操作:
要求
- 具有有效
A
DNS 记录的注册域名,可指向服务器公共 IP 地址。 - 安装的 Nginx Web 服务器启用了 SSL 并启用了虚拟主机(仅适用于多个域或子域托管)。
我们的测试环境设置
第 1 步:在 RHEL 系统中安装 Nginx Web 服务器
1. 第一步,如果您尚未安装 Nginx 守护进程,请使用 root 权限发出以下命令,以便从 Epel 存储库安装 Nginx Web 服务器。
------------- On RHEL, Rocky & AlmaLinux 9 -------------
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
------------- On RHEL, Rocky & AlmaLinux 8 -------------
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
------------- Install Nginx Web Server -------------
yum install nginx
注意:Fedora 用户不需要安装 epel 存储库。
步骤 2:在 RHEL 系统中安装 Let’s Encrypt (Certbot)
2. 在 Linux 系统上安装 Let's Encrypt 客户端的最快方法是从 epel 存储库安装 certbot 和 python3-certbot-nginx 软件包。
dnf install certbot python3-certbot-nginx
3.安装certbot客户端后,通过运行以下命令验证已安装的Let’s Encrypt软件版本:
certbot --version
certbot 1.30.0
第 3 步:为 Nginx 获取免费的 Let’s Encrypt SSL 证书
4. 为 Nginx 获取免费 SSL/TLS 证书的过程将使用 Let's Encrypt Standalone 手动完成> 插件。
此方法要求在 Let's Encrypt 客户端验证服务器身份并生成证书期间,端口 80 必须空闲。
因此,如果 Nginx 已在运行,请使用以下命令停止守护进程并运行 ss 实用程序以确认端口 80 不再在网络堆栈中使用。
service nginx stop
systemctl stop nginx
ss -tln
5. 现在是时候通过使用 --nginx
certbot 命令来从 Let's Encrypt 获取免费的 SSL 证书了> 初始化 Nginx 域的 Let's Encrypt 安全证书的获取和配置。
certbot --nginx
Or
certbot --nginx -d example.com -d www.example.com
6.最后,如果一切顺利,您的 bash 终端上将显示一条祝贺信息消息。当证书到期时,也会显示该消息。
第4步:在Nginx中安装Let’s Encrypt SSL证书
9. 现在您已拥有免费的 SSL/TLS 证书,是时候将其安装在 Nginx 网络服务器中以便您的域可以使用它了。
所有新的 SSL 证书都放置在 /etc/letsencrypt/live/
中以您的域名命名的目录下。使用 ls 命令列出为您的域颁发的证书文件并识别它们。
sudo ls /etc/letsencrypt/live/
sudo ls -al /etc/letsencrypt/live/your_domain.tld
10. 要在 Nginx 中安装证书文件并启用 SSL,请打开 /etc/nginx/nginx.conf
文件进行编辑,并在最后一个监听行后添加以下语句服务器块。使用下图作为指导。
vi /etc/nginx/nginx.conf
Nginx SSL 块摘录:
SSL configuration
listen 443 ssl default_server;
ssl_certificate /etc/letsencrypt/live/your_domain.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain.tld/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
替换 SSL 证书的域名字符串以匹配您自己的域。
11.最后,重新启动Nginx服务并通过HTTPS协议访问您的域:https://yourdomain
。页面应该加载顺利,没有任何证书错误。
systemctl restart nginx
service nginx restart
12.为了验证SSL/TLS证书及其正确性,请访问以下链接:
https://www.ssllabs.com/ssltest/analyze.html
13. 如果您收到通知,表明您的服务器支持弱 DH 密钥交换且总体评级为 B 级,请生成新的< /etc/nginx/ssl/ 目录中的strong>Diffie-Hellman密码,通过运行以下命令来保护您的服务器免受Logjam攻击。
mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
openssl dhparam -out dhparams.pem 4096
在此示例中,我们使用了 4096 位密钥,这实际上需要很长时间才能生成,并且会给您的服务器和 SSL 握手带来额外的开销。
如果没有明确需要使用这么长的密钥并且您也不会偏执,那么使用2048位密钥应该是安全的。
14.生成DH密钥后,打开Nginx配置文件并在ssl_ciphers
行后添加以下语句以添加DH密钥和将您域的安全级别提升至 A+
等级。
vi /etc/nginx/nginx.conf
将以下块摘录添加到 Nginx.conf 中:
ssl_dhparam /etc/nginx/ssl/dhparams.pem;
ssl_session_timeout 30m;
ssl_session_cache shared:SSL:10m;
ssl_buffer_size 8k;
add_header Strict-Transport-Security max-age=31536000;
15. 重新启动 Nginx 服务以应用更改并通过从上述链接清除之前的结果缓存来重新测试您的 SSL 证书。
systemctl restart nginx
service nginx restart
第 5 步:自动续订 Nginx 免费加密 SSL 证书
16. Let’s Encrypt CA 发布免费 SSL/TLS 证书,有效期为 90 天。通过发出以下命令,可以使用 webroot 插件在到期之前手动更新和应用证书,而无需停止您的 Web 服务器:
certbot --nginx -d example.com -d www.example.com
systemctl reload nginx
运行上述命令时,请确保替换 example.com
以匹配您的域。
17. 为了在证书过期之前自动续订证书,请在现有的 crontab 文件中创建 cron 作业。
crontab -e
在文件底部添加以下 cron 作业,该作业将在每天中午运行以检查证书到期情况并续订。 --quiet
选项告诉 certbot 不要生成输出。
0 12 * * * /usr/bin/certbot renew --quiet
就这样!现在,Nginx 服务器可以使用免费的 SSL/TLS Let's Encrypt 证书在您的网站上提供安全的 Web 内容。