续期后只替换了 fullchain.pem,nginx -t 报 SSL_CTX_use_PrivateKey() failed,后面跟着 X509_check_private_key:key values mismatch,服务没能起来。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,证书和私钥是一对,公钥模数必须对得上,只换其中一个就会模数不匹配。续期脚本只覆盖了证书文件,私钥还留着上一版的。

「私钥证书不匹配」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。报错里带路径的,先去看那个路径在不在、权限对不对。

openssl x509 -in cert.pem -noout -modulus | openssl md5
openssl rsa -in cert.key -noout -modulus | openssl md5

同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

具体做法是,分别算两个文件的模数,比对结果是否一致;从本次签发的目录里把证书和私钥成对取出,别混用历史文件;改完先 nginx -t,通过再 reload。

最后用这个标准收尾,两条命令输出的哈希一致,nginx -t 通过,reload 后站点恢复。

作者 9823189