Nginx更新SSL证书遇PEM_read_bio:bad end line错误求助
解决Nginx SSL私钥加载失败(bad end line)问题
核心排查方向
错误error:0906D066:PEM routines:PEM_read_bio:bad end line明确指向私钥文件的PEM格式存在语法问题,尤其是结尾行或密钥内容的格式错误,和证书匹配性无关,重点检查私钥文件本身即可。
具体修复步骤
检查私钥文件的格式细节
打开私钥文件/srv/www/website.yaabi.com/calletest/20242.yaabi.com.key,确保:-----BEGIN PRIVATE KEY-----单独占一行- 密钥内容按每行64字符分段(PKCS#8格式也需保证换行正确,不能全连在一起)
-----END PRIVATE KEY-----单独占一行,行尾无多余空格、制表符或特殊字符- 文件末尾保留一个空行(部分SSL库对此要求严格)
重新导出私钥,避免手动复制
若怀疑是复制粘贴导致的格式损坏,直接从证书生成工具重新导出私钥,不要手动编辑内容:# 以certbot为例,重新获取并导出私钥(适用于Let's Encrypt证书) certbot certonly --cert-name 20242.yaabi.com --key-type rsa # 直接复制生成的私钥到目标路径 cp /etc/letsencrypt/live/20242.yaabi.com/privkey.pem /srv/www/website.yaabi.com/calletest/20242.yaabi.com.key用OpenSSL验证私钥合法性
执行命令检查私钥是否有效:openssl rsa -in /srv/www/website.yaabi.com/calletest/20242.yaabi.com.key -check输出
RSA key ok说明格式正常;若报错,根据提示移除多余字符或修正换行。调整文件权限
确保Nginx进程能读取私钥文件:chmod 600 /srv/www/website.yaabi.com/calletest/20242.yaabi.com.key chown www-data:www-data /srv/www/website.yaabi.com/calletest/20242.yaabi.com.key测试配置后重启Nginx
修复后先验证配置,再重启服务:nginx -t systemctl reload nginx
常见坑点
- 手动复制私钥时,误将网页换行符转为空格,或遗漏部分字符
- 私钥文件被编辑器添加了UTF-8 BOM头(用
cat -A 文件名可查看是否有^@开头字符),用以下命令转换格式:dos2unix /srv/www/website.yaabi.com/calletest/20242.yaabi.com.key
内容的提问来源于stack exchange,提问作者user23330102
相关产品推荐
相关产品推荐

