从面板复制证书粘贴进文件,nginx -t 直接报 PEM_read_bio_X509_AUX() failed,可文件打开看内容明明是对的。乍看像缓存或者权限的锅,追下去往往不是。

file /etc/nginx/cert/fullchain.pem
sed -i 's/\r$//' /etc/nginx/cert/fullchain.pem
openssl x509 -in /etc/nginx/cert/fullchain.pem -noout -subject

追下去是这么回事:复制时带进了全角空格、Windows 换行或者多余空行,PEM 解析器对首尾字符很敏感。BEGIN 和 END 那两行必须顶格。

「PEM 读取失败」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。报错里带路径的,先去看那个路径在不在、权限对不对。

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

具体做法是,用 file 和 cat -A 看一眼换行符和不可见字符,先把问题定位到具体行;重新从 CA 下载原始文件,别从聊天窗口或网页里复制;保存成 LF 换行,确认首行就是 -----BEGIN CERTIFICATE-----。

验收就看一点,openssl 能读出证书主题,nginx -t 返回 syntax is ok。

作者 9823189