# HTTPS 与 SSL 证书

URL: https://caijiao.org/nginx/https-ssl
Source: docs/nginx/https-ssl.md
Description: 本节介绍 Nginx HTTPS 配置及 SSL 证书管理，包括证书生成、配置方法、TLS 协议设置及安全优化，确保网站传输安全和数据加密。

HTTPS 可以为网站提供加密传输，防止数据被窃取或篡改。Nginx 支持多种 SSL 证书配置方式。

## 一、生成自签名证书

```bash
openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 \
    -keyout /etc/nginx/ssl/nginx.key \
    -out /etc/nginx/ssl/nginx.crt
````

* **nginx.key**：私钥
* **nginx.crt**：证书文件

> 生产环境建议使用受信任的 CA 证书，如 Let’s Encrypt。

## 二、Nginx HTTPS 配置示例

```nginx
server {
    listen 443 ssl;
    server_name 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 HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    root /var/www/html;
    index index.html index.php;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}
```

## 三、HTTP 跳转到 HTTPS

```nginx
server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}
```

* **301**：永久重定向，保证用户访问 HTTPS
* 可结合 HSTS 强制浏览器仅使用 HTTPS

## 四、安全优化建议

1. 禁用不安全协议（如 SSLv2/SSLv3、TLS1.0）
2. 使用强加密套件
3. 定期更新证书，避免过期
4. 开启 HSTS 和 OCSP Stapling，提高安全性与性能

---

通过配置 HTTPS 与 SSL 证书，Nginx 可以为网站提供安全加密传输，保障用户数据和访问安全。
