MacOS Monterey下PHP7.3调用openssl_pkcs12_read报不支持错误如何修复?
解决MacOS Monterey下PHP7.3调用openssl_pkcs12_read()报错问题
遇到的error:0308010C:digital envelope routines::unsupported错误,本质是MacOS Monterey自带的OpenSSL版本禁用了部分旧加密算法,和你的PKCS12文件或PHP的OpenSSL适配冲突,试试下面的解决办法:
方法一:临时启用OpenSSL兼容模式
通过设置环境变量让PHP跳过系统默认的加密限制,直接在终端运行脚本前执行:
export OPENSSL_CONF=/dev/null && php your_script.php
如果是Web环境:
- Apache:在
httpd.conf或虚拟主机配置里添加SetEnv OPENSSL_CONF /dev/null - Nginx:在
fastcgi_params中新增fastcgi_param OPENSSL_CONF /dev/null;
方法二:重新编译PHP7.3适配旧版OpenSSL
系统自带的OpenSSL版本较新,和PHP7.3兼容性不佳,可手动编译PHP并指定旧版OpenSSL:
- 用Homebrew安装OpenSSL 1.1.x:
brew install openssl@1.1 - 下载PHP7.3源码,编译时指定OpenSSL路径:
./configure --prefix=/usr/local/php73 --with-openssl=/usr/local/opt/openssl@1.1 make && make install - 修改系统默认PHP指向这个编译好的版本(比如调整
PATH或创建软链接)。
方法三:转换PKCS12文件的加密算法
如果能修改PKCS12文件,将其转换为使用现代加密算法的版本,即可兼容系统OpenSSL:
# 先把旧PKCS12导出为PEM格式 openssl pkcs12 -in old.p12 -out temp.pem # 重新生成使用AES-256-CBC加密、SHA256哈希的PKCS12文件 openssl pkcs12 -export -in temp.pem -out new.p12 -certpbe AES-256-CBC -keypbe AES-256-CBC -macalg SHA256
之后用新生成的new.p12替换旧文件即可。
内容的提问来源于stack exchange,提问作者Damjan
相关产品推荐
相关产品推荐

