Nginx SSL/TLS 配置

文章目录

  • 1、准备工作-安装nginx
  • 2、创建自签名证书(仅用于测试)
    • [2.1 生成自签名证书](#2.1 生成自签名证书)
  • [3、配置Nginx启用 SSL/TLS](#3、配置Nginx启用 SSL/TLS)
  • [4、扩展强化 SSL/TLS 安全性](#4、扩展强化 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

c 复制代码
## 安装epel源
sudo yum install epel-release -y
## 安装nginx
sudo yum install nginx -y
## 设置开机自启、检查状态
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx

2、创建自签名证书(仅用于测试)

2.1 生成自签名证书

c 复制代码
1、生成密钥文件和证书签名请求
sudo mkdir /etc/ssl/private
sudo mkdir /etc/ssl/certs

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

openssl req -new -key /usr/local/nginx/ssl/private/nginx-selfsigned.key -out /usr/local/nginx/ssl/certs/nginx-selfsigned.csr

------------------------------------------------------------------
其他字段说明(一般在用 openssl req -new -key ... 生成 CSR 时会问)
    Country Name (2 letter code): 国家代码(必须 2 位,例如 CN、US)
    State or Province Name: 省/州全名,例如 Beijing
    Locality Name: 城市,例如 Beijing
    Organization Name: 公司或组织名,例如 MyCompany Ltd
    Organizational Unit Name: 部门名,例如 IT Department(可留空)
    Common Name (e.g. server FQDN): 你的域名,例如 example.com
    Email Address: 邮箱地址,例如 admin@example.com
-------------------------------------------------------------------

2、生成自签名证书
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

3、验证证书生成是否成功
证书保存在	/usr/local/nginx/ssl/certs/nginx-selfsigned.crt
密钥保存在	/usr/local/nginx/ssl/private/nginx-selfsigned.key

3、配置Nginx启用 SSL/TLS

c 复制代码
1、编辑配置文件
vim  /usr/local/nginx/conf/nginx.conf

server {
    listen 443 ssl;
    server_name benet.com www.benet.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;
    ssl_prefer_server_ciphers on;

    location / {
        root /usr/share/nginx/html;
        index index.html;
    }
}
------------------------------------------------------------------
listen 443 ssl:监听 HTTPS 端口443
ssl_certificate 和 ssl_certificate_key:指定 SSL 证书和密钥的路径
ssl_protocols TLSv1.2 TLSv1.3:只启用 TLS 1.2 和 TLS 1.3,禁用 SSL 和 TLS 1.0/1.1
ssl_ciphers:定义加密套件,可以根据安全需求选择合适的加密方法
ssl_prefer_server_ciphers on:强制服务器优先选择加密套件
------------------------------------------------------------------

2、配置HTTP 到 HTTPS 重定向

server {
    listen 80;
    server_name benet.com www.benet.com;
    return 301 https://$host$request_uri;
}

4、扩展强化 SSL/TLS 安全性

4.1 禁用弱加密协议

c 复制代码
## 推荐仅启用 TLS 1.2 和 TLS 1.3,禁用所有过时的协议,如 SSLv3 和 TLS 1.0/1.1
ssl_protocols TLSv1.2 TLSv1.3;

4.2 启用 HTTP Strict Transport Security (HSTS)

c 复制代码
HSTS 强制浏览器只能通过 HTTPS 访问网站。以下配置将设置最长为一年(31536000 秒)的 HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

4.3 启用更强的 Diffie-Hellman 参数

c 复制代码
为了确保安全,使用一个更强的 Diffie-Hellman 参数。生成一个 2048 位的 DH 参数文件
sudo openssl dhparam -out /usr/local/nginx/ssl/certs/dhparam.pem 2048
在nginx配置文件中引用
ssl_dhparam /usr/local/nginx/ssl/certs/dhparam.pem;

4.4 配置加密套件

c 复制代码
配置一个现代、安全的加密套件,并禁用已知的弱加密算法
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';

5、验证配置

c 复制代码
## 检查配置文件
sudo nginx -t
## 重启
sudo systemctl restart nginx
## 测试
curl -I https://benet.com
也可以浏览器访问,检查 SSL 是否正常工作,看到浏览器地址栏中的绿色锁图标,表示安全连接
相关推荐
forAllforMe20 小时前
etherCAT的协议VoE,FoE,EoE,CoE的概念和区别
网络
大数据新鸟20 小时前
操作系统之虚拟内存
java·服务器·网络
迷藏49421 小时前
**eBPF实战进阶:从零构建网络流量监控与过滤系统**在现代云原生架构中,**网络可观测性**和**安全隔离**已成为
java·网络·python·云原生·架构
zmj32032421 小时前
汽车电子内部网络架构图
网络·汽车
汽车仪器仪表相关领域1 天前
NHFID-1000型非甲烷总烃分析仪:技术破局,重构固定污染源监测新体验
java·大数据·网络·人工智能·单元测试·可用性测试·安全性测试
卤炖阑尾炎1 天前
Python 网络编程实战:从 TCP/UDP 基础到高并发服务器开发
网络·python·tcp/ip
乾元1 天前
《硅基之盾》番外篇二:算力底座的暗战——智算中心 VXLAN/EVPN 架构下的多租户隔离与防御
网络·人工智能·网络安全·架构
智擎软件测评小祺1 天前
渗透测试报告关键模块拆解
网络·web安全·渗透测试·测试·检测·cma·cnas
W.W.H.1 天前
嵌入式常见的面试题1
linux·网络·经验分享·网络协议·tcp/ip
zmj3203241 天前
CAN + 以太网 + Wi-Fi + BLE + TCP/IP + MQTT +HTTP协议层级
网络·网络协议·tcp/ip