PHP7中文手册2018 带注释 最新chm版
前提:银行服务开放平台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交互