分享

WebSphere Application Server V8 安全新特性

 江江385 2013-05-29
简介: 本文将详细介绍 IBM WebSphere Application Server V8 在安全方面新特性,括审计服务提供者设置、使用 SAF 进行 z/OS 上的分布式实体映射、安全强化特性、使用 JASPI 实现定制的认证服务提供者、对 Java Servlet 3.0 中安全新特性的支持、wsadmin 脚本中对 LTPA 的支持、多安全域、安全配置报告、安全方面的定制属性、单点登录的设置、使用 WebSphere Application Server API 实现基于 LtpaToken2 cookie 的 Web 单点登录。

概述
安全性指利用多种技术来防止对资源的非法访问,是企业应用系统的一个关键因素。IBM WebSphere Application Server(后面简称 WAS)提供了一系列的设施和机制来保护敏感的 Java 2 平台、JEE 资源和管理资源,并解决企业中端到端的安全性需求,如认证、资源的访问控制、数据的完整性、保密性和隐私性、安全的互操作等。WAS 安全基于工业标准,并且在每个版本加入了一些新特性,较上一个版本有功能上的增强和发展。
本文将详细介绍 WAS V8 在安全方面的新特性,包括审计服务提供者设置、使用 SAF 进行 z/OS 上的分布式实体映射、安全强化特性、使用 JASPI 实现定制的认证服务提供者、对 Java Servlet 3.0 中安全新特性的支持、wsadmin 脚本中对 LTPA 的支持、多安全域、安全配置报告、安全方面的定制属性、使用 WAS API 实现基于 LtpaToken2 cookie 的 Web 单点登录。

安全新特性详述
新特性一:审计服务提供者设置
WAS 提供了对安全设施的审计服务,即报告并跟踪可审计的事件(包括认证、授权、Principal/Credential 映射、审计策略管理、Delegation 等),来保证系统的完整性。审计数据首先要通过审计服务提供者,然后才能输出到日志文件中。审计服务提供者用来对审计数据进行格式化。
当审计日志写满后,WAS V7 直接将最老的日志文件覆写;而在 WAS V8 中,增加了一个新的设置“Behavior when maximum is reached”,以设置当日志文件写满后的系统行为。

图 1. 审计服务提供者设置
    
 

“Behavior when maximum is reached”设置有三个选项:
  • Overwrite oldest:缺省选项,与 WAS V7 的行为一样。当审计日志写满时,最老的审计日志文件会被覆写,并且不会将这一行为通知给审计人员。
  • Stop server:审计日志写满时,不会覆写老的日志文件,而是停止审计服务,并向 SystemOut.log 发一个通知,然后将应用服务器静默掉(quiesce,允许处理完已在服务器中的请求,但不接收新的请求)。
  • Stop logging:该选项也不会覆写老的日志文件。当审计日志写满时,停止审计服务,但是允许应用服务器继续工作,并且不会向 SystemOut.log 发通知。

如果应用服务器是由于审计日志写满而被停掉(Stop server 选项),在重启该应用服务器之前,必须先将日志文件存档。
新特性二:使用 SAF 进行 z/OS 上的分布式实体映射
WAS for z/OS 一般使用 SAF 来进行授权。当用户存储库为非本地操作系统时,需要将外部的用户实体(分布式实体)映射到 z/OS 本地的 SAF 用户。在 WAS V7 及之前的版本中,我们需要使用 JAAS 登录模块来实现这一映射,这就需要用户自己实现一个 JAAS 登录模块,并在 WAS 中做相应配置以使用该登录模块,使用起来非常的不方便。在 WAS V8 中,用户可以直接使用 SAF 命令 RACMAP 来完成该映射,从而省去了用户编码、调试和配置的工作。
为了使用 RACMAP 命令,z/OS 安全产品的版本有一定的要求。SAF 需要 7760 或以上的版本,RACF 需要 z/OS version 1.11 或以上的版本。
在使用 RACMAP 命令前,需要先进行激活操作:
/*Activate the IDIDMAP class and enable it for RACLIST processing*/
SETROPTS CLASSACT(IDIDMAP) RACLIST(IDIDMAP)
下面是一个 RACMAP 命令的使用示例,注意 WITHLABEL 最多 32 个字符:
RACMAP ID(WSADMIN) MAP USERDIDFILTER(NAME('cn=wsadmin,o=ibm')) REGISTRY(NAME('ldapserver.ibm.com:3389')) WITHLABEL('Mapping LDAP wsadmin to WSADMIN') 
SETROPTS RACLIST(IDIDMAP) REFRESH
新特性三:安全强化特性
为了增强安全性,WAS V8 修改了一些缺省设置。
  • CSIv2 transport 缺省设置改为“SSL-required”,保证进出应用服务器的 CSIv2 连接都使用了安全的 SSL 连接。 

    图 2. CSIv2 inbound transport

     
     


    图 3. CSIv2 outbound transport
 
 
  • Cookie 的 HttpOnly 属性缺省值为 true,以防止客户端程序如 Java Script 通过访问 cookie 来进行跨站点脚本攻击。这一属性在管理控制台的两个地方设置:
    • 安全定制属性 com.ibm.ws.security.addHttpOnlyAttributeToCookies 缺省值设为 true,以开启 LTPA cookie 和 session cookie 的 HttpOnly 属性。在管理控制台 Security > Global security > Custom properties 

      图 4. 安全定制属性 addHttpOnlyAttributeToCookies
  •  
     
    • 在管理控制台 Security > Global security > Single sign-on (SSO)。选项“Set security cookies to HTTPOnly to help prevent cross-site scripting attacks”缺省被选中。 

      图 5. SSO 设置
  •  
     
  • 集成 session 安全:只有认证过的用户可以访问安全页面中创建的 session。具体场景详见下表:

