apache默认使用pem格式证书,需将pfx、jks、der等格式通过openssl转换为分离的明文.crt和.key文件,确保含完整证书链、私钥无密码、换行符为lf,并验证匹配性与有效期后配置sslcertificatefile和sslcertificatekeyfile。

Apache 默认使用 PEM 格式证书(如 .crt、.key、.pem),但有时你拿到的是其他格式(比如 Windows 导出的 .pfx,或 Java 环境下的 .jks,或二进制 .der),就需要先转成 PEM 才能用于 Apache 配置。核心原则是:**Apache 只认文本型 PEM,且证书和私钥必须分开、明文、无密码(或密码在配置中指定)**。
PEM 转换前要确认三件事
• 证书文件是否包含完整链(含中间 CA)——Apache 的 SSLCertificateFile 推荐用“证书+中间证书”拼在一起的 PEM 文件;
• 私钥是否加密——若带密码,Apache 启动时会卡住等待输入,生产环境建议先解密或用 SSLPassPhraseDialog 安全处理;
• 文件编码是否为 Unix 换行(LF)——Windows 编辑保存的文件可能含 CRLF,导致 Apache 报错 “Invalid command '-----END CERTIFICATE-----'”,可用 dos2unix 修复。
常见格式转 PEM 的 OpenSSL 命令
所有命令均基于 OpenSSL(建议 1.1.1 或更高版本),运行前确保私钥和证书文件可读。
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
-
PFX/P12 → PEM(证书 + 私钥分离)
openssl pkcs12 -in cert.pfx -clcerts -nokeys -out domain.crtopenssl pkcs12 -in cert.pfx -nocerts -nodes -out domain.key
(执行时会提示输入 PFX 密码;-nodes表示输出不加密私钥) -
DER(.der/.cer)→ PEM
openssl x509 -inform DER -in cert.der -outform PEM -out cert.crtopenssl rsa -inform DER -in key.der -outform PEM -out key.pem -
JKS → PEM(需先转 PKCS#12)
先用 keytool 导出为 P12:keytool -importkeystore -srckeystore app.jks -destkeystore app.p12 -deststoretype PKCS12
再用上面的 PFX → PEM 步骤处理
Apache 配置中 PEM 文件怎么放
确认转换后的文件满足以下结构:
-
domain.crt:以-----BEGIN CERTIFICATE-----开头,结尾含中间证书(如有),顺序为:站点证书 → 中间证书(可多段); -
domain.key:以-----BEGIN RSA PRIVATE KEY-----或-----BEGIN PRIVATE KEY-----开头,无密码或已解密; - 在
httpd.conf或虚拟主机配置中写入:
SSLCertificateFile /path/to/domain.crt
SSLCertificateKeyFile /path/to/domain.key
(如需完整链且中间证书未合并进 crt,可额外加:
SSLCACertificateFile /path/to/intermediate.crt)
验证 PEM 文件是否有效
别跳过这步,很多部署失败源于文件内容错误:
- 检查证书是否过期:
openssl x509 -in domain.crt -text -noout | grep "Not After" - 确认私钥与证书匹配:
openssl x509 -noout -modulus -in domain.crt | openssl md5和openssl rsa -noout -modulus -in domain.key | openssl md5输出应一致 - 测试 Apache 配置语法:
apachectl configtest或httpd -t










