如何让openssl_pkcs12_export使用legacy算法?能否通过openssl.cnf全局配置?
关于PHP openssl_pkcs12_export使用Legacy算法及OpenSSL全局配置的解决方案
一、让PHP的openssl_pkcs12_export使用Legacy算法的方法
- 临时指定自定义配置:在调用
openssl_pkcs12_export前,通过putenv('OPENSSL_CONF=/path/to/your/custom-openssl.cnf')设置环境变量,用包含legacy配置的自定义文件覆盖默认配置。 - 调整全局OpenSSL配置:如果是长期需求,直接修改系统或PHP依赖的OpenSSL配置文件(常见路径为
/etc/ssl/openssl.cnf,Windows下多在OpenSSL安装目录的bin/openssl.cnf),具体配置见下文。 - 命令行替代方案:如果内置函数配置不生效,可直接用
exec()或shell_exec()调用系统命令openssl pkcs12 -export -legacy ...,直接实现legacy算法导出效果。
二、通过openssl.cnf全局强制PKCS#12导出使用Legacy算法
针对OpenSSL 3.0及以上版本,需先启用legacy provider,再配置PKCS12默认算法:
- 打开openssl.cnf,添加或修改以下配置段:
[openssl_init] providers = provider_sect [provider_sect] default = default_sect legacy = legacy_sect [default_sect] activate = 1 [legacy_sect] activate = 1
- 新建或修改[pkcs12]段,指定legacy算法:
[pkcs12] # 强制使用SHA1+3DES这类传统算法组合 pkcs12_pbe_nid = PBE-SHA1-3DES pkcs12_mac_nid = SHA1
配置完成后,所有依赖该OpenSSL库的工具(包括PHP的openssl_pkcs12_export)导出PKCS#12时都会默认使用legacy算法。
内容的提问来源于stack exchange,提问作者Furgas
相关产品推荐
相关产品推荐

