案例背景及网络环境描述: 由于国家对网络安全的问题越来越重视,以及政府单位不断的加大移动办公系统的投入和开发。为了保障移动办公系统的数据安全性并最大程度的提升易用性,多数政府单位在搭建移动办公系统时都考虑采用运营商的VPDN专线结合SSL VPN的模式做两层数据封装,加上严格的身份验证。 网络拓扑如下
:
移动终端使用SIM卡和3G卡接入VPDN网络,由运营商控制绑定卡号通过L2TP隧道接入服务端。安卓终端使用APP访问OA系统,app采用我司EasyAPP方案,结合第三方CA做用户认证。
问题现象描述: 安卓终端通过电信3G网络接入之后,提交用户证书登录报错,无法连接VPN,但是使用用户名密码认证没有问题,且在PC上通过3G接入使用证书认证都正常。
排查过程及原因分析: 1.用安卓和windows PC两种终端同时接入内网wifi,测试两种终端证书登录VPN都正常,排除服务端配置问题; 2.安卓终端直接接入3G信号接入点,使用证书登陆时在SSL设备后台抓包,接收不到包含证书信息的包; 3.用PC接3G信号接入点,使用证书登录,在SSL设备后台抓取正常登录过程的完整的数据包; 如下是一次正常交互过程的数据包
证书包
4.使用PC接入3G网络,共享热点给安卓PAD接入,在PC上抓取安卓终端登陆时发送的数据包,跟第三步抓到的windows终端的数据包进行对比。
从数据包的分析结果,发现安卓终端发送的证书数据包比windows终端发送的包含数字证书信息的包要长两个字节,也就是数据包长度要多16位,基本也就可以判定问题是在中间网络设备拦截了大包传输。 找到问题原因,问题也就算解决一半了。中间网络设备导致的数据上传异常的问题个人比较喜欢用ping大包来定位问题节点,通过电信3G接入,向客户取得中间节点设备的IP地址,逐一测试,最终定位到是在VPDN中作为LNS的华*防火墙的问题,数据通过这台防火墙进入L2TP隧道之后,最大只能ping通长度为1435的包,而安卓终端上传的证书数据包则是满包,经过L2TP封装后数据包长度超过1500,必须分片传输。
查到这里问题就已经很清晰了,解决办法也就呼之欲出:修改中间网络设备的MSS值。 然后就是验证方法的可行性,缩小问题节点(也就是作为LNS的防火墙)的MSS值至1280再尝试问题即解决了。 |