0 策略文件续:
看如下策略文件myPolicy.txt
keystore "ijvmkeys"; grant signedby "friend" { permission java.io.FilePermission "d:/testPolicy.txt", "read,write"; }; grant signedby "stranger" { permission java.io.FilePermission "d:/testPolicy.txt", "read,write"; }; grant codeBase "file:D:/workspace/TestPolicy/bin/*" { permission java.io.FilePermission "d:/testPolicy.txt", "read,write"; };
第一行:keystore "ijvmkeys",这一行的意思,密钥对存放在当前目录一个叫ijvmkeys的文件里(记得笔记八做过的jar包签名实验吗)
第二行:grant signedby "friend",grant是授权的意思,这一行的意思是,给一个被“friend”的密钥对签名的文件授权
第三行:permission java.io.FilePermission "d:/testPolicy.txt", "read,write";这行的意思是对于d:/testPolicy.txt赋予读写的权限
倒数第三行:grant codeBase "file:D:/workspace/TestPolicy/bin/*" ,对D:/workspace/TestPolicy/bin/*下的所有文件赋予权限。
策略文件总结:
a) 策略文件可以给一系列被签名的代码库(“friend”,‘stranger“都是代码库)授权,
也可以给一个代码来源(一个具体的路径或者说url就是一个代码来源)授权。
b) 策略文件不仅可以存储在文件中(后缀名是什么不重要),还可以存放在数据库里。
疑问: 一个应用程序对应一个策略单例,一个策略单例对应一个策略文件,它到底怎么对应的???
1 保护域:
a) 类装载器将class文件load内存的时候会将它放置到一个保护域中,
b) 每一个装入虚拟机的类型都会属于且仅属于一个保护域,
c) 保护域定义了授予代码的执行权限,
d) 一个保护域对应策略文件中的一个或多个Grant字句
下面看类加载器加载类文件到指定保护域的流程:
类装载器知道它装载的所有类或接口的代码库和签名者---> 它利用这些信息来创建一个CodeSource对象
--->将这个CodeSource对象传递个当前Policy对象的getPermissions()方法
--->得到这个抽象类java.security.PermissionCollection的子类实例
--->实例化对象ProtectDomain ---> 传递给defineClass()方法
2 上文涉及的知识点详解:
2.1) codeSource:代码源
签名的版本,签名者,还有被签名的类名,以及这个类的hash摘要
classLoader通过读取class文件,jar包得知谁为这个类签过名(可以有多个签名者)
后封装成一个签名者数组赋给codeSource对象的signers成员,
通过这个类的来源(可能来自一个本地的url或者一个网络的ur)赋给codeSource的location成员,
这个类的公钥证书赋给codeSource的certs成员(常一个jar是能够被多个团体或者机构担保的,也就是我们说的认证)
源码如下:
public class CodeSource implements java.io.Serializable { private static final long serialVersionUID = 4977541819976013951L; /** * The code location. * * @serial */ private URL location;//本地代码库 /* * The code signers. */ private transient CodeSigner[] signers = null;//签名者 /* * The code signers. Certificate chains are concatenated. */ private transient java.security.cert.Certificate certs[] = null;//证书
2.2) Policy:策略, 就是用来读取策略文件的一个单例对象,通过传入的CodeSource对象
(由于codeSource对象里包含了签名者和代码来源),所以他通过读取grant段,
取出一个个的Perssiom然后返回一个PerssiomCollection,这个类有一个很重要的成员变量,
// Cache mapping ProtectionDomain to PermissionCollection private WeakHashMap pdMapping; private static void initPolicy (final Policy p) { ...... if (policyDomain.getCodeSource() != null) { ....... synchronized (p.pdMapping) { // cache of pd to permissions p.pdMapping.put(policyDomain, policyPerms); } } return; }
pdMapping就是把保护域对象当做key将权限集合当做value存在在了这个map里,
所以我们说一个保护域对应多个策略文件的grant子句的permission。
2.3) ProtectionDomain:保护域,他就是用来容纳class文件,还有perssiom,codeSource的一个对象,
代码如下:
public class ProtectionDomain { /* CodeSource */ private CodeSource codesource ;//代码源 /* ClassLoader the protection domain was consed from */ private ClassLoader classloader;//类装载器 /* Principals running-as within this protection domain */ private Principal[] principals; /* the rights this protection domain is granted */ private PermissionCollection permissions;//权限集合
2.4) Permission:权限,它的结构也很简单,权限名和动作,
java.io.FilePermission是一个权限名
而动作则是read和write,
2.5) 总计关系图如下:
3 总结:
类装载器装载类时--->调用安全管理器--->通过判定策略决定我们是否加载这个类/执行某操作
---> 生成ProtectionDomain保护域后,class字节码在内存中被放在了这个保护域中。
相关推荐
为了保障程序的安全性,JVM设计了一套严谨的安全体系,其中“双亲委派命名空间保护域策略”是关键的一环。本实例分析将深入探讨这一策略,帮助开发者更好地理解和应用Java开发中的安全机制。 首先,让我们理解...
- 保护域(Protection Domain):在Java安全策略中定义的一组权限,用于控制代码访问系统资源的权限。 - 类加载器(Class Loader):在Java中负责加载类文件,是实现Java安全策略的一个重要组件,它可以动态加载类,...
- **安全与保护域**:探讨了JVM的安全机制,包括类加载器的安全策略和权限设置等。 综上所述,《Java虚拟机规范(Java SE 7版)》不仅为Java开发者提供了一个深入了解JVM内部工作原理的机会,也为JVM实现者提供了一...
9. **备份与恢复**:理解WebLogic的备份策略,包括如何备份域配置、数据源和应用,以及在出现问题时如何恢复。 10. **集成与扩展**:探讨WebLogic与其他系统(如数据库、JMS队列、EJB容器)的集成方法,以及如何...
- **保护域** - 内部域:保护企业内部网络资源。 - 外部域:管理对外部用户的访问权限。 - **受保护对象** - Web 资源:网站、Web 应用程序等。 - 应用程序接口(API):API 访问控制。 - 物理资源:如打印机...
- **安全域**:是卡片上的逻辑隔离区域,每个域有自己的安全策略和管理结构,可以独立运行不同的应用。 - **全局服务应用**:提供跨安全域的服务,如安全管理、资源分配等。 - **运行时环境**:包含了Java Card...
学习WebLogic 11g,你需要掌握如何配置、管理和优化服务器实例,创建和管理域,以及实施高可用性和负载均衡策略。 JRockit是Oracle的高性能Java虚拟机,专为关键任务和实时系统设计。它的特点是内存管理优化、低...
- JVM参数调整:根据系统资源和应用需求调整内存分配、垃圾回收策略等。 - 监控和诊断工具:通过JMX和WLST(WebLogic Scripting Tool)收集性能数据。 7. **日志和诊断**: - 日志配置:设置不同级别的日志输出...
5. **安全性**:介绍WebLogic Server的安全特性,如身份验证、授权、加密和SSL/TLS,以及如何配置和管理安全策略以保护应用程序和数据。 6. **性能优化**:详细解析如何通过调整服务器设置、资源管理和JVM参数来...
管理员应配置适当的策略以保护敏感信息和资源。 **8. JMS(Java Message Service)** WebLogic集成JMS,支持点对点和发布/订阅两种消息模型。JMS可用于实现异步通信和解耦应用组件,提高系统可扩展性。 **9. 故障...
管理员可以配置SSL/TLS协议来保护通信,使用JAAS(Java Authentication and Authorization Service)定义用户角色和权限,以及通过数据源加密敏感信息。 5. **JMS与消息传递** WebLogic Server集成JMS服务,允许...
这涉及到权限对象、保护域和安全管理器。权限对象代表特定的操作,保护域包含了拥有这些权限的代码,而安全管理器是执行权限检查的组件。 API设计在Java2平台安全技术中扮演着关键角色。Java提供了丰富的安全相关的...
- **保护域**:保护域机制允许JVM为不同来源的代码分配不同的权限。 - **访问控制器**:访问控制器负责执行权限检查,确保代码只能访问被授权的资源。 - **Java安全模型的不足和今后的发展方向**:尽管Java的安全...
总结来说,Java安全技术通过严格的字节码验证、安全管理器、权限控制、保护域和策略文件来构建安全屏障。这些机制共同作用,确保了Java应用程序在运行时能够抵御各种安全威胁,同时允许开发者在可控的环境下使用网络...
理解如何设置域安全策略、配置证书和保护敏感数据对于保障企业信息安全至关重要。 八、故障诊断与日志分析 WebLogic提供丰富的日志和诊断工具,如诊断框架(Diagnosis Framework)、JMX监控、JFR(Java Flight ...
在策略文件中定义各种权限类和权限名称,允许代码在不同域中拥有不同的访问权限。例如,可以指定一个Applet的权限,限制其访问本地文件系统的能力。 Java安全工具中,还包括Jarsigner工具,它用于对Java归档文件...
4. **性能调优**:WebLogic Server提供了丰富的性能调优选项,包括线程池设置、内存分配、JVM参数调整、日志和诊断工具的使用等。理解和实践这些技巧对于确保应用程序的高效运行至关重要。 5. **高可用性与故障转移...
2. 快速备份与恢复:利用LVM快照、pg_dump等工具进行数据库备份,结合Azure Disk snapshot和阿里云的对象存储服务(OSS)进行数据保护,通过webhook触发备份流程。 3. 容灾恢复:建立多地域、多可用区的数据中心,...
了解如何配置SSL/TLS以保护通信安全,设置角色和权限以实现细粒度访问控制,以及管理证书和密钥库,都是确保系统安全的基础。此外,WebLogic Server还支持与目录服务(如LDAP)集成,以实现集中化的用户身份验证和...