当前位置:   article > 正文

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

nginx 配置 tls rst

【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
  • 3
  • 4
  • 5

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;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这个配置中:

  • 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;
    ...
}
  • 1
  • 2
  • 3
  • 4

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;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

2.3 启用 OCSP Stapling

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

server {
    ...
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/nginx/ssl/chain.pem;  # CA 证书链
    ...
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2.4 使用 Diffie-Hellman 参数

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

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

在 Nginx 配置中使用:

server {
    ...
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;
    ...
}
  • 1
  • 2
  • 3
  • 4
  • 5

3. 重定向 HTTP 到 HTTPS

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

server {
    listen 80;
    server_name example.com;

    location / {
        return 301 https://$server_name$request_uri;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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
  • 1
  • 2
5.1.2 生成和安装证书

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

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

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

sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer
  • 1
  • 2

5.2 手动更新证书

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

sudo systemctl reload nginx
  • 1

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;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

8. 总结

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

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号