【案例23】NCC2005 was集群报非法登录的解决方案

目录

问题现象

问题分析

NCC补丁的修改机制及存在的问题

获取不到客户端IP的原因

解决方案

1)、操作server

2)、配置Web容器传输链

3)、增加定制属性

4)、配置HTTP入站通道

5)、点击“定制属性”

6)、新建定制属性

7)、增加trustedSensitiveHeaderOrigin属性

8)、对于第三步中的其他资源,重复第三到第七步的操作

9)、对于每个server,做此配置修改

10)、重启was生效


问题现象

NCC2005 Was集群,使用IHS做分发,通过IHS端口登录NCC轻量端时会报“非法登录”的错误,通过server具体端口访问NCC应用则没问题。

问题分析

NCC有个安全机制,要校验客户端IP,代码中调用request.getRemoteAddr获取客户端IP,如果通过IHS端口登录NCC,则request.getRemoteAddr返回的是IPv6地址,如果直接通过server的具体端口登录NCC,返回的是IPv4地址,NCC无法解析IPv6地址,所以报非法登录的错误。

NCC补丁的修改机制及存在的问题

对于这个问题,开发给过一个补丁,补丁修改方法是在校验出request.getRemoteAddr地址不合法时,从request.headers中的$WSSN去获取IP,此补丁解决了很多项目报非法登录的问题。

实际上这个补丁处理方法是不对的,$WSSN中获取到的是host信息,即应用服务器的主机信息,NCC代码的本意是要获取客户端IP,这个客户端IP在NCC后续处理中很多地方要用到。

如果通过一个域名去登录NCC,那么$WSSN中获取到的是主机的域名,NCC解析不了这个域名,也会报非法登录的错误。

而request.getRemoteAddr返回IPv6地址的原因是,这个方法返回的是应用服务器的IP信息,很多服务器启用了IPv6,所以返回了一个IPv6的地址。

综上所述,request中就没有包含客户端的IP信息,所以这个问题无论如何都不能通过修改代码解决,NCC2005所有使用集群的项目都存在问题。

获取不到客户端IP的原因

从was9.0.0.11开始,was的机制做了修改,如果请求是从proxy server分发过来的,那么was要校验这个proxy server是否可信,只有proxy server在trustedSensitiveHeaderOrigin这个属性中定义的可信proxy server列表中,才会认为是可信的。如果不可信,那么was不会把客户端IP放进request.headers中,NCC代码也就无法从request中获取到客户端IP。如果不是从proxy server分发过来的,则不会有这个校验。这也就是通过IHS端口访问报错,而通过具体端口访问不报错的原因。

这个问题不是IHS的问题,是was server的问题,即使不使用IHS,使用其他proxy server,也会有同样的问题

解决方案

解决方案是在每个server的Http Channel中增加一个定制属性,trustedSensitiveHeaderOrigin值为proxy serverIP,如果有多台proxy server,可以定义多个IP,以逗号分开,为了处理简单,这个值也可以写成 *,即任何proxy server都是可信的,这就回到was9.0.0.11之前版本的状态。修改完后,重启was生效。

具体操作步骤如下:

1)、操作server

进入WebSphere控制台->应用程序服务器,对除master外所有server增加定制属性。

2)、配置Web容器传输链

进server的配置界面,点击“Web容器传输链”

3)、增加定制属性

在Web容器传输链界面,列表中每项资源都要点进去增加定制属性

 

4)、配置HTTP入站通道

选中一项资源,点击进入,再点击 “HTTP入站通道”

 

5)、点击“定制属性”

在HTTP入站通道界面,点击“定制属性” 

6)、新建定制属性

在定制属性列表界面,点击“新建”菜单 

7)、增加trustedSensitiveHeaderOrigin属性

增加一个定制属性,名称为trustedSensitiveHeaderOrigin,值为proxy server的IP,建议配成*,表示信任任何proxy server,点确定、保存。 

8)、对于第三步中的其他资源,重复第三到第七步的操作

9)、对于每个server,做此配置修改

10)、重启was生效

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值