前段时间做OA系统的https的安全登录功能(以前登录是采用的一般的http方式,后因为安全性考虑需要改成https的方式)在本机测试完全通过。 可是近期同事发现在测试环境下用IE6访问会出现不能访问的问题。我测试了以下,确实存在这样的问题。这个问题仅出现在IE6上,在火狐或IE78上都 没问题。这就很纳闷了。为什么会出现这样的情况呢?
WEB服务器采用的是weblogic10.3。
http:9001
https:9002
使用IE6访问后控制台会出现如下错误:
<Warning> <Security> <BEA-090475> <Plaintext data for protocol HTTP was received from peer 10.32.1.90 - 10.32.1.90 instead of an SSL handshake.>
Description |
Plaintext data was received over an SSL connection. |
Cause |
A peer is trying to send plaintext data directly instead of using SSL. |
Action |
Check the port and protocol settings on the peer that is trying to connect. It may be pointing to the SSL port by mistake or it may be specifying a plaintext protocol by mistake. |
WEBLOGIC的官网说:
问题发生的原因大概是明文数据企图用SSL来通信。
这就奇怪了。我的https在后台校验登录成功后就强制转换到了http方式。并且这一切都在IE78下通过了测试。
跟踪代码发现,在Login.jsp页面已HTTPS的方式提交了数据后,后台过滤器进行数据的校验,校验通过后采用sendRedirect方法跳转到http方式(sendRedirect(http://reyo.cn:9001/test.jsp)),问题就发生在访问validateright.jsp页面的时候。
在validateright.jsp通过request.getRequestURL()获取出来的数据为http://reyo.cn:9002/test.jsp。 我明明在过滤器里面重定向的是9001的端口,在页面获取到的确是9002.和用request.getLocalPort()获取来的9001也不同。 但如果用IE7/8以及火狐来访问的话就不会有这样的问题。同样的访问流程,不同的浏览器向服务器提交的请求端口不同。太奇怪了。
无解。无解。这肯定和后台的代码没多大关系,初步猜测是IE6的一个BUG。尚未证实。
后来把服务器的http和https的端口都改为了默认端口80,443.这样不管IE678,以及火狐都不存在这样的问题。看来是用默认端口不会遇到这样的BUG问题,也暂时作为临时解决方案吧。