设为首页 收藏本站
查看: 536|回复: 0

[经验分享] php与java签名验证对接

[复制链接]

尚未签到

发表于 2015-8-29 11:18:55 | 显示全部楼层 |阅读模式
  做完银联接口后,发现很多朋友问到关于对接的问题,我在这里总结一下.
  java的keytool生成的rsa公钥密私钥是16进制字符串,php用openssl生成的公钥私钥是基于base64格式的字符串或者二进制格式,这两种不同的公约密钥并不能直接转化,网上有很多的办法转化这些,我曾经一一的测试过,是不正确的,例如有人把java的16进制密钥转化为2进制,然后再转为base64编码,将这一串字符放在php下生成的pem密钥文件的----BEGIN RSA PRIVATE KEY-----和-----END RSA PRIVATE KEY-----,其结果是根本无法读取,java和php生成的密钥公钥文件的字节数就不同一个40字节,一个是42字节,如果有兴趣可以研究一下.
  还有的是用php实现类似rsa算法,用这个类代替openssl,不管效率如何,首先其安全性就让人不是很放心,何况以后如果增加ssl传输要求,又该如何是好,其实正确的办法是java方将密钥公钥转化为pkcs#8的格式,在这个格式下,双方是都可以正确识别的,但是牵扯到和银行做对接,能不能这么做,就有很大不确定性.
  在我考虑了各种可能后,我选择另一种方法来解决,就是所有数据处理继续使用php接口,而签名和验证则调用银联提供的java模块,我把整个思路给银联技术说了说,他们也很支持这个思路,他们的java技术就根据我的要求做了一个完整的模块交给我供我调用.
  这么做的好处是显而易见的,以后银联方面升级自己的系统,只需要把修改过的模块分发下来,就能保证各个接入平台的一致性.在后来的过程中我发现很多银行其实也是采用了类似的思路来做对接.不过有些提供的模块功能复杂些,参数多些而已.
  
  php调用java接口也有很多办法,用webservice方法,或者php本身的扩展中就有一个专门用于调用java类的,但是实现过程中有很多不如意,后来我找到了另外的一个javatophp的调用模块来调用java类,结果显示很稳定而且容易部署.
  部署javatophp时候,我装了tomcat,将8080端口专门用于接收银联的请求,与80端口分开,可以最大程度的保证数据安全性.apache下的tomcat可以使用php-fastcgi的模式调用php解释php文件,所以我把请求过来的数据直接调用cgi模式处理数据,在验证签名和签名的时候,用tomcat下的javatophp来调用java的签名类,传入和返回的数据是字符串形式,这样整个流程就走通了.
  在做调用的时候,很多人会被复杂的调用说明搞晕,其实很简单,javatophp的war包可以直接放在tomcat的webapps下运行,包里本身就带了php5.3的cgi模块,在这里运行php文件没有任何问题,遗憾的是,整个包的php扩展增加好像有些问题,所以如果你想使用pdo mysql这些模块,你需要手动的切换war里默认的cgi程序目录,切换扩展目录,php.ini文件在cgi模式下定义和mod模式下也有一些小的区别,修改后放在c:/windows下,tomcat就可以正确找到这个php.ini文件了,需要增加的模块就能正确增加.百度上有很多相关文章,我就不重复了.
  
  PHPer常常不知道怎么调用java的类文件,java类名和文件名可不是像php那样一一对应的,把银联给你id包放在lib目录下,然后他需要告诉你这个包的包名类名,然后你才能调用,注意一定要把javatophp的ini文件引入到php文件中,否则是无法成功运行的.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-105866-1-1.html 上篇帖子: 使用PHP生成二维码图像 下篇帖子: PHP 打开调试 APACHE2(转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表