文章目录
- 前言
- [一、准备工作:安装 Nginx](#一、准备工作:安装 Nginx)
-
- [1.1 安装 EPEL 仓库](#1.1 安装 EPEL 仓库)
- [1.2 安装 Nginx](#1.2 安装 Nginx)
- [1.3 启动并设置 Nginx 开机启动](#1.3 启动并设置 Nginx 开机启动)
- [1.4 检查 Nginx 是否正常运行](#1.4 检查 Nginx 是否正常运行)
- [二、获取 SSL/TLS 证书](#二、获取 SSL/TLS 证书)
-
- [2.1 使用 Let's Encrypt 证书(推荐)](#2.1 使用 Let's Encrypt 证书(推荐))
-
- [2.1.1 安装 Certbot](#2.1.1 安装 Certbot)
- [2.1.2 获取 SSL 证书](#2.1.2 获取 SSL 证书)
- [2.1.3 配置自动续期](#2.1.3 配置自动续期)
- [2.2 创建自签名证书(仅用于测试)](#2.2 创建自签名证书(仅用于测试))
-
- [2.2.1 生成自签名证书](#2.2.1 生成自签名证书)
- 2.2.2验证是否生成成功
- [三、配置 Nginx 启用 SSL/TLS](#三、配置 Nginx 启用 SSL/TLS)
-
- [3.1 编辑 Nginx 配置文件](#3.1 编辑 Nginx 配置文件)
- [3.2 配置 SSL 证书路径](#3.2 配置 SSL 证书路径)
- [3.3 配置 HTTP 到 HTTPS 重定向](#3.3 配置 HTTP 到 HTTPS 重定向)
- [3.4 配置 HTTP/2(可选)](#3.4 配置 HTTP/2(可选))
- [四、强化 SSL/TLS 安全性](#四、强化 SSL/TLS 安全性)
-
- [4.1 禁用弱加密协议](#4.1 禁用弱加密协议)
- [4.2 启用 HTTP Strict Transport Security (HSTS)](#4.2 启用 HTTP Strict Transport Security (HSTS))
- [4.3 启用更强的 Diffie-Hellman 参数](#4.3 启用更强的 Diffie-Hellman 参数)
- [4.4 配置加密套件](#4.4 配置加密套件)
- 五、验证配置
-
- [5.1 检查 Nginx 配置](#5.1 检查 Nginx 配置)
- [5.2 重启 Nginx](#5.2 重启 Nginx)
- [5.3 测试 HTTPS 配置](#5.3 测试 HTTPS 配置)
- 总结
前言
在当今互联网环境中,网站安全性至关重要。SSL/TLS 协议为网站提供了加密通信的能力,保护用户数据免受窃听和篡改。本文将详细介绍如何在 Nginx 服务器上配置 SSL/TLS 证书,包括获取证书、配置 Nginx、强化安全性等完整流程。无论您是使用 Let's Encrypt 的免费证书还是自签名证书,都能在本指南中找到对应的配置方法。
一、准备工作:安装 Nginx
1.1 安装 EPEL 仓库
bash
sudo yum install epel-release -y
1.2 安装 Nginx
bash
sudo yum install nginx -y
1.3 启动并设置 Nginx 开机启动
bash
sudo systemctl start nginx
sudo systemctl enable nginx
1.4 检查 Nginx 是否正常运行
访问 http://your_server_ip
,你应该能看到 Nginx 的默认欢迎页面。如果没有,使用以下命令检查 Nginx 状态:
bash
sudo systemctl status nginx
二、获取 SSL/TLS 证书
SSL/TLS 证书是启用 HTTPS 加密连接所必需的。我们可以使用免费的 Let's Encrypt 证书,也可以选择使用 自签名证书。
2.1 使用 Let's Encrypt 证书(推荐)
2.1.1 安装 Certbot
bash
sudo yum install epel-release -y
sudo yum install certbot python2-certbot-nginx -y
2.1.2 获取 SSL 证书
bash
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
2.1.3 配置自动续期
bash
sudo crontab -e
添加以下行:
bash
0 0 * * * /usr/bin/certbot renew --quiet
2.2 创建自签名证书(仅用于测试)
2.2.1 生成自签名证书
bash
mkdir -p /usr/local/nginx/ssl/private
#证书私钥文件夹
mkdir -p /usr/local/nginx/ssl/certs
#证书请求文件夹
openssl genpkey -algorithm RSA -out /usr/local/nginx/ssl/private/nginx-selfsigned.key -pkeyopt rsa_keygen_bits:2048
#-algorithm指定证书算法 SRA
#-out 指定输出目录
#-pkeyopt 指定秘钥长度,2048标准安全
openssl req -new -key /usr/local/nginx/ssl/private/nginx-selfsigned.key -out /usr/local/nginx/ssl/certs/nginx-selfsigned.csr
#req -new 生成一个新的证书请求
#-key /usr/local/nginx/ssl/private/nginx-selfsigned.key 请求一个私钥
#-out /usr/local/nginx/ssl/certs/nginx-selfsigned.csr 输出到证书请求文件
openssl x509 -req -days 365 -in /usr/local/nginx/ssl/certs/nginx-selfsigned.csr -signkey /usr/local/nginx/ssl/private/nginx-selfsigned.key -out /usr/local/nginx/ssl/certs/nginx-selfsigned.crt
#x509标准证书
#-req -days 365 -in /usr/local/nginx/ssl/certs/nginx-selfsigned.csr生成一个新的证书请求365天的
#-signkey /usr/local/nginx/ssl/private/nginx-selfsigned.key指向私钥地址
#-out /usr/local/nginx/ssl/certs/nginx-selfsigned.crt指向证书地址
==================================证书签发对话=====================================
其他字段说明(一般在用 openssl req -new -key ... 生成 CSR 时会问)
Country Name (2 letter code): 国家代码(必须 2 位,例如 CN、US)
State or Province Name: 省/州全名,例如 Zhejiang
Locality Name: 城市,例如 Hangzhou
Organization Name: 公司或组织名,例如 MyCompany Ltd
Organizational Unit Name: 部门名,例如 IT Department(可留空)
Common Name (e.g. server FQDN): 你的域名,例如 example.com
Email Address: 邮箱地址,例如 admin@example.com
2.2.2验证是否生成成功
证书应该已经保存在 /usr/local/nginx/ssl/certs/nginx-selfsigned.crt(自签名证书),密钥文件保存在
/usr/local/nginx/ssl/private/nginx-selfsigned.key`(私钥文件)。在nginx去配置引导这两个文件
在企业中,一般获得域名后,域名都会自带证书,所以实际上直接将证书和私钥配置在nginx中即可。
三、配置 Nginx 启用 SSL/TLS
3.1 编辑 Nginx 配置文件
bash
vim /usr/local/nginx/conf/nginx.conf
3.2 配置 SSL 证书路径
bash
server {
listen 443 ssl;
server_name look.com www.look.com;
ssl_certificate /usr/local/nginx/ssl/certs/nginx-selfsigned.crt;
#指定密钥路径
ssl_certificate_key /usr/local/nginx/ssl/private/nginx-selfsigned.key;
#指定证书路径
ssl_protocols TLSv1.2 TLSv1.3;
#证书版本
ssl_ciphers TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256;
#定义加密套件。可以根据安全需求选择合适的加密方法。
#openssl版本低的解决方法
#一、修改为ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
#二、升级openssl版本
ssl_prefer_server_ciphers on;
#强制服务器优先选择加密套件。
location / {
root /usr/share/nginx/html;
index index.html;
}
}

3.3 配置 HTTP 到 HTTPS 重定向
这将使得访问 HTTP(端口 80)的请求自动重定向到 HTTPS。
bash
server {
listen 80;
server_name benet.com www.benet.com;
return 301 https://$host$request_uri;
}

3.4 配置 HTTP/2(可选)
bash
server {
listen 443 ssl http2;
...
}
四、强化 SSL/TLS 安全性
为了提升 SSL/TLS 配置的安全性,我们可以实施一些最佳实践。
4.1 禁用弱加密协议
推荐仅启用 TLS 1.2 和 TLS 1.3,禁用所有过时的协议,如 SSLv3 和 TLS 1.0/1.1。
bash
ssl_protocols TLSv1.2 TLSv1.3;
4.2 启用 HTTP Strict Transport Security (HSTS)
HSTS 强制浏览器只能通过 HTTPS 访问网站。以下配置将设置最长为一年(31536000 秒)的 HSTS:
bash
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
4.3 启用更强的 Diffie-Hellman 参数
为了确保安全,使用一个更强的 Diffie-Hellman 参数。生成一个 2048 位的 DH 参数文件:
bash
sudo openssl dhparam -out /usr/local/nginx/ssl/certs/dhparam.pem 2048
然后在 Nginx 配置中引用它:
bash
ssl_dhparam /usr/local/nginx/ssl/certs/dhparam.pem;
4.4 配置加密套件
配置一个现代、安全的加密套件,并禁用已知的弱加密算法。例如:
bash
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';
五、验证配置
5.1 检查 Nginx 配置
bash
sudo nginx -t
5.2 重启 Nginx
bash
sudo systemctl restart nginx
5.3 测试 HTTPS 配置
使用浏览器访问 https://benet.com
,或使用命令:
bash
curl -I https://look.com

总结
通过本文的详细步骤,您已经学会了如何在 Nginx 服务器上配置 SSL/TLS 证书。无论是使用 Let's Encrypt 的免费证书还是自签名证书,都能为您的网站提供安全的 HTTPS 连接。同时,通过强化 SSL/TLS 配置,可以进一步提升网站的安全性。定期检查和更新证书是确保网站持续安全运行的重要环节。希望本指南能帮助您顺利完成 Nginx 的 SSL/TLS 配置工作。