当前位置: 首页 > news >正文

Nginx 配置 SSL/TLS 全指南:从安装到安全强化

Nginx 配置 SSL/TLS 全指南:从安装到安全强化

文章目录

  • Nginx 配置 SSL/TLS 全指南:从安装到安全强化
    • 一、准备工作:安装 Nginx
      • 1. 安装 EPEL 仓库
      • 2. 安装 Nginx
      • 3. 启动并设置开机启动
      • 4. 验证安装
    • 二、获取 SSL/TLS 证书
      • 1. 使用 Let's Encrypt 免费证书(推荐)
        • (1)安装 Certbot
        • (2)获取证书
        • (3)配置自动续期
      • 2. 创建自签名证书(测试环境)
        • (1)创建证书存储目录
        • (2)生成密钥和证书签名请求(CSR)
        • (3)生成自签名证书
    • 三、配置 Nginx 启用 SSL/TLS
      • 1. 编辑 Nginx 配置文件
      • 2. 配置 HTTPS 服务
      • 3. 配置 HTTP 到 HTTPS 重定向
      • 4. 启用 HTTP/2(可选)
    • 四、强化 SSL/TLS 安全性
      • 1. 禁用弱加密协议
      • 2. 启用 HTTP Strict Transport Security (HSTS)
      • 3. 配置强 Diffie-Hellman 参数
      • 4. 优化加密套件
    • 五、验证配置
      • 1. 检查配置有效性
      • 2. 重启 Nginx 服务
      • 3. 测试 HTTPS 连接
    • 总结

在当今的网络环境中,HTTPS 已成为网站的标配。它不仅能保护用户数据安全,还能提升网站可信度,甚至对搜索引擎排名也有积极影响。本文将详细介绍如何在 Nginx 服务器上配置 SSL/TLS,从基础安装到安全强化,一步到位帮你实现网站的 HTTPS 加密。

一、准备工作:安装 Nginx

在配置 SSL/TLS 之前,我们需要先确保 Nginx 已经正确安装并运行。

1. 安装 EPEL 仓库

对于 CentOS 系统,首先需要安装 EPEL 仓库以获取 Nginx 安装包:

sudo yum install epel-release -y

2. 安装 Nginx

通过 yum 命令安装 Nginx:

sudo yum install nginx -y

3. 启动并设置开机启动

安装完成后,启动 Nginx 服务并设置为开机自动启动:

sudo systemctl start nginx
sudo systemctl enable nginx

4. 验证安装

