HTTPS配好了还报错,证书到底哪里出了问题?
证书链到底是个什么链,为什么会断?访问HTTPS站点时,服务器返回的是一条链:站点证书、中间证书、根证书。浏览器沿链向上验证,任何一环签名验证失败、域名不匹配或证书过期,都会报证书错误。自签证书的问题就出在这——它的根不在浏览器的信任列表里,注定永远报警。所以配置时中间证书千万别漏传,链不完整是最典型的低级失误。排查链问题用openssl的客户端命令直连一次,返回信息里能看到实际下发的证书与链路,比浏览器提示直观得多;部署完再用在线检测工具跑一遍全链路评分,混合内容、协议支持这些隐藏问题一次暴露。
证书和私钥不匹配,怎么快速确认?换过证书或重新签发后连不上,先怀疑证书和私钥不是一对。验证有标准命令:分别取证书和私钥的模数各做一次MD5,两次输出完全一致才匹配,不一致就重新下载配对的证书文件,或直接重新签发。这个排查两分钟出结果,比反复重启服务有用得多。操作时注意私钥文件的权限,只给服务进程可读——泄露的私钥等于把网站钥匙插在门上。证书文件命名保持规律,域名加到期日,半年后一眼知道哪张该换。
配置文件里,位置放对了吗?Web服务器里SSL相关的指令要放在server块中,和location处于同一层级——放错了层级,配置影响的范围就完全不对。再检查ssl_certificate指向的证书文件路径和文件名是否精确,一个字符的偏差就会导致握手直接失败。这类错误在日志里都有明确提示,先看日志再动手。改完配置先做语法检查再重载服务,两条命令的事,能避免一次直接把线上服务打挂。
证书没错,为什么还是走不通HTTPS?服务器侧还有两处常见病灶:一是SSL/TLS协议没有正确启用,或老旧的服务器软件不支持新协议版本;二是用了CDN的场景,边缘节点同步证书有延迟,刚配置完部分地区报警属正常,等待或联系CDN支持即可。另外,SNI没有正确绑定域名时会报证书与主机名不匹配,用openssl的客户端命令带上servername参数连接一次,立刻能定位是哪一层的问题。协议版本建议明确指定支持的TLS范围,交给默认值容易在新老客户端之间顾此失彼。
小程序或客户端报「证书无效」,又是怎么回事?先查证书订单状态:同一域名存在多个证书订单、其中有的未完成签发时,就会出现这类报错——把未完成的订单清理掉,重新走一遍签发和部署,问题多半消失。最后顺手把HTTP自动跳转HTTPS配上,别让明文入口一直敞着,既安全,也保住搜索和收藏里旧链接的流量。多个证书订单并存时,逐个核对签发状态和绑定域名,老订单能删则删,环境干净,排查才有确定性。