Nginx配置SSL详解

文章目录

  • Nginx配置SSL详解
    • 1. SSL/TLS 基础知识
    • 2. 准备工作
    • 3. 获取SSL证书
    • 4. Nginx SSL配置步骤
      • 4.1 基础配置
      • 4.2 配置说明
    • 5. 常见配置示例
      • 5.1 双向认证配置
      • 5.2 多域名SSL配置
    • 6. 安全优化建议
    • 7. 故障排查
    • 总结
    • 参考资源
    • 下载验证的完整实例

Nginx配置SSL详解

1. SSL/TLS 基础知识

SSL (Secure Sockets Layer) 和其继任者 TLS (Transport Layer Security) 是用于在网络通信中提供安全性的加密协议。它们可以确保:

  • 数据加密:确保数据传输的私密性
  • 身份认证:验证服务器的身份
  • 数据完整性:确保数据在传输过程中未被篡改

2. 准备工作

在配置Nginx SSL之前,需要准备以下内容:

  • 已安装的Nginx服务器
  • 域名
  • SSL证书(包含以下文件):
    • 证书文件(通常是 .crt 或 .pem 文件)
    • 私钥文件(通常是 .key 文件)
    • 证书链文件(如果需要)

3. 获取SSL证书

获取SSL证书的方式有多种:

类型 来源/方法 特点 适用场景
免费SSL证书 Let’s Encrypt 有效期90天,支持自动续签,需域名验证,适合个人或测试环境 个人博客、小型网站
云服务商(阿里云、腾讯云) 提供免费DV证书,有效期1年,需控制台申请,集成服务器部署工具 国内云服务器用户
JoySSL 通过注册码获取,支持一年期免费证书,提供技术指导 预算有限的个人或企业
付费SSL证书 官方CA机构(Symantec, DigiCert) 支持OV/EV证书,验证企业身份,含高额商业保险,浏览器显示绿色公司名称 电商、金融等高安全性需求网站
云服务商(GeoTrust, RapidSSL) 提供多种类型(单域名/多域名/通配符),价格低于官方渠道,支持快速签发 多子域名或跨域名的企业网站
自签名证书 OpenSSL工具生成 无需费用,但浏览器提示“不安全”,需手动信任 内部测试环境、开发调试
自动化工具 acme.sh + Let’s Encrypt 命令行自动申请和续签,支持DNS验证,可与crontab结合实现全自动化管理 技术型用户、需长期维护的服务器
特殊场景证书 IP证书(JoySSL) 直接为IP地址颁发证书,验证IP管理权限,支持DVIP(基础验证)和OVIP(企业验证) 无域名或纯IP访问的服务

使用openssl生成证书

  1. 生成私钥
openssl genrsa -out private.key 2048  # 生成2048位RSA私钥 
  • 可选加密保护:添加 -des3 参数加密私钥(需输入密码)。
  1. 创建证书签名请求(CSR)
openssl req -new -key private.key -out request.csr 
  • 填写信息:需输入国家代码(如 CN)、省份、组织名称、Common Name(域名或 IP)等。
  1. 自签名生成证书
openssl x509 -req -in request.csr -signkey private.key -out certificate.crt -days 365 
  • 参数说明:-days 365 设置证书有效期(1年),可调整。

Nginx配置SSL详解_第1张图片

4. Nginx SSL配置步骤

4.1 基础配置

以下是一个基本的Nginx SSL配置示例:

server {
    listen 443 ssl;
    server_name example.com;

    # SSL证书配置
    ssl_certificate /path/to/your/certificate.crt;
    ssl_certificate_key /path/to/your/private.key;

    # SSL协议配置
    ssl_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:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    # SSL会话配置
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;

    # HSTS配置(可选)
    add_header Strict-Transport-Security "max-age=63072000" always;

    location / {
        root /usr/share/nginx/html;
        index index.html index.htm;
    }
}

# HTTP重定向到HTTPS
server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}

4.2 配置说明

  • listen 443 ssl: 在443端口启用SSL
  • ssl_certificate: 指定证书文件路径
  • ssl_certificate_key: 指定私钥文件路径
  • ssl_protocols: 指定支持的SSL/TLS协议版本
  • ssl_ciphers: 指定加密算法套件
  • ssl_session_cache: 配置SSL会话缓存
  • ssl_session_timeout: 设置SSL会话超时时间

5. 常见配置示例

5.1 双向认证配置

server {
    listen 443 ssl;
    server_name example.com;
    
    ssl_certificate /path/to/server.crt;
    ssl_certificate_key /path/to/server.key;
    
    # 客户端证书验证
    ssl_client_certificate /path/to/ca.crt;
    ssl_verify_client on;
}

5.2 多域名SSL配置

server {
    listen 443 ssl;
    server_name site1.example.com;
    
    ssl_certificate /path/to/site1.crt;
    ssl_certificate_key /path/to/site1.key;
}

server {
    listen 443 ssl;
    server_name site2.example.com;
    
    ssl_certificate /path/to/site2.crt;
    ssl_certificate_key /path/to/site2.key;
}

6. 安全优化建议

  1. 启用HSTS

    add_header Strict-Transport-Security "max-age=63072000" always;
    
  2. 优化SSL会话重用

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    
  3. 配置OCSP Stapling

    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;
    
  4. 禁用不安全的SSL/TLS版本

    ssl_protocols TLSv1.2 TLSv1.3;
    

7. 故障排查

常见问题及解决方案:

  1. 证书链不完整

    • 检查证书文件是否包含完整的证书链
    • 使用 openssl verify 命令验证证书
  2. 私钥不匹配

    • 使用 openssl rsa -in private.key -check 验证私钥
    • 确保证书和私钥是配对的
  3. 权限问题

    • 确保Nginx进程有权限读取证书文件
    • 检查证书文件权限:chmod 644 certificate.crt
    • 检查私钥文件权限:chmod 600 private.key
  4. 配置语法错误

    • 使用 nginx -t 检查配置文件语法
    • 查看错误日志:tail -f /var/log/nginx/error.log

总结

正确配置Nginx SSL不仅可以保护网站的安全性,还能提升用户信任度和搜索引擎排名。通过遵循以上配置指南和最佳实践,可以确保网站具有强大的SSL/TLS安全性。记住要定期更新证书,及时应用安全补丁,并持续监控SSL配置的有效性。

参考资源

  • Nginx官方文档
  • Mozilla SSL配置生成器
  • Let’s Encrypt官网
  • SSL Labs Server Test

下载验证的完整实例

docker部署nginx验证

nginx构建命令

docker run --name=ssl --network=host -v /home/jykj/nginxssl/dist:/usr/share/nginx/html -v /home/jykj/nginxssl:/etc/nginx -v /home/jykj/nginxssl/logs:/var/log/nginx -d nginx

你可能感兴趣的:(nginx,nginx,ssl,运维)