openssl兼容php,php的openssl扩展版本兼容问题

本文讲述了在升级PHP从7.0到7.2后遇到的openssl_sign()报错问题,以及如何进行兼容调整。在PHP环境中,openssl扩展的版本与证书内容的换行格式有关,低版本可能需要证书内容分段换行。同时,PHP7.1及以上版本的openssl_encrypt()和openssl_decrypt()增加了新参数支持AEAD加密模式,若不升级PHP,可以考虑安装sodium扩展来实现兼容。
摘要由CSDN通过智能技术生成

因为服务器里在跑一些老项目兼容问题很多,一直运行PHP7.0版本没有升级。在对接微信分时需要使用到AES-256-GCM加密需要调整PHP环境,决定先升级到PHP7.2,升级后发现openssl_sign()报错,排查后做下简单兼容调整说明。

做三方对接时时常会出现问题,尤其是运行环境发生变化时。对于PHP环境主要分为:php版本、扩展库版本。如果出现兼容性问题则首先需要确认环境问题,避免走弯路。

openssl在对接支付等功能时基本上都会使用到,一般三方有对应写好的SDK,通常按指定的环境要求下运行问题不大。但有时SDK并没有太细说明,难免会出现兼容问题。

扩展库版本兼容

openssl版本在1.0.1及以下时要求证书内容分段换行,否则openssl_sign、openssl_verify使用证书的函数会报错,比如:

openssl_sign(): supplied key param cannot be coerced into a private key in

查看php安装的openssl库版本直接通过openssl扩展提供的常量OPENSSL_VERSION_TEXT获取:

var_dump(OPENSSL_VERSION_TEXT);

排查时首先确认证书是否有错、参数是否配置错误,环境是否匹配。

如果扩展库是openssl-1.0.1及以内则证书内容需要分段换行否则无法识别。

或者使用代码处理:

function getPem($filename){

$pem = file_get_contents($filename);

if (preg_match('/^([^\n]{10,64}\s+)&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值