Apache SSL配置报错:PEM lib错误排查求助
Apache SSL配置PEM lib错误排查求助
错误日志
[Fri Jan 12 10:17:12.215369 2024] [ssl:emerg] [pid 124345:tid 140299436099456] AH02562: Failed to configure certificate [domain name] :443:0 (with chain), check [file directory for my ssl bundle] [Fri Jan 12 10:17:12.215624 2024] [ssl:emerg] [pid 124345:tid 140299436099456] SSL Library Error: error:04800064:PEM routines::bad base64 decode [Fri Jan 12 10:17:12.215631 2024] [ssl:emerg] [pid 124345:tid 140299436099456] SSL Library Error: error:0A080009:SSL routines::PEM lib AH00016: Configuration Failed
关键信息
- 服务器环境:Ubuntu系统,Apache版本Apache/2.4.52
- 证书文件路径:
- SSLCertificateFile:
/etc/apache2/ssl/ssl-bundle.pem - SSLCertificateKeyFile:
/etc/apache2/ssl/data-miner.key
- SSLCertificateFile:
- 权限:已确认
www-data用户拥有读取权限 - 虚拟主机配置片段:
<VirtualHost *:80> ServerName [DOMAIN] ServerAdmin [ADMIN] # Redirect all HTTP traffic to HTTPS Redirect permanent / https://[DOMAIN]/ # ... Other HTTP-related settings ... </VirtualHost> <VirtualHost *:443> ServerName [DOMAIN] ServerAdmin [ADMIN] WSGIDaemonProcess dataMiner python-path=/var/www/dataMiner/venv/lib/python3.10/site-packages threads=5 WSGIScriptAlias / /var/www/dataMiner/scraperv2/website.wsgi <Directory /var/www/dataMiner> WSGIProcessGroup dataMiner WSGIApplicationGroup %{GLOBAL} Require all granted </Directory> # SSL Configuration SSLEngine on SSLCertificateFile /etc/apache2/ssl/ssl-bundle.pem SSLCertificateKeyFile /etc/apache2/ssl/data-miner.key ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
已执行排查步骤
- 检查证书和密钥格式、文件路径、SSL指令顺序
- 使用
openssl x509验证证书无损坏 - 多次重启Apache
- 参考线上方案尝试解决,但问题仍存在
- 证书由DigiCert签发
问题
导致Apache SSL配置中PEM lib错误的原因是什么?还有哪些配置或步骤需要检查?有什么进一步排查的建议?
解答
核心原因分析
从错误日志里的bad base64 decode和PEM lib错误来看,核心问题是Apache无法正确解析PEM格式的证书/密钥文件,常见触发场景:
- PEM文件格式损坏:文件存在非Base64字符、换行异常、缺失
-----BEGIN CERTIFICATE-----/-----END CERTIFICATE-----边界标记,或标记拼写错误(如少写横杠、大小写错误)。 - 证书链拼接错误:
ssl-bundle.pem若为多证书拼接,可能顺序错误(正确顺序:服务器证书→中间证书→根证书)、重复添加证书,甚至混入密钥内容。 - 文件编码问题:从Windows复制的文件可能带有DOS换行符(
\r\n),Linux下OpenSSL会将\r视为无效字符,导致Base64解码失败。 - 密钥加密未解密:若
data-miner.key开头是-----BEGIN ENCRYPTED PRIVATE KEY-----,说明密钥被加密,Apache启动时无法自动解密。
待检查的配置/步骤
- 逐行校验PEM文件内容
- 打开
ssl-bundle.pem和data-miner.key,确认每个证书/密钥块的起始、结束标记完整且无拼写错误,标记前后无多余空格/空行,中间Base64内容无异常换行。 - 排查文件中是否存在注释、中文标点、不可见字符等干扰解析的内容。
- 打开
- 验证证书链有效性
- 执行命令
openssl verify -CAfile /etc/apache2/ssl/ssl-bundle.pem /etc/apache2/ssl/ssl-bundle.pem,检查证书链是否完整有效。 - 单独提取服务器证书,用
openssl x509 -in server-cert.pem -text -noout确认格式正常,再依次验证中间证书。
- 执行命令
- 修复文件换行符
- 用
dos2unix /etc/apache2/ssl/ssl-bundle.pem和dos2unix /etc/apache2/ssl/data-miner.key将文件转换为Linux换行格式。
- 用
- 检查密钥是否加密
- 若密钥是加密状态,执行
openssl rsa -in data-miner.key -out data-miner-decrypted.key解密(需输入密码),然后修改Apache配置指向解密后的密钥文件。
- 若密钥是加密状态,执行
- 细化权限检查
- 确认
/etc/apache2/ssl目录权限为755,确保Apache进程能进入该目录;证书文件权限设为644,密钥文件可设为600(需保证www-data有读权限)。
- 确认
- 检查Apache SSL模块配置
- 执行
a2enmod ssl确认SSL模块已启用,检查ports.conf中是否配置Listen 443 https。
- 执行
进一步排查建议
- 简化配置测试:暂时注释虚拟主机中的WSGI相关配置,仅保留基础SSL配置,重启Apache看是否能正常启动,排查是否为配置冲突。
- 替换测试文件:用已知有效的自签名证书和密钥替换当前文件,验证Apache是否能正常启动,定位问题是否出在证书/密钥本身。
- 开启SSL调试日志:在Apache配置中添加
LogLevel ssl:debug,重启后查看error.log的详细调试信息,找到具体解析失败点。
内容的提问来源于stack exchange,提问作者Oscar Payne
相关产品推荐
相关产品推荐

