最新消息: 新版网站上线了!!!

php银行开放平台接口4:pfx格式和cer格式的证书 银行服务开放平台java开发,现在需要php版本的SDK demo 和java交互

前提:银行服务开放平台java开发,现在需要php版本的SDK demo 和java交互


pfx格式的证书,是商户证书

cer格式的证书,是平台证书


一、pfx格式的证书

接到项目之后,去网上查看了一下资料,发现有好多人说php不支持pfx证书操作,要转为pem格式的证书才能操作,这个说法是错误的,php的openssl扩展中包含了大量与之相关的函数,其中就包括一系列处理pfx证书的函数:比如openssl_pkcs12_read(),openssl_x509_parse()等等。当然你也可以转换为pem格式的文件在进行处理

pfx里面包含2部分内容,一个是商户私钥,一个是商户公钥


二、cer格式的证书

在代码中可能用到的和cer证书有关的php函数openssl_pkey_get_public($publickey),openssl_verify($keyValueStr,$sign,$pkeyid,OPENSSL_ALGO_MD5)等

cer里面包含1部分内容,就是平台公钥


三、这2个证书的意义

pfx证书,一般叫私钥证书(商户证书),在代码的执行流程中它到底起什么作业?回答是:加签

1、商户通过开放平台提供的参数,安装要求组装一个字符串比如:$keyValueStr='key1=value1&key2=value2&key3=value3....&';

2、使用$pfx = get_file_contents('pfx证书路径')读取私钥证书

3、openssl_pkcs12_read($pfx,$result,$ClientPwd); $ClientPwd是证书密钥,银行的开放平台会提供给你的。$result是返回值,返回的是一个数组

4、这个地方只要用到$result数组pkey元素的内容即:$result['pkey']。    $pkey = $result['pkey'];

5、$pkeyid = openssl_pkey_get_private($pkey);  //真正的获取私钥,不过返回的数据类型为资源

6、使用获取到的私钥资源id,对$keyValueStr='key1=value1&key2=value2&key3=value3....&';字符串进行加签,当然加签是又对应好几种算法,我们这个平台使用的OPENSSL_ALGO_MD5算法。

openssl_sign($keyValueStr,$signature,$pkeyid,OPENSSL_ALGO_MD5);  //$signature 为返回的签名串

7、对签名串进行base64_encode($signature);处理 //不是必须的,看平台的约定情况

8、把最终得到的字符串发送给开放平台服务端

完了服务端在做验签等待,这里不描述了。那是服务端的事情,咱们这里重点是说客户端sdk

按照商量的顺序严格执行,我们就会看到pfx证书在执行流程中的作用。那么你可能想知道为什么要用pfx中的私钥对字符串进行加签,对,就是为了安全,防止发送到服务端的数据被篡改。具体服务端如何验证数据是否安全的,那么咱们看看商户客户端又是如何验证服务端返回的数据安全的,其实是一个道理,看完就理解服务端验签过程了。想了解更加具体的流程,就看本平台发布的其他文章,这篇的主体不是详细接受流程



cer证书,一般叫公钥证书(平台证书),在代码的执行流程中它到底起什么作业?回答是:验签

既然商户发给开放平台服务端的数据,服务端不信任要验签,那么商户客户端也是同样的道理,不信任开放平台返回的数据 ,也要对返回的数据验签。cer中的公钥就是这个作用。

1、根据开放平台返回的数据,按照开放平台的约定对,把返回数据组合成$keyValueStr='key1=value1&key2=value2&key3=value3....&';

2、$public_key = file_get_contents($this->publicKeyPath);读取公钥证书内容

3、$pkeyid = openssl_pkey_get_public($publickey); //资源类型

4、$sign = base64_decode($sign);   //不是必须的,看平台的约定情况

5、$verify = openssl_verify($keyValueStr,$sign,$pkeyid,OPENSSL_ALGO_MD5);  //$sign为开放平台服务端返回的签名串

6、只有验签成功,才能确认开放平台,服务端返回数据是安全的。


转载请注明:谷谷点程序 » php银行开放平台接口4:pfx格式和cer格式的证书 银行服务开放平台java开发,现在需要php版本的SDK demo 和java交互