Nginx 配置 HTTPS 及证书更新 – wiki基地

Nginx 配置 HTTPS 及证书更新详解

HTTPS 如今已成为网站标配,它通过 TLS/SSL 协议加密客户端与服务器之间的通信,保障数据传输安全,提升用户信任度,并有利于 SEO。本文将深入探讨如何使用 Nginx 配置 HTTPS,以及如何进行证书更新,包括手动更新和自动化更新。

一、 获取 SSL/TLS 证书

在配置 HTTPS 之前,首先需要获取 SSL/TLS 证书。证书由受信任的证书颁发机构 (CA) 签发,用于验证网站的身份。获取证书的方式主要有以下几种:

  • Let’s Encrypt: Let’s Encrypt 是一个免费、自动化、开放的证书颁发机构,它简化了获取和更新证书的流程。推荐使用 Certbot 工具进行自动化申请和更新。
  • 商业 CA: 例如 Comodo、DigiCert、GlobalSign 等,提供各种类型的 SSL/TLS 证书,包括域名验证 (DV) 证书、组织验证 (OV) 证书和扩展验证 (EV) 证书。商业证书通常提供更高级别的安全性和信任度,以及更完善的技术支持。
  • 自签名证书: 可以自行生成自签名证书,但浏览器会将其标记为不安全,不推荐用于生产环境。主要用于测试和内部网络。

二、 Nginx 配置 HTTPS

获取证书后,需要在 Nginx 配置文件中进行相应的配置,启用 HTTPS。以下是配置示例:

“`nginx
server {
listen 443 ssl;
server_name example.com www.example.com;

ssl_certificate /path/to/your/certificate.crt;
ssl_certificate_key /path/to/your/private.key;

# 强制 HTTPS
return 301 https://$server_name$request_uri;

#  优化 SSL/TLS 配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "no-referrer-when-downgrade";

# 其他配置...

location / {
    # 应用的具体配置
}

}

server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
“`

配置说明:

  • listen 443 ssl;: 监听 443 端口,启用 SSL。
  • server_name: 指定域名。
  • ssl_certificate: 指定证书文件路径。
  • ssl_certificate_key: 指定私钥文件路径。
  • ssl_protocols: 指定支持的 TLS 协议版本。
  • ssl_ciphers: 指定支持的加密套件。
  • ssl_prefer_server_ciphers: 优先使用服务器的加密套件。
  • ssl_session_cache: 启用 SSL 会话缓存。
  • ssl_session_timeout: 设置 SSL 会话超时时间。
  • return 301 https://$server_name$request_uri;: 将 HTTP 请求重定向到 HTTPS。
  • 其他安全头部:增强安全性,例如 Strict-Transport-Security, X-Frame-Options 等。

三、 证书更新

SSL/TLS 证书的有效期通常为一年,到期前需要及时更新,否则会导致网站无法访问。更新证书的方式主要有手动更新和自动化更新。

3.1 手动更新:

  1. 从 CA 重新申请证书,获取新的证书文件和私钥文件。
  2. 将新的证书文件和私钥文件替换 Nginx 配置文件中的旧文件。
  3. 重新加载 Nginx 配置: nginx -s reload

3.2 自动化更新 (使用 Certbot):

Certbot 可以自动化申请和更新 Let’s Encrypt 证书,大大简化了证书管理的流程。

安装 Certbot:

“`bash

Ubuntu/Debian

sudo apt-get update
sudo apt-get install certbot

CentOS/RHEL

sudo yum install epel-release
sudo yum install certbot
“`

获取并安装证书:

bash
sudo certbot --nginx -d example.com -d www.example.com

Certbot 会自动检测 Nginx 配置,并修改配置文件以启用 HTTPS。

自动更新证书:

bash
sudo certbot renew

Certbot 会定期检查证书是否即将过期,并在需要时自动更新证书。建议配置定时任务,例如每天执行一次 certbot renew 命令。

创建一个 cron job 进行自动更新:

bash
sudo crontab -e

添加以下行,每天凌晨 2 点检查并更新证书:

0 2 * * * certbot renew --quiet && nginx -s reload

四、 其他注意事项

  • Diffie-Hellman 参数: 为了增强安全性,可以生成 Diffie-Hellman 参数:

bash
openssl dhparam -out /path/to/dhparam.pem 2048

然后在 Nginx 配置文件中添加:

nginx
ssl_dhparam /path/to/dhparam.pem;

  • OCSP Stapling: OCSP Stapling 可以提高 HTTPS 性能,避免客户端每次访问都进行 OCSP 查询。

nginx
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

  • HSTS Preloading: 将你的域名提交到 HSTS Preload 列表,可以强制浏览器始终使用 HTTPS 访问你的网站.

五、 总结

配置 HTTPS 并定期更新证书对于网站安全至关重要。使用 Let’s Encrypt 和 Certbot 可以简化证书管理流程,实现自动化更新。 通过合理的 Nginx 配置,可以进一步优化 HTTPS 性能和安全性,提升用户体验。 记住定期检查你的 Nginx 配置和证书有效期,确保你的网站始终保持安全可靠。 希望本文能帮助你更好地理解 Nginx HTTPS 配置和证书更新,并将其应用到实际操作中。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部