Nginx 1.24 配置 HTTPS 实战3 种 SSL 证书申请与自动化续期方案在当今互联网环境中HTTPS 已成为网站安全的基础配置。作为运维工程师或全栈开发者掌握 SSL/TLS 证书的申请、配置和管理技能至关重要。本文将深入探讨三种主流 SSL 证书方案Lets Encrypt 免费证书、商业 CA 证书和自签名证书的适用场景与配置细节并提供可直接复用的 Nginx 配置模板和自动化续期方案。1. HTTPS 基础与证书类型选择HTTPS 通过 SSL/TLS 协议为 HTTP 通信提供加密和身份验证其核心组件是数字证书。在选择证书方案前我们需要了解三种主要证书类型的特点证书类型验证级别有效期浏览器信任适用场景典型成本自签名证书无自定义需手动信任内部测试、开发环境免费Lets Encrypt域名验证90天全信任个人博客、小型网站免费商业 CA 证书组织验证1-2年全信任企业官网、电商平台$50-$1000/年自签名证书适合内部开发和测试环境但需要手动导入根证书到客户端信任库。其生成命令如下# 生成 RSA 私钥 openssl genrsa -out self-signed.key 2048 # 创建 CSR (证书签名请求) openssl req -new -key self-signed.key -out self-signed.csr # 生成自签名证书 openssl x509 -req -days 365 -in self-signed.csr -signkey self-signed.key -out self-signed.crtLets Encrypt是目前最流行的免费证书方案通过 ACME 协议自动化签发流程。其优势在于被所有主流浏览器信任支持通配符证书需 DNS 验证自动化签发和续期商业 CA 证书如 DigiCert、GeoTrust提供更长的有效期和保险保障适合对 SLA 要求高的商业场景。2. Nginx 1.24 基础 HTTPS 配置无论使用哪种证书Nginx 的基础 HTTPS 配置结构相似。以下是通用配置模板server { listen 443 ssl http2; server_name example.com; # 证书路径配置 ssl_certificate /path/to/certificate.crt; ssl_certificate_key /path/to/private.key; # SSL 协议配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; # 加密套件配置 (TLS 1.2) ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256...; # 会话缓存优化 ssl_session_cache shared:SSL:10m; ssl_session_timeout 1d; # OCSP 装订提升性能 ssl_stapling on; ssl_stapling_verify on; # HSTS 增强安全 add_header Strict-Transport-Security max-age63072000; includeSubDomains; preload; # 其他站点配置... location / { root /var/www/html; index index.html; } }关键配置说明ssl_protocols应禁用不安全的 TLS 1.0/1.1ssl_ciphers需精心配置以平衡安全与兼容性OCSP 装订可减少客户端验证延迟HSTS 头强制浏览器使用 HTTPS 连接3. Lets Encrypt 证书自动化方案Lets Encrypt 证书的有效期仅 90 天必须建立自动化续期流程。官方推荐的 certbot 工具可简化这一过程。3.1 证书申请与安装# 安装 certbot sudo apt install certbot python3-certbot-nginx # 获取证书 (Nginx 插件模式) sudo certbot --nginx -d example.com -d www.example.com # 仅获取证书 (手动配置模式) sudo certbot certonly --webroot -w /var/www/html -d example.comcertbot 会自动修改 Nginx 配置加载新证书。手动模式获取证书后需在 Nginx 中配置证书路径ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;3.2 自动化续期配置创建续期脚本/etc/letsencrypt/renewal-hooks/post/nginx-reload.sh#!/bin/bash nginx -t systemctl reload nginx然后设置 cron 任务自动续期# 每天检查续期 (证书到期前30天内才会实际续期) 0 0 * * * /usr/bin/certbot renew --quiet --post-hook /bin/bash /etc/letsencrypt/renewal-hooks/post/nginx-reload.sh3.3 通配符证书配置通配符证书需使用 DNS 验证方式sudo certbot certonly \ --manual \ --preferred-challengesdns \ -d *.example.com \ --server https://acme-v02.api.letsencrypt.org/directory执行命令后certbot 会提示添加 DNS TXT 记录验证域名所有权。4. 商业证书高级配置商业证书通常提供更长的有效期和额外的验证功能。以 DigiCert 为例配置时需注意证书链完整性商业 CA 通常需要中间证书ssl_certificate /path/to/your_domain.crt; ssl_certificate_key /path/to/your_private.key; ssl_trusted_certificate /path/to/digicert_ca.crt;OCSP 验证优化ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 1.1.1.1 valid300s; resolver_timeout 5s;多域名 SAN 证书商业证书常支持多个 Subject Alternative Namesssl_certificate /path/to/multi_domain.crt; ssl_certificate_key /path/to/multi_domain.key;5. 混合方案与性能优化在实际生产环境中可以组合使用不同证书方案边缘节点使用商业证书内部服务间通信使用 Lets Encrypt 证书开发环境使用自签名证书性能优化建议会话恢复减少 TLS 握手开销ssl_session_cache shared:SSL:50m; ssl_session_timeout 1d; ssl_session_tickets on;TLS 1.3 优先提供更好的性能和安全性ssl_protocols TLSv1.3 TLSv1.2; ssl_ciphers TLS13AESGCMAES128:TLS13AESGCMAES256...;证书热更新避免服务中断# 在证书续期后发送 USR1 信号给 Nginx kill -USR1 $(cat /var/run/nginx.pid)6. 常见问题排查当 HTTPS 配置出现问题时可通过以下方法诊断证书链验证openssl verify -CAfile /path/to/ca_bundle.crt your_domain.crt连接测试openssl s_client -connect example.com:443 -servername example.com -showcerts协议支持检查nmap --script ssl-enum-ciphers -p 443 example.comNginx 配置测试nginx -t对于混合内容警告确保所有资源都通过 HTTPS 加载# 强制重定向 HTTP 到 HTTPS server { listen 80; server_name example.com; return 301 https://$host$request_uri; }7. 安全加固与最佳实践为确保 HTTPS 配置的安全性建议实施以下措施禁用弱加密算法ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384...; ssl_ecdh_curve secp384r1;启用证书透明度add_header Expect-CT enforce, max-age86400;内容安全策略add_header Content-Security-Policy default-src self; script-src self unsafe-inline...;定期轮换密钥即使证书未到期也应每年更新私钥# 生成新私钥 openssl ecparam -genkey -name secp384r1 -out new.key # 使用新密钥重新申请证书 certbot certonly --cert-name example.com --key-path /path/to/new.key监控证书过期设置监控检查证书有效期echo | openssl s_client -connect example.com:443 2/dev/null | \ openssl x509 -noout -dates
Nginx 1.24 配置 HTTPS 实战:3 种 SSL 证书申请与自动化续期方案
发布时间:2026/7/11 6:18:41
Nginx 1.24 配置 HTTPS 实战3 种 SSL 证书申请与自动化续期方案在当今互联网环境中HTTPS 已成为网站安全的基础配置。作为运维工程师或全栈开发者掌握 SSL/TLS 证书的申请、配置和管理技能至关重要。本文将深入探讨三种主流 SSL 证书方案Lets Encrypt 免费证书、商业 CA 证书和自签名证书的适用场景与配置细节并提供可直接复用的 Nginx 配置模板和自动化续期方案。1. HTTPS 基础与证书类型选择HTTPS 通过 SSL/TLS 协议为 HTTP 通信提供加密和身份验证其核心组件是数字证书。在选择证书方案前我们需要了解三种主要证书类型的特点证书类型验证级别有效期浏览器信任适用场景典型成本自签名证书无自定义需手动信任内部测试、开发环境免费Lets Encrypt域名验证90天全信任个人博客、小型网站免费商业 CA 证书组织验证1-2年全信任企业官网、电商平台$50-$1000/年自签名证书适合内部开发和测试环境但需要手动导入根证书到客户端信任库。其生成命令如下# 生成 RSA 私钥 openssl genrsa -out self-signed.key 2048 # 创建 CSR (证书签名请求) openssl req -new -key self-signed.key -out self-signed.csr # 生成自签名证书 openssl x509 -req -days 365 -in self-signed.csr -signkey self-signed.key -out self-signed.crtLets Encrypt是目前最流行的免费证书方案通过 ACME 协议自动化签发流程。其优势在于被所有主流浏览器信任支持通配符证书需 DNS 验证自动化签发和续期商业 CA 证书如 DigiCert、GeoTrust提供更长的有效期和保险保障适合对 SLA 要求高的商业场景。2. Nginx 1.24 基础 HTTPS 配置无论使用哪种证书Nginx 的基础 HTTPS 配置结构相似。以下是通用配置模板server { listen 443 ssl http2; server_name example.com; # 证书路径配置 ssl_certificate /path/to/certificate.crt; ssl_certificate_key /path/to/private.key; # SSL 协议配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; # 加密套件配置 (TLS 1.2) ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256...; # 会话缓存优化 ssl_session_cache shared:SSL:10m; ssl_session_timeout 1d; # OCSP 装订提升性能 ssl_stapling on; ssl_stapling_verify on; # HSTS 增强安全 add_header Strict-Transport-Security max-age63072000; includeSubDomains; preload; # 其他站点配置... location / { root /var/www/html; index index.html; } }关键配置说明ssl_protocols应禁用不安全的 TLS 1.0/1.1ssl_ciphers需精心配置以平衡安全与兼容性OCSP 装订可减少客户端验证延迟HSTS 头强制浏览器使用 HTTPS 连接3. Lets Encrypt 证书自动化方案Lets Encrypt 证书的有效期仅 90 天必须建立自动化续期流程。官方推荐的 certbot 工具可简化这一过程。3.1 证书申请与安装# 安装 certbot sudo apt install certbot python3-certbot-nginx # 获取证书 (Nginx 插件模式) sudo certbot --nginx -d example.com -d www.example.com # 仅获取证书 (手动配置模式) sudo certbot certonly --webroot -w /var/www/html -d example.comcertbot 会自动修改 Nginx 配置加载新证书。手动模式获取证书后需在 Nginx 中配置证书路径ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;3.2 自动化续期配置创建续期脚本/etc/letsencrypt/renewal-hooks/post/nginx-reload.sh#!/bin/bash nginx -t systemctl reload nginx然后设置 cron 任务自动续期# 每天检查续期 (证书到期前30天内才会实际续期) 0 0 * * * /usr/bin/certbot renew --quiet --post-hook /bin/bash /etc/letsencrypt/renewal-hooks/post/nginx-reload.sh3.3 通配符证书配置通配符证书需使用 DNS 验证方式sudo certbot certonly \ --manual \ --preferred-challengesdns \ -d *.example.com \ --server https://acme-v02.api.letsencrypt.org/directory执行命令后certbot 会提示添加 DNS TXT 记录验证域名所有权。4. 商业证书高级配置商业证书通常提供更长的有效期和额外的验证功能。以 DigiCert 为例配置时需注意证书链完整性商业 CA 通常需要中间证书ssl_certificate /path/to/your_domain.crt; ssl_certificate_key /path/to/your_private.key; ssl_trusted_certificate /path/to/digicert_ca.crt;OCSP 验证优化ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 1.1.1.1 valid300s; resolver_timeout 5s;多域名 SAN 证书商业证书常支持多个 Subject Alternative Namesssl_certificate /path/to/multi_domain.crt; ssl_certificate_key /path/to/multi_domain.key;5. 混合方案与性能优化在实际生产环境中可以组合使用不同证书方案边缘节点使用商业证书内部服务间通信使用 Lets Encrypt 证书开发环境使用自签名证书性能优化建议会话恢复减少 TLS 握手开销ssl_session_cache shared:SSL:50m; ssl_session_timeout 1d; ssl_session_tickets on;TLS 1.3 优先提供更好的性能和安全性ssl_protocols TLSv1.3 TLSv1.2; ssl_ciphers TLS13AESGCMAES128:TLS13AESGCMAES256...;证书热更新避免服务中断# 在证书续期后发送 USR1 信号给 Nginx kill -USR1 $(cat /var/run/nginx.pid)6. 常见问题排查当 HTTPS 配置出现问题时可通过以下方法诊断证书链验证openssl verify -CAfile /path/to/ca_bundle.crt your_domain.crt连接测试openssl s_client -connect example.com:443 -servername example.com -showcerts协议支持检查nmap --script ssl-enum-ciphers -p 443 example.comNginx 配置测试nginx -t对于混合内容警告确保所有资源都通过 HTTPS 加载# 强制重定向 HTTP 到 HTTPS server { listen 80; server_name example.com; return 301 https://$host$request_uri; }7. 安全加固与最佳实践为确保 HTTPS 配置的安全性建议实施以下措施禁用弱加密算法ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384...; ssl_ecdh_curve secp384r1;启用证书透明度add_header Expect-CT enforce, max-age86400;内容安全策略add_header Content-Security-Policy default-src self; script-src self unsafe-inline...;定期轮换密钥即使证书未到期也应每年更新私钥# 生成新私钥 openssl ecparam -genkey -name secp384r1 -out new.key # 使用新密钥重新申请证书 certbot certonly --cert-name example.com --key-path /path/to/new.key监控证书过期设置监控检查证书有效期echo | openssl s_client -connect example.com:443 2/dev/null | \ openssl x509 -noout -dates