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

Nginx 实战系列(八)—— Nginx SSL/TLS 配置指南

文章目录

  • 前言
  • 一、准备工作:安装 Nginx
    • 1.4 验证 Nginx 运行状态
  • 二、获取 SSL/TLS 证书
    • 2.1 使用 Let’s Encrypt 免费证书(推荐用于生产环境)
      • 2.1.1 安装 Certbot 及 Nginx 插件
      • 2.1.2 获取 SSL 证书
      • 2.1.3 配置证书自动续期
    • 2.2 创建自签名证书(适用于测试环境)
      • 2.2.1 创建存储目录
      • 2.2.2 生成私钥和证书签名请求(CSR)
      • 2.2.3 生成自签名证书
      • 2.2.4 验证证书文件
  • 三、配置 Nginx 启用 SSL/TLS
    • 3.1 编辑 Nginx 配置文件
    • 3.2 配置 SSL 证书及加密设置
    • 3.3 配置 HTTP 到 HTTPS 的重定向
    • 3.4 启用 HTTP/2(可选)
  • 四、强化 SSL/TLS 安全性
    • 4.1 禁用弱加密协议
    • 4.2 启用 HTTP 严格传输安全(HSTS)
    • 4.3 配置强 Diffie-Hellman 参数
    • 4.4 优化加密套件配置
  • 五、验证配置
    • 5.1 检查 Nginx 配置语法
    • 5.2 重启 Nginx 服务
    • 5.3 测试 HTTPS 访问
  • 六、定期更新证书
    • 6.1 监控证书有效期
    • 6.2 自动化续期策略
  • 总结

前言

在当今互联网环境中,保障网站数据传输的安全性至关重要。SSL/TLS 协议通过对通信内容进行加密,有效防止数据被窃取或篡改,提升用户信任度和网站安全性。Nginx 作为一款高性能的 Web 服务器,提供了灵活且强大的 SSL/TLS 配置功能。

本文将详细介绍如何在 Nginx 中配置 SSL/TLS,涵盖从证书获取到安全性强化的完整流程,适用于生产环境与测试环境。


一、准备工作:安装 Nginx

安装步骤可参考Nginx 实战系列(一)—— Web 核心概念、HTTP/HTTPS协议 与 Nginx 安装

当然,我也提供了一键安装脚本:Nginx 实战系列(七)—— Nginx一键安装脚本详解

1.4 验证 Nginx 运行状态

