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
相关推荐
迷途呀5 小时前
CI/CD 自动化部署实践:让代码提交后自动上线
linux·运维·nginx·ci/cd·自动化
IT摆渡者7 小时前
1panel 配置申请手动解析网站SSL证书
服务器·网络协议·ssl
企业数字化笔记16 小时前
AI写的网站一直自动跳转怎么办?301、302和HTTPS重定向排查
网络协议·http·https
IT摆渡者17 小时前
1panel 针对HTTP自动续签SSL网站证书
网络协议·ssl·openresty
运维全栈笔记19 小时前
Ansible 自动化 Nginx 集群部署实战:动态 Inventory、滚动发布与 Role 工程化
nginx·自动化·ansible
2601_967019511 天前
SSL证书是什么?HTTPS安全原理
ssl
2501_915106321 天前
苹果App Store上架费用及流程全面解析
android·ios·小程序·https·uni-app·iphone·webview
阿标在干嘛2 天前
Nginx一个配置错误,流量损失30%!这是我们的完整排查记录
运维·nginx
为思念酝酿的痛2 天前
应用层协议HTTPS
网络·网络协议·http·https
IPdodo_2 天前
curl 如何测试代理 IP?HTTP、SOCKS5 与认证参数示例
前端·网络·python·https·网络调试