文档中心
NginxHTTPS璇佷功杩囨湡鎬庝箞鍔烇紵5姝ユ暀浣犲揩閫熶慨澶嶅苟閬垮厤涓氬姟涓柇
时间 : 2025-09-27 16:26:01浏览量 : 2

关键词:Nginx HTTPS 证书过期
当你的网站突然变成"不安全"警告,用户访问时浏览器弹出红色危险提示,很可能是因为HTTPS证书过期了。作为运维人员,半夜被报警短信吵醒处理证书问题简直是噩梦。本文将以Nginx为例,用最直白的语言教你如何快速解决证书过期问题,并分享3个防患未未然的实用技巧。
一、为什么证书过期会引发灾难?
HTTPS证书就像网站的"身份证",都有明确的有效期(通常1年)。一旦过期:
- 用户端:Chrome会显示"您的连接不是私密连接",Safari会提示"此网站证书已过期",90%的用户会选择直接关闭页面
- 业务影响:电商网站支付失败、API接口调用被拒、APP内H5页面白屏
- 典型案例:2025年微软Teams全球宕机8小时,只因一个SSL证书过期
二、5分钟紧急修复指南(附实操命令)
场景1:已有新证书的替换流程
```bash
1. 备份旧证书(重要!)
cp /etc/nginx/ssl/example.com.crt /etc/nginx/ssl/example.com.crt.bak
cp /etc/nginx/ssl/example.com.key /etc/nginx/ssl/example.com.key.bak
2. 上传新证书文件
scp new_cert.crt root@server:/etc/nginx/ssl/
scp new_cert.key root@server:/etc/nginx/ssl/
3. 检查Nginx配置语法
nginx -t
4. 热重载配置(不中断服务)
systemctl reload nginx
5. 验证新证书
openssl x509 -in /etc/nginx/ssl/new_cert.crt -noout -dates
curl -Iv https://example.com
```
场景2:临时应急方案(测试环境适用)
如果新证书还没准备好,可以临时生成自签名证书:
openssl req -x509 -nodes -days 30 -newkey rsa:2048 \
-keyout /tmp/temp.key -out /tmp/temp.crt \
-subj "/CN=example.com"
三、根治问题的3个预防措施
1. 自动化监控方案
推荐使用Certbot+Let's Encrypt免费证书,搭配自动续期:
Ubuntu安装示例
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com --register-unsafely-without-email
自动续期测试
certbot renew --dry-run
2. Prometheus+Alertmanager监控方案
配置黑盒监控exporter检测证书有效期:
```yaml
prometheus.yml片段配置
scrape_configs:
- job_name: 'ssl_expiry'
metrics_path: '/probe'
params:
module: [http_ssl_cert]
static_configs:
- targets:
- example.com:443
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox-exporter:9115
3. CI/CD流程强制检查
在部署流水线中加入证书检查步骤(以GitLab CI为例):
check_ssl:
image: alpine/openssl
script:
- echo | openssl s_client -connect example.com:443 | openssl x509 -noout -dates
- end_date=$(echo | openssl s_client... | grep notAfter)
Python计算剩余天数逻辑...
四、高级技巧:多节点批量更新
当你有100+服务器时,可以用Ansible批量操作:
- name: Deploy SSL certs
hosts: webservers
tasks:
- name: Copy cert files
copy:
src: "/local/path/new_cert.crt"
dest: "/etc/nginx/ssl/"
...其他任务...
handlers:
restart nginx:
service: name=nginx state=reloaded
五、常见QA解答
Q:为什么reload后浏览器还是显示旧证书?
A:可能是CDN缓存(如Cloudflare)或本地DNS缓存,尝试:
```bash
curl https://example.com --resolve example.com:443:[真实IP]
Q:ECC和RSA证书有什么区别?
A:好比电动车和燃油车——ECC密钥更短(256bit vs RSA2048)但安全性相当,推荐新系统使用ECC。
Q:单域名、泛域名怎么选?
A:
- blog.example.com →单域名证书记住这个原则:"一张通票走天下"用泛域名(*.example.com),"精打细算"用单域名。
****:HTTPS证书记得定期检查就像给汽车做年检。建议收藏本文命令集,建立监控+自动化续期双保险体系。现在就去执行`openssl x509...`检查你的服务器吧!
TAG:nginx https 证书过期,nginx证书申请,nginx换证书,nginx ssl证书,nginx 证书配置