【Nginx 进阶】4、SSL/TLS 配置

【Nginx 进阶】SSL/TLS 配置


【Nginx进阶】系列文章目录

【Nginx 进阶】1、Nginx 高级配置
【Nginx 进阶】2、模块化设计
【Nginx 进阶】3、负载均衡策略
【Nginx 进阶】4、SSL/TLS 配置(本文)
【Nginx 进阶】5、Nginx 性能优化
【Nginx 进阶】6、Nginx 与第三方服务集成
【Nginx 进阶】7、安全配置
【Nginx 进阶】8、Nginx 高可用性
【Nginx 进阶】9、监控和调试


SSL/TLS 是确保 Web 应用安全性的关键技术,它通过加密保护数据传输的机密性、完整性和真实性。Nginx 作为高性能的 Web 服务器和反向代理服务器,提供了强大的 SSL/TLS 支持。在本章中,我们将详细介绍 Nginx 的 SSL/TLS 配置,包括基础配置、优化、证书管理和常见问题解决。

1. SSL/TLS 基础配置

1.1 生成 SSL 证书

在配置 SSL/TLS 之前,你需要一个 SSL 证书。你可以使用自签名证书进行测试,或者从受信任的证书颁发机构(CA)获取正式证书。

1.1.1 生成自签名证书

使用 OpenSSL 生成自签名证书:

# 生成私钥
openssl genpkey -algorithm RSA -out /etc/nginx/ssl/nginx.key

# 生成自签名证书
openssl req -new -x509 -key /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt -days 365

1.2 基本 SSL 配置

在 Nginx 配置文件中启用 SSL/TLS:

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;

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

在这个配置中:

  • listen 443 ssl;:Nginx 监听 443 端口并启用 SSL。
  • ssl_certificatessl_certificate_key:指定 SSL 证书和私钥的路径。

2. SSL/TLS 优化

为了提高 SSL/TLS 的安全性和性能,可以进行一些优化配置。

2.1 启用 HTTP/2

HTTP/2 提供了更高效的网络传输,可以显著提高网站的性能。启用 HTTP/2:

server {
    listen 443 ssl http2;
    ...
}

2.2 强制使用安全协议和加密套件

为了确保连接的安全性,禁用不安全的协议和弱加密套件:

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;

    # 禁用 SSLv3 和弱加密套件
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;

    # HSTS 头,增强安全性
    add_header Strict-Transport-Security "max-age=31536000" always;

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

2.3 启用 OCSP Stapling

OCSP Stapling 可以减少 SSL 握手时间,提高性能:

server {
    ...
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/nginx/ssl/chain.pem;  # CA 证书链
    ...
}

2.4 使用 Diffie-Hellman 参数

生成 Diffie-Hellman 参数文件并配置:

# 生成 DH 参数文件
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

在 Nginx 配置中使用:

server {
    ...
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;
    ...
}

3. 重定向 HTTP 到 HTTPS

为了确保所有流量都通过 HTTPS 加密,可以将 HTTP 请求重定向到 HTTPS:

server {
    listen 80;
    server_name example.com;

    location / {
        return 301 https://$server_name$request_uri;
    }
}

4. 多域名和子域名配置

Nginx 支持多域名和子域名的 SSL 配置,可以在同一个服务器块中配置多个域名:

server {
    listen 443 ssl;
    server_name example.com www.example.com;

    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;

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

5. SSL/TLS 证书管理

5.1 Let’s Encrypt 自动化证书管理

Let’s Encrypt 提供免费可信的 SSL 证书,可以使用 Certbot 工具实现自动化证书管理:

5.1.1 安装 Certbot

在 Ubuntu 上安装 Certbot:

sudo apt update
sudo apt install certbot python3-certbot-nginx
5.1.2 生成和安装证书

使用 Certbot 自动生成和安装证书:

sudo certbot --nginx -d example.com -d www.example.com
5.1.3 自动续期

Certbot 自动续期服务会定期检查和更新证书,无需手动干预:

sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer

5.2 手动更新证书

如果你使用的是付费证书,需要定期手动更新证书。更新证书后,重新加载 Nginx 配置:

sudo systemctl reload nginx

6. 常见问题解决

6.1 SSL 证书无效或过期

检查证书路径和文件权限,确保 Nginx 用户有权限访问证书文件。如果证书过期,请及时更新证书。

6.2 浏览器不信任证书

如果使用自签名证书,浏览器可能会警告不信任。对于生产环境,建议使用受信任的 CA 颁发的证书。

6.3 SSL 连接性能差

启用 HTTP/2、OCSP Stapling 和优化加密套件可以提高 SSL 连接的性能。

7. 完整示例

下面是一个综合了多种 SSL/TLS 配置和优化的完整示例:

# HTTP 重定向到 HTTPS
server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        return 301 https://$server_name$request_uri;
    }
}

# HTTPS 配置
server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/nginx/ssl/chain.pem;
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;

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

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

8. 总结

在本章中,我们详细介绍了 Nginx 的 SSL/TLS 配置,包括基础配置、优化、证书管理和常见问题解决。通过这些配置,你可以提升网站的安全性,确保数据传输的机密性和完整性。在接下来的教程中,我们将探讨 Nginx 的性能优化,敬请期待!

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值