nginx https ssl证书

文章目录

  • [一、Nginx SSL/TLS 配置](#一、Nginx SSL/TLS 配置)
    • [1. 准备工作:安装 Nginx](#1. 准备工作:安装 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 是否正常运行)
    • [2. 获取 SSL/TLS 证书](#2. 获取 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 生成自签名证书)
    • [3. 配置 Nginx 启用 SSL/TLS](#3. 配置 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(可选))
    • [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. 验证配置](#5. 验证配置)
      • [5.1 检查 Nginx 配置](#5.1 检查 Nginx 配置)
      • [5.2 重启 Nginx](#5.2 重启 Nginx)
      • [5.3 测试 HTTPS 配置](#5.3 测试 HTTPS 配置)

一、Nginx SSL/TLS 配置

1. 准备工作:安装 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

2. 获取 SSL/TLS 证书

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

(将 yourdomain.com 替换为实际域名,Certbot 会自动配置 Nginx 使用 SSL 并启用 HTTPS,修改 Nginx 配置,获取证书并重新加载 Nginx 服务)

2.1.3 配置自动续期
bash 复制代码
sudo crontab -e

添加以下行,每天检查并自动续期证书:

bash 复制代码
0 0 * * * /usr/bin/certbot renew --quiet

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

2.2.1 生成自签名证书
  1. 生成密钥文件和证书签名请求(CSR):
bash 复制代码
sudo mkdir /etc/ssl/private
sudo mkdir /etc/ssl/certs
# 创建用于存放证书相关文件的子目录

mkdir -p /usr/local/nginx/ssl/private
mkdir -p /usr/local/nginx/ssl/certs
# 递归为 Nginx 单独创建 SSL 存储目录

openssl genpkey -algorithm RSA -out /usr/local/nginx/ssl/private/nginx-selfsigned.key -pkeyopt rsa_keygen_bits:2048
# 使用 OpenSSL 生成一个 2048 位 RSA 算法的私钥文件

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
  1. 生成自签名证书:
bash 复制代码
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
  1. 验证证书生成是否成功:
    证书保存在 /usr/local/nginx/ssl/certs/nginx-selfsigned.crt,密钥文件保存在 /usr/local/nginx/ssl/private/nginx-selfsigned.key

3. 配置 Nginx 启用 SSL/TLS

3.1 编辑 Nginx 配置文件

bash 复制代码
vim  /usr/local/nginx/conf/nginx.conf

3.2 配置 SSL 证书路径

在 Nginx 配置中添加以下内容:

nginx 复制代码
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_certificatessl_certificate_key 指定证书和密钥路径;ssl_protocols 启用 TLS 1.2 和 TLS 1.3;ssl_ciphers 定义加密套件;ssl_prefer_server_ciphers on; 强制服务器优先选择加密套件)

3.3 配置 HTTP 到 HTTPS 重定向

添加以下内容,使 HTTP 流量转到 HTTPS:

nginx 复制代码
server {
    listen 80;
    server_name benet.com www.benet.com;
    return 301 https://$host$request_uri;
}

3.4 配置 HTTP/2(可选)

若要启用 HTTP/2,添加 http2

nginx 复制代码
server {
    listen 443 ssl http2;
    ...
}

4. 强化 SSL/TLS 安全性

4.1 禁用弱加密协议

nginx 复制代码
ssl_protocols TLSv1.2 TLSv1.3;

4.2 启用 HTTP Strict Transport Security (HSTS)

nginx 复制代码
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

(设置最长为一年的 HSTS)

4.3 启用更强的 Diffie-Hellman 参数

生成 2048 位的 DH 参数文件:

bash 复制代码
sudo openssl dhparam -out /usr/local/nginx/ssl/certs/dhparam.pem 2048

在 Nginx 配置中引用:

nginx 复制代码
ssl_dhparam /usr/local/nginx/ssl/certs/dhparam.pem;

4.4 配置加密套件

nginx 复制代码
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';

5. 验证配置

5.1 检查 Nginx 配置

bash 复制代码
sudo nginx -t

5.2 重启 Nginx

若配置无错误,重启 Nginx 应用更改:

bash 复制代码
sudo systemctl restart nginx

5.3 测试 HTTPS 配置

  • 使用浏览器访问 https://benet.com,查看是否有绿色锁图标。
  • 使用 curl 命令测试:
bash 复制代码
curl -I https://benet.com
相关推荐
困惑阿三14 小时前
客户消息及时反馈
nginx·node.js·飞书·企业微信
liurunlin88816 小时前
httpslocalhostindex 配置的nginx,一刷新就报404了
运维·nginx
BullSmall17 小时前
Nginx负载均衡会话保持配置指南
运维·nginx·负载均衡
你才是臭弟弟19 小时前
Nginx部署前后端
运维·nginx
理人综艺好会19 小时前
http和https的了解
网络协议·http·https
灰子学技术19 小时前
自定义 Host 头访问 HTTPS 服务时的网关处理逻辑
网络·网络协议·http·https
甘露s19 小时前
从明文到加密:HTTP 与 HTTPS 的本质区别与建立全解析
网络协议·http·https
_下雨天.1 天前
Nginx性能调优与深度监控
运维·nginx
weiwx831 天前
Nginx location 和 proxy_pass 配置详解
服务器·网络·nginx