在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
本文是1:1模式,N:1模式请参见新的一篇博客《SSL双向认证(高清版)》 ----------------------------------------------------- 我是分割线 --------------------------------------------------------- 标题太长了不知道该怎么起,索性就把keyword列出来吧~ WebService的WS-*搞了一天没搞定,看样子PHP应该是彻底抛弃SOAP协议了,google翻烂了也没找到什么靠谱的解决方案。 合作方又不愿意自己去实现加解密签名那些东西,没办法,只好走https了,把这块儿从应用层抛到更底层去。 但是通信中的数据安全分几部分:保密性、不可篡改,不可抵赖。 传统的https调用只是对数据做了加密,解决了保密以及不可篡改问题,解决不了客户端的身份验证问题,或者叫不可抵赖性。 所以需要使用两套证书的SSL双向认证。 目前的Nginx对SSL双向认证支持的比较好,配置很简单:
其实就是在常规https配置基础上增加了client端公钥设置,以及开启client验证。(更多配置信息参考nginx官方文档:http://wiki.nginx.org/HttpSslModule#ssl) 服务端配好了后,原来的wsdl地址就需要通过https才可访问。但是,客户端访问时需要使用client端的证书。 先以curl测试,相关参数:
我使用的是nusoap实现的webservice服务端(具体参见《你喜欢SOAP吗?反正我不喜欢!》),此时会看到wsdl中的绑定接口地址已经是443端口地址。 下面改用SOAP调用,PHP自带的SoapClient就支持,只需设置如下header:
需要注意的一点是:此时client.pem的内容需要包含证书以及私钥信息,如下:
此时会发现仍然有如下报错信息:
在google上翻到了一个哥们类似的遭遇,结果和我意料的一样:事先取wsdl的时候soapclient根本没有使用证书信息! 用curl抓下来保存成本地文件进行调用,一切OK~ |
2022-08-30
2022-08-17
2022-11-06
2022-07-18
2022-08-18
请发表评论