Docker部署Superset配置Nginx反向代理HTTPS报PEM_read_bio_PrivateKey错误求助
PEM_read_bio_PrivateKey() 报错排查与解决方案
第一步:校验私钥本身有效性与格式
- 首先执行OpenSSL命令验证私钥完整性:
openssl rsa -in <你的私钥文件路径> -check -noout
输出RSA key ok代表私钥本身无损坏,否则说明私钥文件损坏,需要找CA重新下发。 - 检查私钥是否设置了密码保护:如果私钥有加密密码,Docker容器内运行的Nginx无交互输入密码的入口,会直接验证失败。移除私钥密码命令如下:
openssl rsa -in <加密的私钥路径> -out <解密后的无密码私钥路径> - 检查文件换行符格式:如果私钥是在Windows系统下生成/编辑过,换行符为CRLF格式会导致Linux环境的Nginx识别失败,执行转换命令:
dos2unix <你的私钥文件路径>
第二步:校验私钥与证书的匹配性
确认当前使用的私钥和HTTPS证书是配对生成的,分别计算两者的公钥哈希对比:
- 证书公钥哈希命令:
openssl x509 -in <你的证书文件路径> -pubkey -noout | openssl md5 - 私钥公钥哈希命令:
openssl rsa -in <你的私钥文件路径> -pubkey -noout | openssl md5
两个命令输出的哈希值必须完全一致,否则说明证书与私钥不匹配,需要替换为配对的文件。
第三步:检查Docker容器内私钥的挂载与权限
- 确认Nginx配置中
ssl_certificate_key字段指向的路径,与Docker挂载的私钥路径完全一致,没有拼写错误、后缀名错误。 - 私钥文件权限必须为600,所有者为root或Nginx运行用户,过高权限会导致Nginx拒绝读取。进入容器检查权限命令:
docker exec -it <你的Nginx容器名/ID> ls -l <容器内私钥存放路径>
权限不符的话执行修正命令:docker exec -it <你的Nginx容器名/ID> chmod 600 <容器内私钥存放路径> && chown root:root <容器内私钥存放路径>
验证修复结果
修复完成后执行配置校验命令:docker exec -it <你的Nginx容器名/ID> nginx -t
输出test is successful后重载Nginx配置即可:docker exec -it <你的Nginx容器名/ID> nginx -s reload
内容的提问来源于stack exchange,提问作者techman85
相关产品推荐
相关产品推荐

