Professional Documents
Culture Documents
4 Security-4 PDF
4 Security-4 PDF
4 Security-4 PDF
WebSphere Software
议程
安全概览
WebSphere的安全模型
Java EE应用程序安全性
Java2 安全性
认证
Java Authorization Contract for Containers (JACC) 规范
在WebSphere 中集成Tivoli Access Manager (TAM)
安全基础
认证 (Authentication)
认证:指在特定的业务上下文中校验客户机是否合法的过程
– 客户机可以是终端用户,机器或应用程序
认证机制:定义了安全信息的规则和安全信息在凭证(Credential)和标记(Token)中的存储格式
– 凭证是否传播到其它进程
– 当前支持的认证机制包括LTPA和Kerberos
使用认证存储库来校验用户身份
– 存储库存储 userid, password 和其它用户信息
– 证书提供了另外一种形式的用户标识
– WebSphere支持以下种类的用户存储库
• Local OS
• LDAP
• 联合存储库
• Custom Registry
可通过JAAS方式定制认证过程
4
© 2011 IBM Corporation
WebSphere Software
认证 (cont.)
此外,WAS支持SSO,信任关联和安全上下文传播
– SSO :访问多个应用服务器上的资源时,只执行一次认证
– 信任关联:信任关联允许第三方RPSS作为前端认证服务器来为WAS提供Web HTTP请求
的认证
• 增强信任关联容许第三方RPSS在安全标识之外增加声明安全属性
– 安全上下文传播:指在多层的请求链上将客户机安全标识和安全属性从前端认证服务器传
播到后端WebSphere应用服务器
5
© 2011 IBM Corporation
WebSphere Software
授权
授权指校验客户机是否有执行某项操作的适当权限的过程
– 授权信息可以以多种方式存储
• ACL, Capability lists
基于J2EE用户角色的授权
– 在组装过程中,方法的许可权被授予特定角色
– 角色定义了应用程序中的权限集合
– 在部署阶段,实际的用户和组被映射到角色中
6
© 2011 IBM Corporation
WebSphere Software
访问抉择的示例
要求用户提供凭证(用户名/密码)
检查凭证是否有效,如果有效,则创建一个包含用户信息(包括用户所属的组)的主题
从部署描述文件中获取方法调用所需要的角色r
从绑定文件中获取用户对应的角色
如果执行操作所需要的角色与分配的角色相匹配,那么访问将被允许
– 否则拒绝
调用Method() J2EE
请求
服务器
WebSphere安全模型
安全层次
HTML,
WebSphere/应用程序 命名,
Servlet/JSPs,
资源 管理
EJBs
访问控制
WebSphere 安全 WebSphere 安全
J2EE 安全API
JVM 1.4 安全
平台安全 OS 安全
Security 层次
WebSphere v6 安全
安全配置和设置在ND单元中是整个单元有效的
– 部署管理器, 所有的节点代理以及所有的服务器都应用相同的安全配置
• 认证机制、存储库等等
– 在单个应用服务器上可以对某些安全设置进行覆盖
• 关闭应用程序安全
必须启用全局安全
SSL提供了传输层安全性,可以保证信息的真实,完整(防篡改)和私密(加密)性,为客户机和
服务器提供安全的连接
在WAS中,多个组件都用到了SSL
– Web容器中的内嵌的HTTP 服务器使用HTTP over SSL
– ORB 组件使用IIOP over SSL
– LDAP客户机使用LDAP over SSL连接到LDAP用户存储库
管理:
– 可通过管理控制台,命令以及其它工具(IKEYMAN)完成SSL的各项配置
– 包括密钥库(密钥库,信任密钥库),证书,SSL属性等的配置
– 定义完成以后,可以在需要的时候使用SSL定义
J2EE 应用程序安全性
创建安全的J2EE应用程序:概述
J2EE应用程序级别的安全性通过安全角色进行指定
安全角色允许开发人员在抽象的级别指定安全设置
安全角色应用到Web和EJB应用程序
– EJB methods 或 Web URLs
可以通过以下方式进行安全性设置
– 在应用组装阶段通过部署描述符声明
– 在开发阶段应用程序调用标准API进行控制
用户和用户组与J2EE安全角色的绑定通常在应用程序部署阶段完成
– 也可在应用程序部署完成后再行配置
J2EE 安全角色:应用程序授权
Web Module
Servlets,
通过J2EE安全角色进行授权 JSPs,
– 在抽象层定义安全性,不需要指定实际的用户或用户组 HTMLs
安全角色应用到Web和EJB应用程序组件
– EJB 方法或 Web URIs EJBs
Binding
Users/
Groups
J2EE应用程序组件的安全控制
安全绑定 安全许可
EJB
Jack Method
Manager EJB
Method
Bob
EJB
Method
Servlet
Customer
JSP
Clients
J2EE HTML,
通常由部署 安全角色 通常由应用组装人 GIFs,
实际用户/用户组 人员完成 员或开发人员完成
etc.
Web Components
EJB 应用程序编程API
示例:
public void myEJBmethod() {
…
// to get bean's caller using getCallerPrincipal()
java.security.Principal principal = context.getCallerPrincipal();
String callerId= principal.getName();
// to check if bean's caller is granted Mgr role
boolean isMgr = context.isCallerInRole("Mgr");
…
}
Web应用程序编程API接口
例如:
public void doGet(HttpServletRequest request, HttpServletResponse response) {
// to get remote user using getUserPrincipal()
java.security.Principal principal = request.getUserPrincipal();
String remoteUser = principal.getName();
// to get remote user using getRemoteUser()
remoteUser = request.getRemoteUser();
// to check if remote user is granted Manager role, using isUserInRole
boolean isMgr = request.isUserInRole("Manager");
}
21 © 2011 IBM Corporation
WebSphere Software
web应用程序身份认证的类型
Basic
– 应用服务器向Web客户端(Browser)发送一个
501信号,客户端收到信号后弹出对话框提示
用户输入用户ID和密码
Form based
– 使用定制登陆表单来来输入认证信息
客户端认证
– 通过SSL安全连接将客户机证书发送给应用服
务器完成认证
改变身份: Run-As
Run-As 选项 描述
J2EE 安全性全景
WebSphere Application Server
EJB Container
Web Container CSIv2
Web HTTP(S) TCP/IP,
Clients Userid/password, Token Servlets, SSL Security
Or Client Certificate JSPs, HTMLs Server
J2EE
Security Security Token or
JAAS EJB Users/
CSIv2 Roles Identity Assertion
Clients s Groups
TCP/IP, SSL
JACC Provider
EJB Container
Userid/Password, binding
Token Credential Users/
Groups
Authenticate, Map Credential,
Authorize, Access Control
Authentication
Authentication
Authorization Authenticate User Registry
CSIv2 Protection Domain
Security Manager
Access Controller
Java 2 Security Permissions Java 2
Policy
Security Server Files
Java2 安全
Java 2 安全 JVM
Protection Domain
Java Security Manager System
Class Access Controller Resource
提供应用程序对系统级别资源访问的访问 Java 2 Security
控制机制 Permissions
策略为不同签署者和/或代码位置定义了一
组许可权 Java代码需要访问某些系统资源
– 存储在策略文件中
Java代码需要从Java2 Access Control
获得许可
所有的java代码都运行在某个安全策略下
– 许可访问某些确定的资源 Access Control查看Java 2策略文件以
确定java 代码是否具有相应的权限
WebSphere的策略文件
Policy File Default Location Description
java.policy <PROFILE_HOME>/java/jre/lib/security/java 授予所有类的默认权限
.policy
动态策略文件中使用的有效符号
动态策略文件中使用有效符号 描述
file:${application} 许可权适用于应用程序中的所有资源
file:${jars} 许可权适用于应用程序中所有工具类库JAR文件
file:${ejbComponent} 许可权适用于应用程序中所有EJB资源
file:${ejbComponent} 许可权适用于应用程序中所有web资源
file:${connectorComponent} 许可权适用于应用程序中所有连接器资源
示例
grant codeBase "file:${application}" { permission java.io.FilePermission
"${user.install.root}${/}bin${/}DefaultDB${/}-", "read,write,delete"; };
> Grants Java code in “IncCMP11.jar” file I/O permission to read/write
files in WebSphere install root bin/DefaultDB directory
28
© 2011 IBM Corporation
WebSphere Software
包含需要从单元的某些策略文件中过滤掉的许可权-支持选择性地禁用java 2 安全性
– 提供对was.policy 的”过滤”
– 会对定制许可权发出警告 (非java.* 或javax.*)
– 会对java.security.AllPermission发出警告
该过滤机制只适用于was.policy 和app.policy 文件
默认的WebSphere 策略文件:
– filterMask {
– permission java.lang.RuntimePermission "exitVM";
– permission java.lang.RuntimePermission "createSecurityManager";
– permission java.lang.RuntimePermission "setSecurityManager";
– };
能够起作用的应用程序策略就变成了:
– app.policy + was.policy + java.policy “-" filter.policy
启用Java 2 安全
当全局安全打开时就启用了java 2安全
– 可以在全局安全打开的情况下手动禁用java 2安全性
– 在打开java 2安全性之前需要对已有的应用程序进行测试
向已安装的应用程序添加java 2 安全
– 对于单个的应用程序,策略文件“was.policy”位于企业应用程序的META-INF目录下
– 如果没有提供该配置文件,在安装过程中会创建一个默认策略文件
添加/修改was.policy
– 使用AST或Rational® 工具将was.policy添加或重新安装到EAR中
– 这种方式为推荐方式,且一般不易出错
– 将was.policy 文件放到安装应用程序的文件系统适当的目录下
• <WAS_PROFILE_DIR>/config/application/<application>.ear/META-INF/
创建或修改策略文件的工具policyTool ,JDK的组成部分,位于java/jre/bin/policytool目录下
– 建议使用工具而不是手动编辑
认证
JAAS 认证与授权
使用编程接口方式认证身份和执行授权
– JDK™ 1.4开始纳入该项功能
JAAS认证可以利用多种认证技术
– LTPA 令牌, Kerberos z/OS上的 ICSF令牌, SWAM
JASS授权机制扩展了Java 2安全框架
– Java 2安全是以“代码为中心”的
• 权限是授给code base和代码的创建(签署) 者
– JAAS 是 以“用户为中心”的,基于实际运行代码的用户
• 使用Java2 安全策略设置用户的许可权
• 与JAAS的认证服务独立
可插拔认证
用户存储库接口
认证请求
实现
认证机制– 用户存储库
JAAS 实现
定制用户
使用 存储库
实现
LTPA Kerberos LDAP 本地操作 联合
Lgoin 用户存储 系统存储 存储库
Module 库 库
认证过程需要认证机制和适当的用户存储库
在任意时刻,只能启用一个认证机制和用户存储库
– 可以使用定制用户存储库可以从多个不同的存储库检索用户信息
V7及以后版本,可以通过多安全域方式灵活定制安全性
33
© 2011 IBM Corporation
WebSphere Software
认证机制: 信息流示意
用于分布式,多应用服务器和机器环境
支持Credentials转发和SSO
LTPA协议使用加密密钥(LTPA密钥)来加密和解密的服务器之间传递的用户数据
– 如果服务器位于不同的单元中,则需要共享LTPA密钥
• 在管理控制台中生成,导出和导入LTPA密钥
– 必须同步域中的所有服务器
LTPA身份验证过程和调用
用于分布式环境 - 支持Credentials转发和SSO
在使用LTPA时会生成一个令牌(LTPA Token),其中包含用户信息、过期时间,并使用密钥签
名
LTPA协议使用加密密钥来实现服务器之间传递的用户的数据完整性(签名)和数据的保密性
(加密)
认证用户存储库
用户存储库
用户存储库: 本地操作系统
使用本地操作系统执行用户和组的认证
需要提供用户ID和密码
本地操作系统用户注册表不是集中管理的,因此多数情况下在单服务器环境下使用
– Windows域用户注册表例外
用户存储库: LDAP
LDAP服务器充当用户和组信息的存储库
WAS调用LDAP服务器获得用户或组信息
– 支持用户和组的过滤
需要指定以下LDAP服务器的配置:
– 有效的服务器用户名(ID),用户密码,服务器主机地址和端口,以及基础识别名称(base
distinguished name ,DN)
– 如果LDAP服务器不支持匿名绑定,那么指定的绑定识别名称(bind DN)和绑定密码(bind
password)
用户存储库: 定制注册表
允许插入自己实现的用户注册表
编写Java™程序实现WebSphere应用服务器提供的接口
com.ibm.websphere.security.UserRegistry
– 实现不应依赖于WebSphere应用服务器的资源(例如,数据源等)
要配置定制注册表,您需要提供以下信息:
– 定制注册表实现类的完全限定名
– 有效的服务器用户ID和密码
– 实现类所需要的定制属性
CSIv2: EJB安全的认证协议
通用安全互操作规范,版本2(CSIv2)
– 定义了安全属性服务(Security Attribute Service, SAS),实现了互操作认证,委托
(Delegation)和特权(Privileges)
– 该标准由对象管理组织(OMG)定义,提供跨J2EE服务器的开放、安全的互操作通用框
架
CSIv2协议作为高级协议简化了互操作性,底层使用统一的安全传输(SSL/TLS)
CSIv2配置已集成在WAS的安全管理中
CSIv2 认证
CSIv2提供三个层次的认证功能
使用身份令牌支持上 属性层具有最高的优先级,然后是消
属性层 游服务器的身份断言 息层,最后是传输层。
使用用户ID /密码或
如果客户端三种认证均发送,只会使
消息层 带有过期时间认证令
用属性层的身份令牌(Identity token)
牌
使用SSL客户端证书
传输层 提供身份信息
配置设置
基于所做的选择,服务器会打开以
下监听接口 Servers > Application Servers
– SSL-required : 只打开SSL端口 > server_name > Ports
– SSL-supported: 打开TCP/IP 和
SSL 端口
– TCP/IP :只打开 TCP/IP 端口
端口 描述
CSIV2_SSL_MUTUALAUTH_LISTENER_ADDRESS 客户端认证SSL端口
ORB_LISTENER_PORT TCP/IP 端口
Note: For server to dynamically assign port numbers to these ports, specify a value of 0
CSIv2 认证配置
单点登录(Single Sign-On,SSO)
单点登录(Single Sign-On,SSO)
SSO是一种机制,允许在HTTP客户端在通过任意服务器的认证后,就自动通过了同一网络部
署单元或跨单元中的其它服务器的认证。
在参与SSO的域内,如果跨越多个单元则需要LTPA或Kerberos认证机制
– 为了让SSO能够工作,必须在不同单元的服务器之间共享LTPA密钥和用户存储库
SSO域(Domain)中的每个系统必须要有相同的域名(Realm names)
– 对于本地操作系统
• 在windows平台上,如果使用Domain,那么Realm names就是Domain Name。否则
Realm names是机器名
• 在UNIX平台上,Realm Name是主机名(hostname)
– 对于LDAP,安全域名就是LDAP服务器的host:port
SSO:如何工作? HTTP响应中包含带有
LTPA令牌的Cookie
Cookie的内容中包含所支
持的域名(Domains)
SSO: 管理
Security > Secure administration, applications, and infrastructure
指定来自客户端的链
接必须支持SSL
(推荐)
在这里可以指定多个
Domain
启用时,安全属性传播
到前端服务器
禁用时,SSO令牌用于
登录并重建来自用户注
可互操作的cookie发送回浏览 册表的主题(Subject)
器,支持后台级服务器
SSO 域- 可能的域名值
可能的域名值 备注和示例
空白 不发送域名-SSO只在本服务器上生效
52
© 2011 IBM Corporation
WebSphere Software
信任关联(Trust Association)
信任关联
允许第三方反向代理服务器(RPSS)作为进入WAS的Web Http请求的前端认证服务器
可将WAS设置为只使用代理服务器接受HTTP请求,或亦可同时直接接受HTTP请求
信任关联: 如何工作
User
Modified Registry
User ID
HTTP HTTP
Request Request Credentials
Reverse (4)
Web (1) Proxy (2) Web
Client Server Authenticator Modified
HTTP
(6) (5)
Requested Requested
Resource Resource (3) Trust
user id Association
If trust is valid Interceptor
信任联名– 管理
Security > Secure administration, applications, and infrastructure
List of TAI
Predefined TAI for TAM
and WebSeal already
Included
启用信任关联
JACC 规范
JACC 介绍
JACC 示例
Application
PolicyConfiguration
Installation
Provider Repository
WAS中启用安全性和JACC
Web和EJB访问决策委托给JACC提供程序
使用JACC部署应用程序
在应用程序安装阶段,将部署描述符中的安全策略转换成适当的的许可对象(Permission
Objects)
将许可对象与适当的角色进行关联
为在部署的模块创建唯一的标识符(contextID)
使用提供程序实现的PolicyConfiguration对象将信息传播给提供程序
链接应用程序中的所有模块并提交
应用服务器容器要求
Provider Repository
WebSphere
Application Server
Access J2EE Check
resource access
EJB/Web Policy Object
yes/no Container yes/no
JACC Provider
Contract
为正在访问的模块创建ContextID
为资源创建适当的Permission Object
注册规范要求的信息
将访问决策委托给Policy Object
应用服务容器要求
通过检查用户的凭证对应用进行认证
创建待访问资源的Permission Object
使用PolicyContextHandler对象注册所需要的信息
为访问的模块创建唯一的标识符
调用提供程序实现的 java.security.Policy 对象以进行访问决策
TAM 是领先的基于策略的访问控制解决方案,适用于电子商务和企业级应用
通过使用一个跨多种文件类型、应用程序提供者、设备和协议的单一安全策略服务器来执行
安全控制
访问决策基于应用程序外部信息,允许动态修改策略参数而无需重新安装应用程序
对异构的环境提供统一的认证和授权服务
TAM的客户端和服务器端都实现了JACC提供者功能
在WAS中嵌入了TAM客户端
TAM是WAS ND 提供的程序包的一部分
WebSphere Application
WebSphere Application WebSphere Application
Content Server v6 Network
Server v6 – Express Server v6
Deployment
IBM Tivoli Directory Server
No No Yes
(LDAP server)
Tivoli Access Manager
No No Yes
Server
TAM充当JACC提供者
WebSphere 管理控制台的TAM集成UI
支持使用
JACC提供者
对于其他JACC提供者,使用外部JACC
提供者的相应属性值替代属性面板中的 预填入的TAM
值
客户端值
67
© 2011 IBM Corporation
WebSphere Software
TAM 服务信息
指定WebSphere
与TAM之间进行
通信所需要的
TAM服务器信息
TAM用来与
WebSphere进行
通信的端口
TAM 策略 和授权
服务器 host:port
TAM 管理员用户
ID和密码
使用TAM与JACC的优势
健壮的基于容器的授权
集中的策略管理
通用身份(Identities)、用户概要文件以及授权机制的管理
使用TAM Web Protal Manager GUI 可对J2EE兼容或不兼容J2EE资源实现单点安全管理
不需要对应用程序代码或部署作任何的改变
使用WAS管理控制台可以方便对用户、用户组以及角色进行管理
多安全域
安全域
在以前的发行版本中,大多数的安全属性只可以在Cell级别配置
– 配置信息,比如用户注册信息,必须对所有应用程序通用
– 数据存在单元级别的配置文件security.xml中
服务器只可以覆盖很少几个特定的配置
多安全域
多安全域是安全配置更为灵活
– 允许在同一单元中启用不同的安全设置
可对管理应用程序和用户应用程序的安全设置进行分离
对于安全提供者具有更多的灵活性
– 以前的发行版本仅允许在单元级别提供插入点
提供跨域(realm)通信
WAS 7使用WSD来支持供多安全域
– 范围可以是单元、服务器、集群以及服务集成总线(service integration buses, SIB)
WSD中的配置数据可以覆盖全局安全配置数据
– 全局安全配置是供管理应用程序使用的安全配置,也是用户程序的默认安全配置
管理应用程序继续使用来自全局安全配置的数据
WebSphere的多安全域
应用可以拥有自己的应用安全域以及独有的用户
Cluster
一个集群中的应用共享一个应用安全域
Realm
Deployment
Manager Security
Configuration 一个单元中可以拥有多个安全域
中央管理中的多个安全域提供了更灵活的安全配置
Deployment Manager、Node Agent、与管理子系统
都拥有自己的安全配置 可以将用户安全域与管理安全域分离
WSD configurations
Global security Global
–
–
User registry
Trust Association Interceptor (TAI)
Security Cell
Configuration
– SPNEGO
(security.xml)
–
–
Authorization
Login configurations
Node 1
– Application security enablement WSD Configuration
– Java 2 security Domain 1
– RMI/IIOP (CSIv2 protocol) (domain-security.xml) Server 1.1
– Custom Properties
– Authentication mechanisms
– SSL WSD Configuration
– Domain 2
–
Web attributes (SSO)
Audit (domain-security.xml)
Server 1.2
Server security WSD Configuration
–
–
User registry
Trust Association Interceptor (TAI)
Domain 3 Cluster
(domain-security.xml)
– SPNEGO
–
–
Authorization
Login configurations
Node 2
– Application security enablement
–
–
Java 2 security
RMI/IIOP (CSIv2 protocol) User applications: Server 2.1
– Custom Properties in S1.1 will use the security attributes defined in Domain2
– LTPA Timeout
in cluster will use the security attributes defined in Domain3
in S2.2 will use the security attributes defined in Domain1
Any attributes that are missing in a domain are obtained
Server 2.2
from global security.xml
75
© 2011 IBM Corporation
WebSphere Software
安全任务
Global security任务中增加了配置多安全域
的链接
Security domains任务允许用户管理和配置
它们的环境中的安全域
全局安全性设置(Global security)
添加了访问安全域的链接
安全域
列出已配置的安全域
创建和管理安全域
安全域属性
配置安全域的范围
– 整个单元
– 特定服务器
– 集群
– 服务集成总线(service integration
buse,SIB)
安全属性
属性部分定义了域所使用的安全
设置
属性可以定制
WSD中的限制
联邦式的存储库(VMM)
– 单元中只可以存在一个VMM配置或实例
– 多安全域可以使用联邦存储库,但必须共享同一个VMM实例
安全审计
安全审计
提供审计记录,可用来确保安全计算环境的完整性
获取认证、授权、系统管理以及其它安全事件并记录到审计事件日志中
– 提供可以用来稽核的审计跟踪
– 可以用来进行漏洞分析
– 提供一种机制,可以证明符合现行的法律制度
安全审计特性
WAS安全审计特性提供了基于不同事件来生成报告一种方法
– 认证,授权,资源访问等等
– 可以使用过滤器来定义事件子集
应当尽量减少日常的审计事件收集
有两中插件(plug-in)
– Audit Event Factory,用来获取审计数据
– Audit Service Provider,将获取的数据并输出到后端存储库
– WAS配置了默认的插件实现,其将审计记录输出到二进制审计日志中
WAS安全审计特能为第三方解决方案提供了插拔(plug-in)点
审计数据
可以将收集到的审计数据保护起来以免受到破坏
– 可对数据进行加密和签名
加密由Auditor进行管理
– 用来加密数据的证书是由审计子系统进行管理,配置在audit.xml文件中
签名是由WAS进行管理的
– 用来对数据签名的证书是由WAS进行管理的,定义在security.xml配置文件中
Audit Reader
Audit Reader用来读取生成的IBM二进制审计日志
– 可以根据审计数据生成HTML报告
– 支持读取未加密未签名、加密未签名、未加密签名以及加密并签名的各类日志文件
– 作为AdminTask进行调用的
86
86 © 2011 IBM Corporation
WebSphere Software
审计阅读程序显示的报告
WAS v7通过安全角色提供了细粒度安全管理
Security Configuration
Monitor
总结与参考资料
总结
安全的基本概念
J2EE的安全模型
WebSphere中的安全控制
JACC规范的细节
WebSphere中的TAM集成
安全审计
References
JSR 115 规范
– www.jcp.org/en/jsr/detail?id=115
RedBooks
– SG24-6316
Thai
Traditional Chinese
Russian
Gracias Spanish
Thank You
English
Merci French
Obrigado
Brazilian Portuguese
Arabic
Danke
Grazie
Italian German
Simplified Chinese
Japanese