表 1. Session 安全集成场景
Session ID 的类型未认证的 HTTP 请求访问该 session认证身份为“FRED” 的 HTTP 请求访问该 session
请求中没有传入 session ID 或该 ID 指向的 session 已经失效创建一个新的 session,用户名为匿名用户创建一个新的 session,用户名为 FRED
请求中要访问的 session ID 有效,用户名为匿名用户返回该 session返回该 session,并将用户名改为 FRED
请求中要访问的 session ID 有效,用户名为 FRED不会返回该 session,会抛出 UnauthorizedSessionRequest-
Exception 异常
返回该 session
请求中要访问的 session ID 有效,用户名为 BOB不会返回该 session,会抛出 UnauthorizedSessionRequest-
Exception 异常
不会返回该 session,会抛出 UnauthorizedSessionRequest-
Exception 异常


用户可以通过下面的路径设置 Session 安全集成:
在管理控制台中,Servers > Server types > WebSphere application servers > <server1> > Session management,选中 Select the security integration
 图 6. Session 安全集成
 


新特性四:使用 JASPI 实现定制的认证服务提供者
JASPI(或者叫 JASPIC),是 JSR196,Java Authentication SPI for Containers 的缩写。利用该技术可以实现我们自己的第三方 security provider,WAS 利用该 security provider 来处理 web 应用中的 HTTP 请求和响应的 Java EE 认证。
如果应用安全性被开启并使用 JASPI 认证,当 Web 资源(如 servlet 或 JSP 文件)被访问,security 运行时就会检查在安全配置中,该 Web 资源是否被映射到了一个 JASPI provider。如果是,则使用该 JASPI provider 来处理对该 Web 资源的 HTTP 请求和相应的认证。
JSR 196 Java Authentication Service Provider Interface for Containers specification 中定义了 JASPI provider 需要实现的接口,读者可以通过实现这些接口来开发自己的 JASPI 认证 provider。
开发完自己的 JASPI provider 后,需要在管理控制台上对其进行配置。
图 7. 在管理控制台上配置 JASPI provider
 
 

然后将 Web 应用或者 Web 应用模块与 JASPI provider 进行关联。该关联可以在应用安装时进行或者应用安装后对应用的配置进行修改完成。
图 8. Web 应用安装时进行 JASPI provider 关联
 
图 9. Web 应用安装后通过修改配置完成与 JASPI provider 的关联
 
 
 
