22
J2EE—— 第 32 第 第第

J2EE —— 第 32 章 安全

  • Upload
    sammy

  • View
    99

  • Download
    0

Embed Size (px)

DESCRIPTION

J2EE —— 第 32 章 安全. 概述. 组件的安全性由容器提供 声明性安全:部署描述符 程序性安全:应用程序中 域:相同身份验证策略的一批用户和组 角色:访问资源权限的抽象名字 JBoss 安全设置 server/default/conf/login-config.xml roles.properties 和 users.properties 文件. 角色映射. 保护 Web 资源. 参见 web.xml 中的 指定安全连接 SSL : - PowerPoint PPT Presentation

Citation preview

Page 1: J2EE —— 第 32 章  安全

J2EE—— 第 32 章 安全

Page 2: J2EE —— 第 32 章  安全

概述 组件的安全性由容器提供

声明性安全:部署描述符 程序性安全:应用程序中

域:相同身份验证策略的一批用户和组 角色:访问资源权限的抽象名字 JBoss 安全设置

server/default/conf/login-config.xml roles.properties 和 users.properties 文件

Page 3: J2EE —— 第 32 章  安全

角色映射

Page 4: J2EE —— 第 32 章  安全

保护 Web 资源 参见 web.xml 中的 <security-constraint> 指定安全连接 SSL :<transport-guarantee> CONFIDENGTIAL 和 INTEGRAL

角色用户映射: ibm-application-bnd.xmi 在 Web 层使用应用程序安全

GetRemoteUser IsUserInRole GetUserPrincipal

Page 5: J2EE —— 第 32 章  安全

了解登录身份验证 HTTP 基本身份验证 基于表单的身份验证 客户端证书身份验证 相互身份验证 摘要身份验证

Page 6: J2EE —— 第 32 章  安全

使用 HTTP 基本身份验证

Page 7: J2EE —— 第 32 章  安全

使用基于表单的身份验证

Page 8: J2EE —— 第 32 章  安全

使用客户端证书身份验证 HTTP 上的 SSL 公开密钥验证身份 数据加密 服务器身份验证 消息完整性 客户端身份验证 X.509 证书

Page 9: J2EE —— 第 32 章  安全

使用基于证书的相互身份验证

Page 10: J2EE —— 第 32 章  安全

使用基于密码的相互身份验证

Page 11: J2EE —— 第 32 章  安全

使用摘要身份验证 基于用户名和密码的摘要(加密) 比基本身份验证的 base64 编码安全得多 举例:创建基于表单验证的 Web 客户端 什么是 SSL

身份验证 机密性 完整性

Page 12: J2EE —— 第 32 章  安全

了解数字证书 身份验证:知名发证机构签发 数据加密:自签发证书 使用 keytool

生成服务器证书 keystore.jks 导出证书到 server.cer 签发证书 导入证书到信任库 cacerts.jks 生成客户端证书 导出到 client.cer 添加证书到信任库 cacerts.jks

Page 13: J2EE —— 第 32 章  安全

配置 SSL 连接器 参照 JBoss 有关文档 验证: https://localhost:1043/ 并非所有页面都需要安全连接,主要是:

登录、个人信息、对帐单、信用卡信息页面 激活 SSL 上的相互身份验证

将身份验证方法设为 Client-Certificate 或将 cerificate 域的 clientAuth 属性设置为 true

证实相互身份验证正在运行:调试消息<sysproperty key=“javax.net.debug” value=“ssl, handshake”/><sysproperty key=“javax.net.ssl.keystore” value=“${key.store}”/><sysproperty key=“java.net.ssl.keyStorePassword” value=“${key.s

tore.password}”/>

Page 14: J2EE —— 第 32 章  安全

传输层安全 部署描述符中指定用户身份验证方法 <a

uth-method> 部署描述符中定义传输保证 <transport-guarantee>

Page 15: J2EE —— 第 32 章  安全

具有 JAX-RPC 的基本身份验证Stub stub = createProxy();stub._setProperty( javax.xml.rpc.Stub.USERNAME_PROPERTY, username); stub._setProperty( javax.xml.rpc.Stub.PASSWORD_PROPERTY, password); stub._setProperty (javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY, e

ndpointAddress); HelloIF hello = (HelloIF)stub; System.out.println(hello.sayHello("Duke (secure)"));

private static Stub createProxy() { // Note: MyHelloService_Impl is implementation-specific. return (Stub)(new MyHelloService_Impl().getHelloIFPort()); }

Page 16: J2EE —— 第 32 章  安全

具有 JAX-RPC 的 HTTP/SSL之上的客户端证书身份验证

trust.store=${j2ee.home}/domains/domain1/config/cacerts.jks trust.store.password=changeit key.store=${j2ee.home}/domains/domain1/config/keystore.jks key.store.password=changeit

System.setProperty("javax.net.ssl.keyStore", keyStore);System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword); System.setProperty("javax.net.ssl.trustStore", trustStore); System.setProperty("javax.net.ssl.trustStorePassword", trustStorePasswor

d); stub._setProperty( javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY, e

ndpointAddress); 指定 <auth-method> 为 Client-Certificate 指定 <transport-guarantee> 为 CONFIDENTIAL

Page 17: J2EE —— 第 32 章  安全

EJB 层安全 声明方法权限: ejb-jar.xml<security-role> <role-name>Administrators</role-name></security-role><method-permission> <role-name>Administrators</role-name> <method> <ejb-name>StatelessContainer</ejb-name> <method-name>helloManagers</method-name> </method></method-permission> 程序性安全context.getCallerPrincipal().getName(); context.isCallerInRole(“custome

r”)

Page 18: J2EE —— 第 32 章  安全

应用程序客户端层安全 Java Authentication and Authrorizatio

n Service (JAAS) 初始化 LoginContext 对象激活身份验证 实现 CallBackHandler ,回调实现与用

户的交互

Page 19: J2EE —— 第 32 章  安全

EIS 层安全 容器管理签名Context initctx = new InitialContext(); javax.resource.cci.ConnectionFactory cxf =(javax.resource.cci.Connecti

onFactory)initctx.lookup( "java:comp/env/eis/MainframeCxFactory"); javax.resource.cci.Connection cx = cxf.getConnection(); 组件管理签名com.myeis.ConnectionSpecImpl properties = //..properties.setUserName("...");properties.setPassword("...");javax.resource.cci.Connection cx = cxf.getConnection(properties);

Page 20: J2EE —— 第 32 章  安全

配置资源适配器安全性 身份验证机制:用户名 / 密码, Kerber

os 重新验证支持:用不同于建立连接时所

用的安全上下文来调用 getConnection时

安全权限:例如允许资源查找任何远程主机名

permission java.net.SocketPermission *, "resolve";

Page 21: J2EE —— 第 32 章  安全

传播安全标识

Page 22: J2EE —— 第 32 章  安全

配置组件的传播安全标识 Security Identity

Use Caller ID Run As Roles