如果用户部署SSL证书,对新手来说容易踩坑,比如证书装上了但网站打不开,或者提示“不安全”。下面这份清单帮你避开 90% 的常见问题,按下面顺序检查即可解决问题。
1. 确认服务器与 IP 地址(基础环境)
固定公网 IP:服务器必须有固定的公网 IP(或可解析的域名),不能是 `127.0.0.1` 或动态 IP。
端口开放:确保 **80 端口**(HTTP 验证用)和 443 端口(HTTPS 最终端口)在防火墙/安全组中已放行。很多新手在云服务器控制台只开了 80,忘了开 443。
时间同步:服务器系统时间与真实时间误差 < 5 分钟。时间偏差会导致证书被判断为“无效”。用 `date` 命令检查,不准就安装 NTP 同步。
2. 确保域名解析正确且可控
A 记录已指向服务器:用 `ping 你的域名` 或 `nslookup 你的域名` 检查,返回的 IP 必须是你服务器的公网 IP。
不要用 CNAME 指向别的域名:证书申请通常需要验证你对域名的控制权,CNAME 可能干扰验证流程。
域名未过期:去 whois 查询,过期域名无法申请任何收费/免费证书。
3. 确认服务器软件与模块支持
Web 服务器版本:
Nginx 需 ≥ 1.9.5(支持 HTTP/2,提升 HTTPS 性能)
Apache 需 ≥ 2.2.15(且编译了 mod_ssl 模块)
OpenSSL 版本:建议 ≥ 1.1.1(支持 TLS 1.3,更安全更快)。用 `openssl version` 查看。
禁用冲突模块:如果启用了 `mod_gnutls`(Apache)或第三方加密库,请先禁用或测试兼容性。
4. 准备证书文件和私钥
获取完整证书链:你会得到两个文件:`证书文件(.crt/.pem)` 和 `私钥文件(.key)`。必须同时有两者。
检查私钥匹配:用以下命令比对证书和私钥的 MD5 值是否一致:
bash
openssl x509 -noout -modulus -in 你的证书.crt | openssl md5
openssl rsa -noout -modulus -in 你的私钥.key | openssl md5
输出相同才能配对使用。
中间证书不能少:只放域名证书会报“证书链不完整”。一般需要把域名证书和中间证书合并成一个 `fullchain.crt`(域名证书在上,中间证书在下)。
5. 部署前备份与回滚方案
备份当前配置文件:如 `nginx.conf`、`httpd.conf`、`.htaccess` 等。
备份原 HTTP 站点文件:防止因权限或路径问题导致网站无法访问。
准备快速回滚命令:写一行注释掉的还原命令,比如:
bash
如果出错,执行:cp /backup/nginx.conf.bak /etc/nginx/nginx.conf && systemctl restart nginx
测试环境先验证:如果条件允许,在相同配置的测试服务器上先部署一遍。
补充:新手最易忽略的 3 个“坑”
混合内容(Mixed Content):部署完SSL证书后,网页里如果还有 `http://` 开头的图片、JS、CSS,浏览器地址栏会显示“不安全”。解决方法是全局替换成 `https://` 或使用 `//` 相对协议。
301 重定向循环:设置 HTTP 跳转 HTTPS 时,如果用错了条件(例如在已经 HTTPS 的请求上再次强制跳转),会导致循环。标准写法:只在 `$scheme = http` 时重定向。
OCSP 装订未开启:这不是必须的,但不开启可能导致某些浏览器首次访问时验证稍慢。Nginx 中可添加 `ssl_stapling on;` 和 `ssl_stapling_verify on;`。
快速自查清单(打印用)
- 80、443 端口安全组已放行
- 服务器时间误差 < 5 分钟
- 域名 A 记录指向本机 IP
- Nginx/Apache 版本满足最低要求
- 证书私钥 MD5 匹配
- 已合并中间证书
- 配置文件已备份
- 已准备回滚命令
按以上检查完毕,你就可以放心执行部署命令了。如果过程中遇到具体错误提示,可以发给我帮你分析。