本帖最后由 螺丝钉 于 2017-4-10 09:47 编辑
SSLVPN与第三方短信平台(云信通)的http(Webservice)认证配置
公司的VPN用户接入一直是用AD域账号+USBkey作为安全认证的,一直觉得很安全也很方便。可是最近公司内部开发了一些基于手机的APP应用,于是VPN用户就有了手机应用的需求。而手机是不支持USBkey的,这可怎么办呢?
那位说了,用硬件特征码,一样安全。确实是,特征码跟key的作用差不多,但是用特征码牵扯到定义这个“码”的数量问题,定义的太多就起不到安全的作用,定义的太少又太麻烦,考虑到用户经常更换手机、电脑,如果用特征码作为安全验证,管理员将不胜其烦!算了,还是用短信认证吧。当然,短信认证可能也存在诸如出国用户无法收到之类的,那种情况就只能特殊对待了。下面就某公司我花了一个周末的白天和晚上才调通的短信认证调试经过。
短信认证有多种方式:短信猫、Webservice等等。我们本来是有短信猫的,一直闲置没用,这次为什么没直接用短信猫而选择了Webservice呢?一方面是因为我们公司原来已经有一个第三方短信平台,之前用它来跟一些办公软件集成,实现自动发通知等功能,既然有这么个现成的,就利用起来吧;另一方面用短信猫太麻烦了,我还得再去准备个手机卡,还得重新开个账户缴费很是费劲,更重要的是:短信猫多了一个硬件就多了一个故障点,还听说短信猫动不动会被运营商封杀?不知道是不是真的。
云信通短信平台原来的用法是这个样子的:
登录进去就可以填写收信的手机号码和短信内容,写完点击发送就发出去了。 我又看了一下某公司SSLVPN所支持的短信类型,一共支持如下几种:
上面这么多其实我是分不清他们之间的区别的,但是我感觉既然云信通是一个网页的形式,那么我想最接近的类型应该是http亦或是Webservice吧,不知道我这么理解对不对。到底支不支持,最好问一下短信平台,不要蛮干。不管怎么着,说干就干。
我先在社区里问了一下在线客服,很快工程师给我回电话,让传一份短信平台的接口文档和测试账号看一下是否支持。测试了半下午没有结果。后来工程师让我跟短信平台要demo程序。这个人家真没有。很快周五下班了,看来只能下个周出结果了……工程师也不好意思……
吃过晚饭,心里一直惦记着这个事:“还是自己试试吧,否则睡不着觉!”,做技术的大都这样吧?呵呵
开始找配置文档,我把论坛里有关短信认证的帖子和配置文档几乎都看了一遍。感觉都写得很模糊,加上不同的平台配置的方法可能略有不同,导致云里雾里的。必须实际试一下才行。
首先要确认一下VPN设备是否已经购买了短信认证模块,如果没有,那是不能配置的。点击系统设置—系统配置—序列号管理查看:
导航到SSLvpn设置—认证设置—辅助认证—短信验证码—设置,进入短信验证设置:
启用短信验证码功能,前半部分基本上缺省设置就可以了,是很简单的。
重点和难点就是短信发送参数部分:
毫无疑问,网关类型选择我们之前确认好的http协议,页面编码一般是UTF-8,这倒好说,关键是其他的。按理说这些都应该问一下短信平台方,但是今天是周末,不好意思大周末的麻烦人家,还是得自力更生!
论坛配置指导上说的倒是很轻松,这些参数都要去接口文档里面找!可是接口文档里写的并不明确,与某公司配置界面上并不是一一对应的关系,真的需要费力气去找,再加上短信平台方居然给了两个不同版本的文档,因为没有确切的答案,只好试来试去……这一点让我浪费了很多时间。我还是强烈建议以后谁要碰到这样的调试项目,一定要直接找平台明白人直接问清楚!
URL地址 反过来我得给某公司提个建议:这个“URL地址”写的太笼统了,根本让人摸不着头脑,到底应该填个什么样的RUL??根据我得经验,我觉得应该改成“wsdl地址中问号前的部分”更确切,亦或是注释里这么写会让人更明白些。总之得给它起个具体的名字才好。
因为我看见了接口文档有这样一个描述:
配置指导里也有“一般是问号前面”这样的描述。就算是这样,我也是在最后使用SoapUI软件成功发送短信后才确信是这个地址的。因为不同的接口文档里面会有很多类似的地址,一定要找那个与wsdl相关的地址!
短信模板 上面提到了wsdl,那就先介绍如何用wsdl文件的方法生成短信模板。
Wsdl(WSDL:Web ServicesDescription Language的缩写),是一个用来描述Web服务和说明如何与Web服务通信的XML语言。为用户提供详细的接口说明书。这么官方的解释,其实对我们不懂软件的人来说还是天书一般。我只是把它理解成一种描述接口规则的语言。具体对我们来说就是有了这个wsdl文件,可以用它来生成短信模板,有了这个模板,短信就能发出去了。
那如何获得wsdl文件呢?这就需要前面提到的wsdl地址,例如本案例中的:
wsdl地址:http://manager.wxtxsms.cn/wxsms.asmx?wsdl
打开这个地址,是一个满是代码的网页,如下:
你能看懂吗?反正我是看不懂。不需要看懂,只要会保存即可。点击文件—另存为,默认会保存为一个扩展名为xml的文件,这就是我们要用到的wsdl文件。
至于接口名称,配置文档里让到接口文档里找,说实话,接口文档里的接口太多了,到底用哪个?真的很晕!后来我发现,其实用哪个道不影响大局,基本是一样的,但是必须是人家存在的接口,随便写是无法生成模板的。既然是发送,我就选了个带“send”字样的。哈哈,还是那句话,你要准确的填写的话,还是要找平台明白人问一下。然后“浏览”选择刚才保存好的wsdl文件,点击“生成短信模板”。如果接口名称写对,就会自动生成模板:
据说到这一步,只要把模板中的相应字段修改成右边的相应参数就可以了。看论坛中的文档大部分都是到这一步就能成功了。如果真的这么顺利,那就好办了。可能短信平台不一样,他们的wsdl文件是不一样的。很显然,我这个有个用户名密码没地方写啊!看日志也确实如此:
到了这步不通该怎么办呢?配置指导说,要是能直接访问其*.asmx文件,将是大大的好。如何访问*.asmx文件呢?其实就是把之前说的那个wsdl地址去掉?wsdl部分就可以了。看到的网页貌似更人性化了一点:
点一个进来看看,终于看到soap版本号了吧?接口名称、模板应有尽有。真是大大的好啊。离成功只有一步之遥了!
直接把里面的模板复制粘贴到过来就行,根据某公司的参数,替换原来的字符串。终于有写用户名密码的地方了!时间可以省去不写。关键就是手机号和短信内容两项。最后有一个用户签名,这个据说是电信部门有要求的,必须写上,就是类似收到这样的短信:“【网信科技】您的验证码是XXXX”前面括号中的部分。
好了,大功基本告成!可以点击测试了。一般的,绝大部分项目到这一步是会成功的。可以收摊了。但是我的并不是这样!!否则还有什么分享的必要呢?呵呵
下一步该怎么办呢?按照配置指导书的说法,还有最后的终极解决方案——抓包!指导书推荐的SoapUI+Fiddler下载地址:http://pan.baidu.com/s/1qWnAhUc 密码: 6a7w。事实证明,SoapUI是个好东西,fiddler太烂!抓包还是下载wiresharp吧。
在这里我要说的是SoapUI真的很不错,它可以把wsdl文件模拟出真实的运行环境,直接运行,也可以直接在上面修改相关参数后再运行,直至测试成功。我的就是这么初步测试出来的,只是那个fiddler没用上,根本抓不出包来。
我是把手机号码直接填在字符串的地方反复运行测试的,刚开始怎么也不通。看VPN日志,发现一直提示认证有问题,难道用户名密码的地方还是有问题?
仔细看接口文档,发现一直有这么个提示:密码要32位md5加密!我也一直纳闷呢,这样一直明文写密码岂不是容易泄密?看来可能是需要换成加密模式!
这个得试一下!可是如何把密码变成md5加密格式呢?这个哥知道,给大家推荐个网址:
把获得的密文复制替换原来的密码,继续在SoapUI中测试。
非常可惜,仍然不行!继续看接口文档。突然发现刚才那个“加密”是黑色字体,旁边有个用户IP也是黑色字体,这难道是巧合?肯定是编文档的人故意提醒大家的!不管他们上不上班了,赶紧打电话问一下他们的商务经理……哈哈,让我问着了,还真是,他们限制了ip的原因。刚才的密码加密也是必须的!嘴懒害死人啊!要是早问问不就好了?其实如果没想到也不会知道要问这些。
平台运营商放开IP限制后,点击SoapUI的运行按钮,终于听到了手机短信叮的一声!真的收到短信了!貌似是要大功告成了。
怀中激动地心情,我把SoapUI中成功运行的代码ctrl+A,ctrl+C到VPN设备的短信模板中,修改相应的参数代码,赶紧点击测试按钮!期待了十几秒钟,我晕!居然没有收到短信!!今天怎么了?难题都让我给碰上了?既然在SoapUI中可以成功,同样的代码放到设备上就不通,可以肯定的说,问题应该出在设备端。
可是下一步该怎么办?配置指导书中提到的的终极大法——抓包,一直还没派上用场。尽管我不知道到底要抓啥东西,也只能硬着头皮上了。
打开Wireshark,设置好网卡等,然后正常运行了一遍SoapUI能正常发短信的代码。在抓包结果在找到了“post /wxsms.asmx”那一项,漫无目的的一项项看。也不知道哪项有用。再回过头看看配置指导书。发现最后一小段居然是红色字体:写着“特殊情况”,莫非我又遇到了特殊情况?
看到这个地方,我感到我找到问题所在了。因为我刚才看抓包日志的时候看到过soapaction字段,它不是空的!如下图:
这么说我需要配置所谓的“soap头部”。这也印证了VPN设备日志中显示的“header”“soapaction”字样。
虽然配置指导书帮我找到了这个特殊情况,也告诉了我“隐藏配置”,我还是要提个建议:我不清楚这个配置隐藏的意义是什么。建议新版本直接把它明示出来,让很多人少走弯路。
不管怎么说一定要记住这个隐藏地址,这可是最后的救命稻草:
https://VPN设备的IP地址:4430/cgi-bin/php-cgi/html/redirect.php?modname=smsSet&diyrq=1
最后把抓包得到的soapaction字段填写到“自定义”框后,测试!这才算大功告成!
总结一下:
要配置第三方短信认证,参数最好直接跟短信平台明白人要,就不用自己摸索尝试了,几乎可以节约90%的时间! 配置指导书我在读的过程中发现模棱两可,不太好理解,还需要详细说明,除非配置过一次的用户知道是什么意思。 期间其实还有很多曲折,例如判断是不是因为VPN设备只对外映射了443端口切不能上互联网导致的发不了短信?最后的事实证明发短信用的是443。
参考资料:
某公司_ACSG+WebService短信认证配置指导_20140106 某公司_SSLVPN7.1-CONF-15-03_WebService短信认证配置指导 某公司_SSL7.1_WebService短信认证配置指导 某公司_AC_v11-CONF-06-28_WebService短信认证配置指导
|