访问服务器的 IP 地址(http://your_server_ip),如果能看到 Nginx 的默认欢迎页面,则说明安装成功。若未正常显示,可通过以下命令检查服务状态:

sudo systemctl status nginx

二、获取 SSL/TLS 证书

SSL/TLS 证书是实现 HTTPS 的核心。目前有两种主流选择:免费的 Let’s Encrypt 证书(推荐生产环境使用)和自签名证书(仅适合测试环境)。

1. 使用 Let’s Encrypt 免费证书(推荐)

Let’s Encrypt 提供的免费证书被所有主流浏览器信任,且支持自动续期,非常适合生产环境。我们将使用 Certbot 工具简化证书的获取和配置流程。

(1)安装 Certbot
sudo yum install epel-release -y
sudo yum install certbot python2-certbot-nginx -y
(2)获取证书

执行以下命令,将 yourdomain.com 替换为你的实际域名(支持多个域名):

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

Certbot 会自动完成证书获取、Nginx 配置修改和服务重载,无需手动操作。

(3)配置自动续期

Let’s Encrypt 证书有效期为 90 天,通过以下步骤设置自动续期:

sudo crontab -e

添加以下定时任务,每天自动检查并续期证书:

0 0 * * * /usr/bin/certbot renew --quiet

2. 创建自签名证书(测试环境)

如果只是用于本地测试,可生成自签名证书(浏览器会提示证书不受信任)。

(1)创建证书存储目录
mkdir -p /usr/local/nginx/ssl/private
mkdir -p /usr/local/nginx/ssl/certs
(2)生成密钥和证书签名请求(CSR)
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

执行过程中需要填写一些信息(如国家、域名等),其中Common Name需填写网站域名。

(3)生成自签名证书
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

生成的证书有效期为 365 天,存储在指定目录中。

三、配置 Nginx 启用 SSL/TLS

获取证书后,需要修改 Nginx 配置以启用 HTTPS。

1. 编辑 Nginx 配置文件

vim /usr/local/nginx/conf/nginx.conf

2. 配置 HTTPS 服务

在配置文件中添加以下内容(根据证书类型替换路径):

server {listen 443 ssl;server_name yourdomain.com www.yourdomain.com;# 证书路径(Let's Encrypt 证书路径通常为 /etc/letsencrypt/live/yourdomain.com/ 下)ssl_certificate /usr/local/nginx/ssl/certs/nginx-selfsigned.crt;ssl_certificate_key /usr/local/nginx/ssl/private/nginx-selfsigned.key;# 仅启用安全的 TLS 协议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;}
}

3. 配置 HTTP 到 HTTPS 重定向

为了强制所有流量通过 HTTPS 访问,添加以下配置实现自动重定向:

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

4. 启用 HTTP/2(可选)

HTTP/2 能提升网站加载速度,只需在监听端口后添加 http2 即可:

server {listen 443 ssl http2;# 其他配置不变...
}

四、强化 SSL/TLS 安全性

基础配置完成后,还需进一步强化 SSL/TLS 安全性,避免潜在漏洞。

1. 禁用弱加密协议

确保仅启用 TLS 1.2 和 TLS 1.3(已在基础配置中包含):

ssl_protocols TLSv1.2 TLSv1.3;

2. 启用 HTTP Strict Transport Security (HSTS)

HSTS 强制浏览器始终使用 HTTPS 访问,防止降级攻击:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

max-age=31536000 表示有效期为 1 年,includeSubDomains 表示对所有子域名生效。

3. 配置强 Diffie-Hellman 参数

生成并配置更强的 DH 参数,增强密钥交换安全性:

sudo openssl dhparam -out /usr/local/nginx/ssl/certs/dhparam.pem 2048

在 Nginx 配置中引用:

ssl_dhparam /usr/local/nginx/ssl/certs/dhparam.pem;

4. 优化加密套件

选择现代、安全的加密套件,禁用弱算法:

ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';

五、验证配置

1. 检查配置有效性

修改配置后,先检查是否有语法错误:

sudo nginx -t

2. 重启 Nginx 服务

确认配置无误后,重启 Nginx 应用更改:

sudo systemctl restart nginx

3. 测试 HTTPS 连接

  • 使用浏览器访问 https://yourdomain.com,地址栏显示绿色锁图标表示配置成功。
  • 使用 curl 命令测试:
    curl -I https://yourdomain.com
    
    若返回 HTTP/1.1 200 OKHTTP/2 200,说明 HTTPS 正常工作。

总结

通过本文的步骤,你已成功在 Nginx 上配置了 SSL/TLS,实现了网站的 HTTPS 加密。无论是使用免费的 Let’s Encrypt 证书,还是测试用的自签名证书,都能通过安全强化配置提升网站的安全性。记得定期检查证书状态,确保 HTTPS 持续有效。安全无小事,一个完善的 SSL/TLS 配置是保护用户数据和提升网站可信度的基础。


文章转载自:

http://07Wv7JIY.gjssk.cn
http://jmjaZmjP.gjssk.cn
http://qJvobX0n.gjssk.cn
http://9FbusPNN.gjssk.cn
http://jQZfi7DM.gjssk.cn
http://96jGQGPb.gjssk.cn
http://Bn16oqrB.gjssk.cn
http://EwwBBG1d.gjssk.cn
http://PRKOSGTS.gjssk.cn
http://MBQ0RoP4.gjssk.cn
http://qSgZ0G68.gjssk.cn
http://NoyobsZl.gjssk.cn
http://MvUy6VDF.gjssk.cn
http://BWdd1p17.gjssk.cn
http://TNRQghl1.gjssk.cn
http://Wh2yJrqg.gjssk.cn
http://eieofmZd.gjssk.cn
http://LIOGJ8ql.gjssk.cn
http://QgpvHEut.gjssk.cn
http://sp0zOV4g.gjssk.cn
http://ru2kC2IH.gjssk.cn
http://TKb5tE35.gjssk.cn
http://g20Eo0Jz.gjssk.cn
http://GJbFy6cn.gjssk.cn
http://AGNCSrUd.gjssk.cn
http://gJHxhXEj.gjssk.cn
http://iDtQ6kaZ.gjssk.cn
http://YgX0vX0m.gjssk.cn
http://wvbiaRe6.gjssk.cn
http://MgSU281K.gjssk.cn
http://www.dtcms.com/a/376598.html

相关文章:

  • 整体设计 之 绪 思维导图引擎 之 引 认知系统 之8 之 序 认知元架构 之4 统筹:范畴/分类/目录/条目 之2 (豆包助手 之6)
  • Android应用添加日历提醒功能
  • 【游戏开发】- 摄像机
  • B站 韩顺平 笔记 (Day 29)
  • Typescript入门-JSDoc注释及tsconfig讲解
  • Python快速入门专业版(十八):Python比较运算符深度解析:从基础判断到对象身份识别(附避坑指南)
  • 微服务网关实战:从三次灾难性故障到路由与权限的体系化防御
  • 从C++开始的编程生活(8)——内部类、匿名对象、对象拷贝时的编译器优化和内存管理
  • 【AI时代速通QT】第六节:Qt Creator从添加新窗口到项目构建运行配置
  • 【CVPR 2022】面向2020年代的卷积神经网络
  • 图神经网络介绍
  • FPGA入门到进阶:可编程逻辑器件的魅力
  • 【解决问题】Ubuntu18上无法运行arm-linux-gcc
  • 嵌入式学习day47-硬件-imx6ull-LED
  • 深入体验—Windows从零到一安装KingbaseES数据库
  • 力扣习题——电话号码的字母组合
  • Linux环境下爬虫程序的部署难题与系统性解决方案
  • 深入解析ThreadLocal:线程数据隔离利器
  • D01-【计算机二级】Python(1)基本操作第41题
  • API开发工具postman、国内xxapi和SmartApi的性能对比
  • Scikit-learn Python机器学习 - 分类算法 - 线性模型 逻辑回归
  • SciKit-Learn 全面分析 digits 手写数据集
  • 《sklearn机器学习——数据预处理》标准化或均值去除和方差缩放
  • 保序回归Isotonic Regression的sklearn实现案例
  • 《sklearn机器学习——数据预处理》离散化
  • 无人机桨叶转速技术要点与突破
  • GPFS存储服务如何使用及运维
  • ELK 日志采集与解析实战
  • BI数据可视化:驱动数据价值释放的关键引擎
  • FinChat-金融领域的ChatGPT