参考资料:
- http://www.cnblogs.com/lightsong/p/5229411.html
- http://serverfault.com/questions/596844/ssl-certificate-errors-in-captive-portals
- https://groups.google.com/forum/#!topic/android-platform/ATSxh0kG7cc
背景:
对于公司内部的无线网络来讲,如果只有一个固定的无线密码,是不科学的;公司员工离职之后依然可以使用公司的网络,每有员工离职就修改密码也不现实;常见的解决办法就是使用portal认证。portal认证说来也容易,在网络设备上配置一下就行了,但是,如果要做一个能用的portal认证还是需要了解一些相关知识的,比如,如何实现使用公司员工账号进行认证?这个问题相对好解决,这里不去讨论;下面讨论一个几乎没有完美解决办法的问题。
一般来讲,连接到一个需要portal认证的网络后,系统会自动弹出来一个portal认证页面(哇赛,咋实现的?),如果手欠,没有登录就关掉了,如何再次打开该页面?
首先,如果不小心关掉了portal认证页面也没关系,打开浏览器,输入http://baidu.com 就能看到portal认证页面; 问题是,百度早使用https了,你很可能输入的会是https://baidu.com ,这样的话,你就看不到portal页面,你只好很生气给给网管打电话:….
网管也很郁闷,好不容易做了点儿事儿,还得因为这个经常挨骂,窝心啊…
下面我们就来讨论一下几个问题:
- 为什么连网之后会自动弹出portal认证页面
- 为什么输入http://baidu.com 就能看到认证页面
- 为什么输入https://baidu.com 就看不到认证页面
先说问题2:
- 你连网之后,按照管理员的配置,你的网关上配置了portal认证,你想上网的话,网关必然是知道的,而且网关知道你还没有认证过呢;刚好网关发现你发起的是一个http请求,然后就根本不转发你的请求,而是直接把你重定向到了一个早已准备好的portal认证页面,这一切都得益于http是明文的,于是你就看到了portal认证页面
再说问题3:
- 通过问题1的分析可知,因为https是密文的,网关就没有能力将你重定向到portal认证页面了
再说问题1:
- 通过上述的分析,操作系统的网络管理部件完全可以在连网之后直接发送一个http请求探测一下是否被拦截了,如果被拦截了,则很可能就是一个portal认证页面,然后弹窗显示就行了,真的吗?
- 事实上就是这么实现的
- mac上默认访问的http地址是: http://captive.apple.com/hotspot-detect.html
- android 手机上据说访问的是: http://clients3.google.com/generate_204
- windows上访问的是: http://www.msftncsi.com/ncsi.txt
- mac上默认访问的http地址是: http://captive.apple.com/hotspot-detect.html
其实上面的做法存在一些问题,网络上为了安全都在启用https,但是上述几个地址却是内置的http请求,如果进行dns投毒,则很容易让用户访问到自己定制的页面的