新特性五:对 Java Servlet 3.0 中安全新特性的支持
WAS V8 提供了对 Java Servlet 3.0 规范中安全方面新特性的支持,主要包括以下几个方面:
  • 新的 servlet 安全注释 @ServletSecurity,提供了访问 servlet 是的一些安全方面的限制。
  • 可以通过方法 setRunAsRole(),declareRoles() 和 setServletSecurity() 来动态更新 @RunAs,@declareRoles 和 @ServletSecurity servlet 安全注释的内容。
  • javax.servlet.http.HttpServletRequest 中新的安全编程接口
    • boolean authenticate(HttpServletResponse response))
    • login(java.lang.String username, java.lang.String password)
    • logout()
  • 新的安全定制属性 com.ibm.websphere.security.displayRealm。如果在 web.xml 中没有指定域名,该属性指明了在 basic 登录窗口上是否显示域名。
    • 如果该属性值设为 false,即缺省设置,则显示域名为 Default Realm。
    • 如果该属性值设为 true,当使用 LTPA 认证机制是,显示 user registry 域名;当时有 Kerberos 认证机制是,显示 Kerberos 域名。
  • 新特性六:wsadmin 脚本中对 LTPA 的支持
    在 WAS V8 以前,LTPA key 的导入导出都是通过管理控制台完成的,从 WAS V8 开始,我们可以使用 Jython 或 Jacl 脚本来进行 LTPA key 的导入导出。
    importLTPAKeys 命令用来将 LTPA key 从文件中导入并添加到安全配置和运行时中。exportLTPAKeys 命令将当前运行时中使用的 LTPA key 导出到文件中。
    下面是两个命令的使用方法:
    importLTPAKeys
    Jacl:wsadmin> $AdminTask importLTPAKeys {-ltpaKeyFile file:\temp\ltpa.key -password keypassword }
    Jython:wsadmin> AdminTask.importLTPAKeys('[-ltpaKeyFile file:\temp\ltpa.key -password keypassword ]')
    exportLTAPKeys
    Jacl: wsadmin> $AdminTask exportLTPAKeys {-ltpaKeyFile file:\temp\writeltpa.key -password keypassword }
    Jython: wsadmin> AdminTask.exportLTPAKeys('[-ltpaKeyFile file:\temp\writeltpa.key -password keypassword ]')
  • 新特性七:多安全域
    在 WAS V7 中,federated repositories 用户存储库只能在全局安全级别上配置,并且每个 cell 只能有一个实例,其他的安全域只能对其进行引用,作为自己的活动存储库。在 WAS V8 中,我们可以在每个安全域中配置一个唯一的 federated repository 实例。当某个安全域是从全局安全或者其他安全域复制过来的,复制源中定义的用户和组都会被复制过来。
    新特性八:安全配置报告
    WAS 管理控制台中提供了安全配置报告的功能,用来收集和展示当前应用服务器的安全设置。收集的信息包括核心安全设置、管理员用户和组、CORBA naming roles 以及 cookie 保护等信息。从 WAS V8 开始,安全配置报告新增加了关于 session 安全、web 属性和 HttpOnly 设置的信息,使得报告信息更加完整。
    用户可以在管理控制台上通过下面的路径获取当前应用服务器的安全配置报告:
    Security > Global Security > Security Configuration Report
    新特性九:安全方面的定制属性
    WAS V8 中,安全定制属性 com.ibm.CSI.propagateFirstCallerOnly 的缺省值由以前的 false 改为了 true。当该属性的值设为 true,并且安全属性传播被开启时,当前线程的传播令牌中,只有第一个调用者被记录,因此不允许更改调用者列表(调用者列表中只有第一个调用者),也就避免了创建多个会话。当该属性值设为 false 时,调用者列表中会记录所有切换的用户,这样会对性能造成一定的影响。实际上,一般只对第一个调用者感兴趣。
    用户可以通过管理控制台Security > Global Security > Custom properties 来对该属性进行设置。
  • 新特性十:使用 WAS API 实现基于 LtpaToken2 cookie 的 Web 单点登录
    WAS V8 中提供了新的 LTPA Cookie API,使得应用开发人员可以通过编程的方式实现 downstream 单点登录,而不需要应用本身来存储和发送用户凭据。一般来说,服务器产生的认证信息会通过 cookie 发送给浏览器,通过将该 cookie 传递给下游的其他服务器,就可以完成传播用户认证信息的功能。这样用户在请求下游其他的服务器时,就不用再次输入用户认证信息了,实现了单点登录。
    图 10. LTPA Cookie API 下游认证流程图
     
     

    下面的代码演示了如何使用 LtpaCookie 实现 Web 单点登录。首先,从 SSOToken 中获取 LTPACookie,然后将该 Cookie 放入请求头部即可。
    清单 1. 使用 LtpaCookie 实现 Web 单点登录
                                     Cookie ltpaCookie = WSSecurityHelper.getLTPACookieFromSSOToken();HttpMethod method =.; //new your HttpMethod based on the target URLif (ltpaCookie != null) method.setRequestHeader(“Cookie”, ltpaCookie.getName()+”=”+ltpaCookie.getValue());


    总结
    本文详细介绍了 WAS V8 在安全方面的新特性,包括审计服务提供者设置、使用 SAF 进行 z/OS 上的分布式实体映射、安全强化特性、使用 JASPI 实现定制的认证服务提供者、对 Java Servlet 3.0 中安全新特性的支持、wsadmin 脚本中对 LTPA 的支持、多安全域、安全配置报告、安全方面的定制属性、使用 WAS API 实现基于 LtpaToken2 cookie 的 Web 单点登录。希望对读者使用 WAS V8 时有帮助。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多