`

jvm_10_策略和保护域

    博客分类:
  • jvm
 
阅读更多

 

 

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字节码在内存中被放在了这个保护域中。

 

 

 

  • 大小: 121 KB
  • 大小: 231.5 KB
分享到:
评论

相关推荐

    实例分析JVM安全体系双亲委派命名空间保护域策略Java开

    为了保障程序的安全性,JVM设计了一套严谨的安全体系,其中“双亲委派命名空间保护域策略”是关键的一环。本实例分析将深入探讨这一策略,帮助开发者更好地理解和应用Java开发中的安全机制。 首先,让我们理解...

    java 安全策略的研究与应用

    - 保护域(Protection Domain):在Java安全策略中定义的一组权限,用于控制代码访问系统资源的权限。 - 类加载器(Class Loader):在Java中负责加载类文件,是实现Java安全策略的一个重要组件,它可以动态加载类,...

    Java虚拟机规范(Java_SE_7).pdf

    - **安全与保护域**:探讨了JVM的安全机制,包括类加载器的安全策略和权限设置等。 综上所述,《Java虚拟机规范(Java SE 7版)》不仅为Java开发者提供了一个深入了解JVM内部工作原理的机会,也为JVM实现者提供了一...

    企业内部机密,WebLogic10实战,超详细介绍+例子

    9. **备份与恢复**:理解WebLogic的备份策略,包括如何备份域配置、数据源和应用,以及在出现问题时如何恢复。 10. **集成与扩展**:探讨WebLogic与其他系统(如数据库、JMS队列、EJB容器)的集成方法,以及如何...

    Deployment_Guide_Series_IBM_Tivoli_Access_Manager_for_e-business_6.0(1)

    - **保护域** - 内部域:保护企业内部网络资源。 - 外部域:管理对外部用户的访问权限。 - **受保护对象** - Web 资源:网站、Web 应用程序等。 - 应用程序接口(API):API 访问控制。 - 物理资源:如打印机...

    GP规范 _第2部分_中文

    - **安全域**:是卡片上的逻辑隔离区域,每个域有自己的安全策略和管理结构,可以独立运行不同的应用。 - **全局服务应用**:提供跨安全域的服务,如安全管理、资源分配等。 - **运行时环境**:包含了Java Card...

    oracle中间件专家认证1Z0-523

    学习WebLogic 11g,你需要掌握如何配置、管理和优化服务器实例,创建和管理域,以及实施高可用性和负载均衡策略。 JRockit是Oracle的高性能Java虚拟机,专为关键任务和实时系统设计。它的特点是内存管理优化、低...

    Oracle Weblogic Server 11gR1 PS2: Administration Essentials

    - JVM参数调整:根据系统资源和应用需求调整内存分配、垃圾回收策略等。 - 监控和诊断工具:通过JMX和WLST(WebLogic Scripting Tool)收集性能数据。 7. **日志和诊断**: - 日志配置:设置不同级别的日志输出...

    Oracle WebLogic Server开发权威指南_pdf_源码

    5. **安全性**:介绍WebLogic Server的安全特性,如身份验证、授权、加密和SSL/TLS,以及如何配置和管理安全策略以保护应用程序和数据。 6. **性能优化**:详细解析如何通过调整服务器设置、资源管理和JVM参数来...

    Weblogic管理和应用

    管理员应配置适当的策略以保护敏感信息和资源。 **8. JMS(Java Message Service)** WebLogic集成JMS,支持点对点和发布/订阅两种消息模型。JMS可用于实现异步通信和解耦应用组件,提高系统可扩展性。 **9. 故障...

    WebLogic相关文档

    管理员可以配置SSL/TLS协议来保护通信,使用JAAS(Java Authentication and Authorization Service)定义用户角色和权限,以及通过数据源加密敏感信息。 5. **JMS与消息传递** WebLogic Server集成JMS服务,允许...

    Java2平台安全技术

    这涉及到权限对象、保护域和安全管理器。权限对象代表特定的操作,保护域包含了拥有这些权限的代码,而安全管理器是执行权限检查的组件。 API设计在Java2平台安全技术中扮演着关键角色。Java提供了丰富的安全相关的...

    深入java虚拟机笔记

    - **保护域**:保护域机制允许JVM为不同来源的代码分配不同的权限。 - **访问控制器**:访问控制器负责执行权限检查,确保代码只能访问被授权的资源。 - **Java安全模型的不足和今后的发展方向**:尽管Java的安全...

    Java安全技术.pptx

    总结来说,Java安全技术通过严格的字节码验证、安全管理器、权限控制、保护域和策略文件来构建安全屏障。这些机制共同作用,确保了Java应用程序在运行时能够抵御各种安全威胁,同时允许开发者在可控的环境下使用网络...

    Weblogic培训资料

    理解如何设置域安全策略、配置证书和保护敏感数据对于保障企业信息安全至关重要。 八、故障诊断与日志分析 WebLogic提供丰富的日志和诊断工具,如诊断框架(Diagnosis Framework)、JMX监控、JFR(Java Flight ...

    Java技术:java对安全性的支持.pdf

    在策略文件中定义各种权限类和权限名称,允许代码在不同域中拥有不同的访问权限。例如,可以指定一个Applet的权限,限制其访问本地文件系统的能力。 Java安全工具中,还包括Jarsigner工具,它用于对Java归档文件...

    Weblogic学习资料

    4. **性能调优**:WebLogic Server提供了丰富的性能调优选项,包括线程池设置、内存分配、JVM参数调整、日志和诊断工具的使用等。理解和实践这些技巧对于确保应用程序的高效运行至关重要。 5. **高可用性与故障转移...

    藏经阁-高可用实践:从淘宝到上云的差异.pdf

    2. 快速备份与恢复:利用LVM快照、pg_dump等工具进行数据库备份,结合Azure Disk snapshot和阿里云的对象存储服务(OSS)进行数据保护,通过webhook触发备份流程。 3. 容灾恢复:建立多地域、多可用区的数据中心,...

    Weblogic管理指南

    了解如何配置SSL/TLS以保护通信安全,设置角色和权限以实现细粒度访问控制,以及管理证书和密钥库,都是确保系统安全的基础。此外,WebLogic Server还支持与目录服务(如LDAP)集成,以实现集中化的用户身份验证和...

Global site tag (gtag.js) - Google Analytics