Nginx证书链文件含BOM、空行、CRLF或非法字符会导致启动失败或仅发送部分证书,表现为浏览器报“证书不受信任”、openssl s_client只显示一块证书或报错SSL: error:0B080074;需用file、xxd、grep、dos2unix等命令检测并清除BOM、空行、CRLF及干扰内容,确保fullchain.pem严格由域名证书+中间证书按序拼接且无根证书、无空行、无BOM、仅LF换行。

证书链文件里混入多余空行、BOM头、Windows换行符或不可见字符,会导致 Nginx 启动失败或 TLS 握手时只发出了部分证书,表现为浏览器报“证书不受信任”、openssl s_client 只显示一块证书,甚至 Nginx 报错 SSL: error:0B080074。
检查文件是否含 BOM 或非 ASCII 字符
Linux 下的 OpenSSL 和 Nginx 无法正确解析带 UTF-8 BOM 的证书文件。用以下命令确认:
-
file fullchain.pem—— 正常应输出ASCII text;若显示UTF-8 Unicode (with BOM) text,说明有 BOM 头 -
xxd fullchain.pem | head -n 1—— 若开头是00000000: efbb bf2d 2d2d 2d2d 4245 4749 4e20 4345 ...-----BEGIN CE,前三个字节ef bb bf就是 BOM - 修复方法:
sed -i '1s/^\xEF\xBB\xBF//' fullchain.pem(删 BOM),或用iconv -f UTF-8 -t ASCII//TRANSLIT fullchain.pem > fullchain-fixed.pem
验证换行符和空行问题
证书块之间不能有空行,且必须用 Unix 换行符(LF),不能是 Windows 的 CRLF:
-
grep -n "^$" fullchain.pem—— 查找所有空行,若有输出,说明存在多余空行,需手动删除 -
file fullchain.pem若提示CRLF line terminators,说明用了 Windows 换行符 - 修复命令:
dos2unix fullchain.pem(如未安装,先yum install -y dos2unix或apt install -y dos2unix) - 也可用
tr -d '\r' < fullchain.pem > fullchain-fixed.pem清除回车符
确认 PEM 结构纯净无干扰内容
证书文件必须严格由 -----BEGIN CERTIFICATE----- 到 -----END CERTIFICATE----- 块组成,中间不能夹杂注释、私钥、空格或乱码:
-
head -n 5 fullchain.pem和tail -n 5 fullchain.pem看首尾是否为标准 PEM 头尾 -
grep -E "^(-----BEGIN|-----END|^[[:space:]]*$)" fullchain.pem | wc -l应等于证书块数 × 2;若结果偏大,说明混入了空行或非法行 -
openssl x509 -in fullchain.pem -noout -text 2>/dev/null || echo "解析失败"—— 若报错,说明文件结构异常(如缺头尾、含私钥、有乱码)
快速重生成干净的 fullchain.pem
最稳妥的做法是重新拼接,避开编辑器污染:
- 确保你有两个干净文件:
domain.crt(仅域名证书)、intermediate.crt(仅中间证书,不含根证书) - 执行:
cat domain.crt intermediate.crt | grep -v "^$" | sed '/^$/d' > fullchain.pem(自动过滤空行) - 再运行:
openssl crl2pkcs7 -nocrl -certfile fullchain.pem | openssl pkcs7 -print_certs -noout—— 正常会输出全部证书信息,且数量 ≥2


















