安全是网站所有者最关心的问题之一,尤其是如果你经营的是电子商务商店或接受用户机密信息(如用户名和密码) 的网站。纯 HTTP 协议是不安全的,因为数据是以纯文本形式发送的,黑客可以窃听从 web 服务器发送和接受的通信。
为了克服这种风险,建议使用 TLS / SSL 证书保护 Web 服务器。这是一个加密数字证书,可对您的 Web 服务器进行加密,并确保与 Web 服务器交换的数据已加密。
Let’s Encrypt SSL 证书是 Let’s Encrypt CA 提供的数字证书,用于(证书授权)保护 Web 服务器。这是免费的 TLS / SSL 证书,有效期只有 90 天,因此在到期之前需要更新。这对于无法负担高级 SSL 证书的初创公司或个人是个不错的选择。
在本指南中,我们将演示如何在 Rocky Linux 8 上安装 Let’s Encrypt SSL / TLS 证书。
必备条件
(1) 带有 sudo 用户权限的 Rocky Linux 8 服务器。
(2) 确保您有一个 FQDN (Fully Qualified Domain Name) 指向服务器的公共 IP。要实现这一点,请转到域注册器,并在 DNS 设置中配置 A 记录,将域名指向服务器的公共 IP。
在本文中,我们使用的域名是 linuxtechgeek.info,它指向服务器的 IP 地址 34.134.239.201
1) 安装 Nginx Web Server
我们从在 Rocky 8 上安装 Nginx Web 服务器开始,让我们升级系统包并更新存储库。
$ sudo dnf update
升级完成后,重新启动一次系统,然后按照如下步骤安装 Nginx Web Server
$ sudo dnf install nginx
启动 nginx 服务
$ sudo systemctl start nginx
设置开机启动
$ sudo systemctl enable nginx
验证服务状态
$ sudo systemctl status nginx
您也可以从浏览器验证这一点,先放行防火墙上的 HTTP 流量
$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --add-service=https --permanent
重新加载防火墙
$ sudo firewall-cmd --reload
然后浏览服务器的 IP 地址或域名
http://domain_name
2) 为域创建一个文档根目录
在 linuxtechgeek.info 路径下创建一个目录
$ sudo mkdir -p /var/www/linuxtechgeek.info/html
出于演示的目的,我们将创建一个简单的 index.html 文件
$ sudo vi /var/www/linuxtechgeek.info/html/index.html
接下来,粘贴以下示例 HTML 代码并保存更改
<!DOCTYPE html>
<html>
<head>
<title>Welcome to linuxtechgeek.info</title>
</head>
<body>
<h1>Hey Guys! Our Nginx server block is working.</h1>
</body>
</html>
接下来,使用 chown 命令设置目录的所有权,以避免权限问题。
$ sudo chown -R nginx /var/www/linuxtechgeek.info/
接下来,设置权限,以便组和全局用户具有文件的读取和执行权限。
$ sudo chmod -R 755 /var/www/linuxtechgeek.info/
3) 配置 Nginx Server
创建一个 linuxtechgeek.info.conf 配置文件,如下所示
$ sudo vi /etc/nginx/conf.d/linuxtechgeek.info.conf
复制并粘贴以下行,请确保将 linuxtechgeek.info 域名替换为您自己的域名。
server {
listen 80;
server_name linuxtechgeek.info www.linuxtechgeek.info;
root /var/www/linuxtechgeek.info/html;
index index.php index.html index.htm;
access_log /var/log/nginx/linuxtechgeek.info.access.log;
error_log /var/log/nginx/linuxtechgeek.info.error.log;
}
保存更改并退出文件,然后执行如下命令,测试配置是否正确
$ sudo nginx -t
重启 nginx 服务
$ sudo systemctl restart nginx
确认 nginx 状态
$ sudo systemctl status nginx
将 SELinux 设置为允许模式
$ sudo setenforce permissive
确认 SELinux 允许模式
$ sudo getenforce
Run below sed command to permanently set the selinux mode as permissive.
如果需要将 selinux 模式永久设置为允许模式,运行如下命令
$ sudo sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/sysconfig/selinux
请再次浏览您的域名,确认配置成功
http://domain_name
4) 安装 Let’s Encrypt SSL/TLS 证书
接下来安装 Let’s Encrypt证书,然而要实现这一点,我们需要安装 certbot。Certbot 由 Python 编写,由电子前沿基金会开发,是 Let’ s Encrypt CA 的一个功能齐全的客户端。它运行在 web 服务器上,允许您在单个命令中自动为您的 web 服务器设置 SSL 证书。
安装 EPEL 存储库
$ sudo dnf install -y epel-release
安装 certbot,python3-certbot-nginx
$ sudo dnf install certbot python3-certbot-nginx
运行 certbot 客户端安装 SSL 证书
$ sudo certbot --nginx
按照指引,完成安装。Certbot 将获取 SSL/TLS 证书,并为指定的域名部署。这可以为您的域名提供 HTTPS 协议,实际上是加密与 Web 服务器交换的流量。
要确认 HTTPS 已启用,请返回浏览器并重新加载它。这一次,您将注意到 URL 栏上有一个挂锁图标,表明该网站是加密的。
单击图标,然后选择 Certificate
这将显示所证书的详细信息
此外,您可以在 SSL 实验室测试 web 服务器的状态,SSL 实验室是一个通过互联网对 web 服务器进行深入分析的网站。你应该得到如图所示的 A 评级。
5) 管理 SSL 证书续订
Let’s Encrypt 证书的有效期为 90 天,但 Let’s Encrypt 建议每 60 天更新一次证书。电子邮件通知将在截止日期前的最后 20 天内发送给您,并在最后 10 天内发送频率增加。
您可以通过以下方式手动更新证书
$ sudo certbot renew
您可以通过添加新的计划任务来自动化续订,打开 crontab 文件
$ crontab -e
添加如下所示的行,保存并退出。
0 0 * * * /usr/bin/certbot renew > /dev/null 2>&1