一、先弄清手里有哪些文件
签发完成之后,通常会得到几份文件,认清各自用途是配置的前提。第一份是私钥,留在服务器上,绝不外传,一旦泄露整张证书的安全价值荡然无存。第二份是服务器证书,也叫叶子证书,是颁发给你的具体主机名的证书。第三份是中间证书,由颁发机构的中间层级签发,用来把你的证书与根证书连接起来。有些文件包里还有根证书,通常不需要部署在服务端。
三者的关系是一条链:根证书信任中间证书,中间证书信任你的服务器证书。客户端校验时,从你的证书出发,沿着这条链一路向上,直到找到一个自己信任的根。链上缺任何一环,校验就走不到终点。
二、Nginx 上的配置要点
第一步,安放文件。在服务器上准备一个专门目录存放证书与私钥,比如把服务器证书与中间证书合并后的链文件、以及私钥文件放在同一处,目录权限收紧,私钥只对必要账户可读。私钥的权限设置是安全底线,配置完成后应确认除必要账户外无人可读。
第二步,准备链文件。这是最容易出错的一步:需要把服务器证书与中间证书按顺序合并成一个文件——服务器证书在前,中间证书在后。顺序颠倒会导致部分客户端解析异常。合并时两份文件内容各自完整,不要漏掉首尾行,也不要在中间插入空行。
第三步,编写服务配置。在站点配置中开启加密监听,指定监听端口与加密开关,然后把链文件路径与私钥路径分别填入对应配置项。除了证书相关的两项,还有几项值得一并设置:协议版本只保留较新的两个版本,关闭已知存在隐患的旧版本;加密套件优先选择具备前向保密能力的组合;开启会话复用以减少重复握手的开销;把明文访问跳转到加密地址,保证访客无论怎么进来最终都走加密通道。
第四步,检查与生效。修改完成后先执行配置语法检查,确认无误再平滑重载,让新配置在不中断现有连接的情况下生效。重载后应当实际访问一次,确认证书生效。
三、证书链不完整是什么表现
链不完整的典型现象是"有的地方正常、有的地方报错"。桌面浏览器打开一切正常,地址栏显示锁形图标;可在移动端、命令行工具、接口调用或小程序里访问,却提示证书不受信任或直接失败。
造成这种差异的原因是补全机制不同。浏览器为了兼容大量历史站点,具备一定的链补全能力:当服务器没有提供完整的中间证书时,它会尝试通过其他途径补齐缺失环节,多数情况下能自救成功。而其他客户端严格按服务器返回的链来校验,缺一环就是缺一环,拒绝连接。
因此,"浏览器能打开"绝不能作为配置是否正确的判断标准。这是部署环节最常见的认知偏差,也是很多问题被拖到上线后才暴露的原因。
四、链不完整的排查步骤
第一步,看服务器实际返回了几层证书。用检测工具或命令行查看握手时服务器推送的证书链,正常应当包含服务器证书与中间证书两层,有时还有更多层。如果只有一层,问题就确认了。
第二步,核对中间证书是否正确。不是任意一个中间证书都能用,必须是签发你这张证书的那一层。常见错误是从文件包里随手取了一个,或者用了另一个批次的中间证书。核对方法是看中间证书的名称与颁发关系是否与你的证书匹配。
第三步,核对合并顺序。服务器证书在前、中间证书在后,顺序错了部分客户端会解析失败。重新按顺序合并一次即可。
第四步,确认私钥与证书匹配。若两者不是同一对,服务启动时通常就会报错或无法正常握手。用工具比对两者的指纹信息即可确认。
第五步,检查是否误把根证书放进链里。根证书放进链里多数情况下不影响校验,但会增加握手传输的数据量,属于不必要的负担,去掉即可。
第六步,清理缓存再测。客户端与中间网络设备可能缓存了旧的链信息,修复后应换一个未被缓存的客户端或清理缓存后再验证,否则容易误判为"修了没用"。
五、续期之后的注意事项
零费用证书有效期通常较短,普遍在三个月左右,因此自动续期是必选项而不是可选项。续期时要注意三件事。其一,续期生成的是新的证书文件,链文件需要一并更新——只更新了服务器证书而忘记更新中间证书,同样会造成链不完整。其二,续期后必须触发配置重载,否则服务进程用的还是内存中的旧证书,表面上续期成功,实际证书仍在倒计时。其三,把"续期加重载"作为一个完整动作来配置,让系统在证书更新后自动完成重载,人工只负责定期检查任务是否正常执行。
此外,续期任务本身也需要被监控。证书悄然过期、站点加密失效,往往是因为续期任务早就失败了却无人察觉。为续期任务设置执行结果通知,是性价比很高的一个习惯。
六、常见错误清单
配置环节的高频错误有以下几种,逐条对照可以省下不少排查时间。只配置了服务器证书、没有合并中间证书,这是第一位;中间证书顺序颠倒;用了不匹配的中间证书;证书文件与私钥不是一对;配置文件里路径写错,但服务仍在用旧进程运行,造成"改了没生效"的错觉;续期后忘记重载;端口未开放或被安全策略拦截,导致握手根本没建立起来;明文访问未做跳转,访客仍可能走未加密通道。
把这些做成一份自查清单,每次部署或续期后逐项打勾,配置环节的稳定性会明显提升。
结语
Nginx 上部署零费用证书,关键在两处:一是把服务器证书与中间证书按顺序合并成完整的链文件,并让私钥与配置权限保持收紧;二是理解"浏览器正常"不等于"配置正确",用严格校验的客户端去验证真实结果。再辅以自动续期加重载的完整动作与一份固定的自查清单,证书部署这件事就能从偶发故障源变成按部就班的例行操作。