通过浏览器访问服务器 IP 地址(如 http://your_server_ip),若显示 Nginx 默认欢迎页,则表示安装成功。也可通过以下命令查看服务状态:

sudo systemctl status nginx

在这里插入图片描述


二、获取 SSL/TLS 证书

SSL/TLS 证书是启用 HTTPS 加密的基础。可根据实际需求选择使用 Let’s Encrypt 免费证书自签名证书

2.1 使用 Let’s Encrypt 免费证书(推荐用于生产环境)

Let’s Encrypt 提供免费、自动续期的 SSL/TLS 证书,可通过 Certbot 工具快速获取和配置。

2.1.1 安装 Certbot 及 Nginx 插件

执行以下命令安装 Certbot 和其 Nginx 插件:

sudo yum install epel-release -y
sudo yum install certbot python2-certbot-nginx -y

2.1.2 获取 SSL 证书

运行以下命令,为您的域名申请证书(请替换 yourdomain.com 为实际域名):

sudo certbot --nginx --nginx-server-root /usr/local/nginx/conf -d yourdomain.com -d www.yourdomain.com

Certbot 将自动获取证书并重新加载 Nginx 配置。

2.1.3 配置证书自动续期

Let’s Encrypt 证书有效期为 90 天,建议设置定时任务自动续期:

sudo crontab -e

添加以下内容,每天午夜检查并续期:

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

在这里插入图片描述
Let’s Encrypt 免费证书注意点

1、域名类型​

  • ​真实注册的公开域名​(如 example.com):可以直接申请证书
  • 本地测试域名​(如 simoncwh.com但未实际注册):​无法通过公开 CA 验证​
  • ​本地hosts映射​(如 127.0.0.1 simoncwh.com):​无法通过公开 CA 验证​

2、Let’s Encrypt ​会验证您对该域名的所有权,它会

  • 向您的域名发起 HTTP 请求
  • 或要求您添加 DNS TXT 记录
  • 验证您是否真正控制该域名

2.2 创建自签名证书(适用于测试环境)

自签名证书可用于本地开发或测试,但浏览器会提示不安全,不建议在生产环境中使用。

2.2.1 创建存储目录

sudo mkdir -p /usr/local/nginx/ssl/private
sudo mkdir -p /usr/local/nginx/ssl/certs

在这里插入图片描述

2.2.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

在这里插入图片描述
在执行过程中需填写以下信息(示例):

  • Country Name(国家代码):CN
  • State or Province Name(省/州):Beijing
  • Locality Name(城市):Beijing
  • Organization Name(组织名称):MyCompany Ltd
  • Organizational Unit Name: (部门名):IT Department(可留空)
  • Common Name(域名):example.com
  • Email Address(邮箱):admin@example.com

2.2.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

在这里插入图片描述

2.2.4 验证证书文件

确保自签名证书(.crt)和私钥(.key)文件已正确生成并存放在指定路径。
证书应该已经保存在 /usr/local/nginx/ssl/certs/nginx-selfsigned.crt,密钥文件保存在 /usr/local/nginx/ssl/private/nginx-selfsigned.key
在这里插入图片描述


三、配置 Nginx 启用 SSL/TLS

3.1 编辑 Nginx 配置文件

使用文本编辑器打开 Nginx 配置文件:

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

3.2 配置 SSL 证书及加密设置

在配置文件中添加以下 server 块,启用 SSL 并指定证书路径:

server {listen 443 ssl;server_name simoncwh.com www.simoncwh.com;# 指定SSL证书文件路径(PEM格式,通常包含公钥和证书链)ssl_certificate /usr/local/nginx/ssl/certs/nginx-selfsigned.crt;# 指定SSL证书私钥文件路径ssl_certificate_key /usr/local/nginx/ssl/private/nginx-selfsigned.key;# 启用TLS协议版本,禁用不安全的TLSv1.0/TLSv1.1ssl_protocols TLSv1.2 TLSv1.3;# 配置加密套件ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";# 优先使用服务端配置的加密套件顺序ssl_prefer_server_ciphers on;location / {root /usr/share/nginx/html;index index.html;}
}

配置说明

  • listen 443 ssl:监听 443 端口并启用 SSL。
  • ssl_certificatessl_certificate_key:指定证书和私钥路径。
  • ssl_protocols:仅允许 TLSv1.2 和 TLSv1.3,禁用不安全协议。
  • ssl_ciphers:指定优先使用的加密套件。
  • ssl_prefer_server_ciphers:由服务器决定加密方式,提升安全性。

3.3 配置 HTTP 到 HTTPS 的重定向

为实现全站 HTTPS,添加以下配置将 HTTP 请求重定向至 HTTPS:

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

在这里插入图片描述
在这里插入图片描述

3.4 启用 HTTP/2(可选)

HTTP/2 可提升网站加载性能。在 SSL 配置中增加 http2 参数:

server {listen 443 ssl http2;...
}

四、强化 SSL/TLS 安全性

4.1 禁用弱加密协议

仅启用安全的 TLS 协议版本:

ssl_protocols TLSv1.2 TLSv1.3;

4.2 启用 HTTP 严格传输安全(HSTS)

HSTS 可强制浏览器使用 HTTPS 访问网站,减少中间人攻击风险:

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

4.3 配置强 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 优化加密套件配置

选择现代加密套件,禁用已知弱算法:

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 配置语法

执行以下命令验证配置文件是否正确:

sudo nginx -t

在这里插入图片描述

5.2 重启 Nginx 服务

若配置检查通过,重新加载 Nginx 使配置生效:

sudo systemctl restart nginx

5.3 测试 HTTPS 访问

  • 浏览器访问:打开 https://simoncwh.com,确认地址栏显示安全锁标志。
    在这里插入图片描述
  • 命令行测试:使用 curl 命令验证响应头是否包含 HTTPS 相关信息:
    curl -I https://www.simoncwh.com
    

六、定期更新证书

6.1 监控证书有效期

无论是使用 Let’s Encrypt 还是自签名证书,都需关注证书有效期,避免因证书过期导致服务中断。

6.2 自动化续期策略

若使用 Let’s Encrypt,可通过之前设置的 Cron 任务自动续期。自签名证书需手动重新生成和部署。


总结

通过本指南,您已完成:

1、Nginx 基础安装与验证

2、SSL/TLS 证书获取(Let’s Encrypt 或自签名)

3、HTTPS 服务配置与安全强化(HSTS/加密套件/DH 参数)

4、配置验证与自动化维护

建议在生产环境中始终使用可信证书颁发机构(如 Let’s Encrypt)签发的证书,并定期更新和维护 SSL/TLS 配置,以应对不断演进的网络安全威胁。


附录
如需进一步优化性能或配置更复杂的 SSL 策略,可参考 Nginx 官方文档或使用在线 SSL 配置生成工具(如 Mozilla SSL Configuration Generator)。


文章转载自:

http://SvRWXDEZ.kzrbn.cn
http://aSBy5wIK.kzrbn.cn
http://3KliONRl.kzrbn.cn
http://5SSrqc8f.kzrbn.cn
http://J1FY49uM.kzrbn.cn
http://4eGhTUNa.kzrbn.cn
http://neE8m7g5.kzrbn.cn
http://vrMp6B7y.kzrbn.cn
http://8gGhzWW7.kzrbn.cn
http://mMVz7wqm.kzrbn.cn
http://ZzSxI53Z.kzrbn.cn
http://hQL1R03L.kzrbn.cn
http://TGxyoTyr.kzrbn.cn
http://Fladg9mj.kzrbn.cn
http://Bbc46WDO.kzrbn.cn
http://2Peb8ttT.kzrbn.cn
http://kirncqzs.kzrbn.cn
http://9Cvpz57R.kzrbn.cn
http://rjvxeccL.kzrbn.cn
http://9HhTYHJo.kzrbn.cn
http://TtT1eaQh.kzrbn.cn
http://PMsX7j3k.kzrbn.cn
http://h1d8YBsj.kzrbn.cn
http://z5EEX1Eu.kzrbn.cn
http://o5gKrlmO.kzrbn.cn
http://dwOlE06q.kzrbn.cn
http://ATK7jcsO.kzrbn.cn
http://CJ4c8YVx.kzrbn.cn
http://y36f5utB.kzrbn.cn
http://xXmZZ2pl.kzrbn.cn
http://www.dtcms.com/a/376902.html

相关文章:

  • Python函数详解及*args、**kwargs用法
  • 零基础3个月上岸[特殊字符]自学数据分析路线
  • Java多线程(一)
  • pyspark读取hive表中数据后进行lgb建模
  • LeetCode 热题 42.接雨水(双指针写法)
  • 带你走进vue的响应式底层
  • 【算法--链表】117.填充每个节点的下一个右侧节点指针Ⅱ--通俗讲解
  • BFS与FloodFill算法简介与实战
  • 闭包面试题
  • el-table表头做过滤
  • LaTeX 中给单个/部分参考文献标记颜色(BibTeX 文献引用)
  • 深入探讨讲解MOS管工作原理-ASIM阿赛姆
  • 环境变量_进程地址空间
  • 文档抽取技术:革新合同管理,提升效率、准确性和智能化水平
  • 关于CSDN中图片无法粘贴的问题解决办法
  • 初始python
  • webshell上传方式
  • 图论2 图的数据结构表示
  • 09使用Python操作MySQL
  • 视频加水印,推荐使用运营大管家-视频批量加水印软件
  • Golang适配器模式详解
  • 【Linux】jar文件软链接和硬链接的操作区别
  • java控制台手动
  • Java入门级教程16——集合
  • docker桌面版 镜像配置
  • JVM 全面详解:深入理解 Java 的核心运行机制
  • JVM分代收集:原理与调优策略
  • 使用.NET标准库实现多任务并行处理的详细过程
  • 软件测试:功能测试详解
  • 数字图像处理-图像编码