`
jguangyou
  • 浏览: 367891 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java.policy 文件格式及使用方法(转)

阅读更多

一、Java中安全策略的概念
----Java应用程序环境的安全策略,详细说明了对于不同的代码所拥有的不同资源的许可,它由一个Policy对象来表达。为了让applet(或者运行在 SecurityManager下的一个应用程序)能够执行受保护的行为,例如读写文件,applet(或 Java应用程序)必须获得那项操作的许可,安全策略文件就是用来实现这些许可。
----Policy对象可能有多个实体,虽然任何时候只能有一个起作用。当前安装的Policy对象,在程序中可以通过调用getPolicy方法得到,也可以通过调用setPolicy方法改变。Policy对象评估整个策略,返回一个适当的Permissions对象,详细说明哪些代码可以访问哪些资源。

---- 策略文件可以储存在无格式的ASCII文件或Policy类的二进制文件或数据库中。本文仅讨论无格式的ASCII文件的形式。

二、Policy文件的格式
----为了能够更好地理解下面的内容,建议在阅读时参照 jdk1.2jrelibsecurityjava.policy文件和jdk1.2jrelibsecurityjava.security文件的内容。
----Policy文件的语法格式与说明

----一个Policy文件实质上是一个记录列表,它可能含有一个 “keystore”记录,以及含有零个或多个“grant”记录。其格式如下:

 

keystore “some_keystore_url", “keystore_type";

grant [ SignedBy “signer_names" ] [ , CodeBase “URL" ] {
Permission permission_class_name [ “target_name" ]
[ , “action"] [, SignedBy “signer_names" ];
Permission ...
};

----(1)“keystore"记录

----一个keystore是一个私有密钥(private keys)数据库和相应的数字签名,例如X.509证书。Policy文件中可能只有一条keystore记录(也可能不含有该记录),它可以出现在文件中grant记录以外的任何地方。Policy配置文件中指定的 keystores用于寻找grant记录中指定的、签名者的公共密钥(public keys),如果任何grant 记录指定签名者(signer_names),那么,keystore记录必须出现在policy配置文件中。

----“some_keystore_url"是指keystore的URL位置, “keystore_type"是指keystore的类型。第二个选项是可选项,如果没有指定,该类型则假定由安全属性文件(java.security)中的“keystore.type"属性来确定。keystore类型定义了 keystore信息的存储和数据格式,用于保护keystore中的私有密钥和keystore完整性的算法。 Sun Microsystems支持的缺省类型为“JKS”。

---- (2)“grant"记录

----在Policy文件中的每一个grant记录含有一个CodeSource (一个指定的代码)及其permission(许可)。

----Policy文件中的每一条grant记录遵循下面的格式,以保留字“grant”开头,表示一条新的记录的开始,“Permission”是另一个保留字,在记录中用来标记一个新的许可的开始。每一个grant记录授予一个指定的代码(CodeBase)、一套许可(Permissions)。

----permission_class_name必须是一个合格并存在的类名,例如java.io.FilePermission,不能使用缩写(例如,FilePermission)。

----target_name用来指定目标类的位置,action用于指定目标类拥有的权限。

----target_name可以直接指定类名(可以是绝对或相对路径)、目录名,也可以是下面的通配符:

directory/* 目录下的所有文件
* 当前目录的所有文件
directory/- 目录下的所有文件,包括子目录
- 当前目录下的所有文件,包括子目录
<< ALL FILES >>文件系统中的所有文件

----对于java.io.FilePermission,action可以是:read, write, delete和execute。

----对于java.net.SocketPermission,action可以是:listen, accept,connect,read,write。

---- (3)Policy文件中的属性扩展(Property Expansion)属性扩展与shell中使用的变量扩展类似,它的格式为:
“${some.property}"

----实际使用的例子为:
permission java.io.FilePermission
“${user.home}", “read";

----“${user.home}"的值为“d:Project",因此,下面的语句和上面的语句是一样的:
permission java.io.FilePermission “d:Project ", “read";

三、实 例
----当初始化Policy时,首先装载系统Policy,然后再增加用户Policy,如果两者都不存在,则使用缺省的Policy,即原始的沙箱模型。
----系统Policy文件的缺省位置为:
{java.home}/lib/security/java.policy (Solaris)
{java.home}libsecurityjava.policy (Windows)

----用户Policy文件的缺省位置为:
{user.home}/.java.policy (Solaris)
{user.home}.java.policy (Windows)

----其实,在实际使用中,我们可能不会像上面介绍的那么复杂,特别是在不使用数字签名时。这时,我们完全可以借鉴JDK 1.2提供给我们的现成的 jdk1.2jrelibsecurityjava.policy文件,根据我们的需要做相应的修改,本文就针对不使用数字签名情况详细说明安全策略文件的用法。

----下面,是一个完整的在Windows下使用的.java.policy文件。在文件中,分别使用注释的形式说明了每个“permission”记录的用途。

 

// For LanServerTalk.java and LanClientTalk.java

grant {
//对系统和用户目录“读”的权限
 

 

permission java.util.PropertyPermission “user.dir", “read";
permission java.util.PropertyPermission “user.home", “read";
permission java.util.PropertyPermission “java.home", “read";
permission java.util.PropertyPermission “java.class.path", “read";
permission java.util.PropertyPermission “user.name", “read";

//对线程和线程组的操作权限
permission java.lang.RuntimePermission “modifyThread";
permission java.lang.RuntimePermission “modifyThreadGroup";

//操作Socket端口的各种权限
permission java.net.SocketPermission “-", “listen";
permission java.net.SocketPermission “-", “accept";
permission java.net.SocketPermission “-", “connect";
permission java.net.SocketPermission “-", “read";
permission java.net.SocketPermission “-", “write";

//读写文件的权限
permission java.io.FilePermission “-", “read";
permission java.io.FilePermission “-", “write";

//退出系统的权限,例如System.exit(0)
permission java.lang.RuntimePermission “exitVM";
};

四、.Java.policy文件的使用
---- 对于Windows 95/98/NT,使用.Java.policy文件的方法主要有下面两种。
----1. 使用缺省目录

---- 我们可以简单地将编辑好的.Java.policy文件拷贝到 Windows 95/98/NT的HOME目录,这时,所有的applet(或Java应用程序)可能都拥有某些相同的权限,使用起来简单,但不灵活(例如:对于Java.io.FilePermission ,其目标类的 target_name必须使用绝对路径),如果不是在企业内部网中使用,还可能存在一定安全隐患。

---- 2. 在命令行中指定

---- 在命令行,如果我们希望传递一个Policy文件给 appletviewer,还可以使用“-J-Djava.security.policy"参数来指定policy的位置:

appletviewer -J-Djava.security.policy=pURL myApplet

----pURL为Policy文件的位置。下面,是一个实际的例子,以当前目录的.java.policy文件所指定的安全策略运行当前目录的LanServerTalk.html(文件中装载并运行LanServerTalk.Java):

appletviewer -J-Djava.security.policy
=.Java.policy LanServerTalk.html

----这种方法使用灵活,特别是作为一个软件包在企业内部网中发布时,安装、设置和迁移软件,基本无须修改Policy文件的内容,使用起来相当简单,而且,安全许可的范围控制较精细

分享到:
评论

相关推荐

    local_policy.jar和US_export_policy.jar资源.zip

    因为密钥长度是受限制的, java运行时环境读到的是受限的policy文件. 文件位于${java_home}/jre/lib/security, 这种限制是因为美国对软件出口的控制. jdk8 和 java9 之后,$JAVA_HOME/jre/lib/security路径下 的 ...

    local_policy.jar和US_export_policy.jar java解密

    因为某些国家的进口管制限制,Java发布的运行环境包中的加解密有...将local_policy.jar和US_export_policy.jar这两个文件替换%JRE_HOME%\lib\security和%JDK_HOME%\jre\lib\security下原来的文件,注意先备份原文件。

    使用Policy文件来设置Java的安全策略.doc

    使用Policy文件来设置Java的安全策略.doc使用Policy文件来设置Java的安全策略.doc

    JDK16的security包

    Illegal key size or default parameters是指密钥长度是受限制的,java运行时环境读到的是受限的policy文件。文件位于${java_home}/jre/lib/security 这种限制是因为美国对软件出口的控制。 解决: 替换jdk jar...

    Oracle官方java jdk JCE无限制权限策略文件.zip 【jce_policy-6到jce_policy-8】

    Oracle官方java jdk JCE无限制权限策略文件。该策略文件均从官网下载。文件清单:JDK2//JDK4/JDK5/JDK6/JDK7/JDK8 的 local_policy.jar、US_export_policy.jar

    加密解密文件local_policy.jar和US_export_policy.jar

    local_policy.jar和US_export_policy.jar 包括jdk6 jdk7 以及jdk8 三种包,下载后解压可得. 另外里面附带到官方网站的下载方法,方便以后有更高的版本可以及时查找下载

    Java项目开发与毕业设计指导

    像其他的Java应用程序一样,Aglet平台需要通过Java policy文件(通常是.java.policy)来打开Socket、执行Agent、获取本地文件等。这项工作可以通过ant来完成,我们可以在bin目录下输入如下指令: ant install-home...

    jdk1.8.0-xx,下载无限强度权限策略文件补丁包

    使用Java加载密钥时,抛出异常...其他版本,下载无限强度权限策略文件补丁包,并使用其中的文件覆盖$JAVA_HOME/lib/security目录下的对应的local_policy.jar 和 US_export_policy.jar Java9及以上,均无限制。

    jce_policy-8.7z

    在官方网站下载JCE无限制权限策略文件(请到官网下载对应的版本, 例如JDK7的下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html ):下载后解压,可以看到local_policy...

    JDK8 local_policy.jar和US_export_policy.jar

    JDK8 环境下,处理微信退款回调时报错 ...将local_policy.jar和US_export_policy.jar这两个文件替换%JRE_HOME%\lib\security和%JDK_HOME%\jre\lib\security下原来的文件,注意先备份原文件。替换后需重新下服务即可。

    jce_policy安装【java密码扩展无限制权限策略文件安装】.zip

    java密码扩展无限制权限策略文件 下载解压后,把jar文件上传到需要安装jce机器上JDK或JRE的security目录下,覆盖源文件即可。 JDK:将两个jar文件放到%JDK_HOME%\jre\lib\security下 JRE:将两个jar文件放到%JRE_...

    Java 2平台安全技术-结构,API设计和实现

    4.2.4 缺省的策略文件格式 72 4.2.5 策略文件举例 75 4.2.6 策略文件中的属性扩展 76 4.3 数字证书 77 4.4 有用的安全工具 80 4.4.1 密钥数据库 80 4.4.2 keytool 82 4.4.3 策略工具 86 4.4.4 jarsigner 88 4.4.5 ...

    Java 实现AES之CBC/CFB模式的加密解密源码

    完整能运行的java AES源代码,需要官网手工下载local_policy.jar 和 US_export_policy.jar文件覆盖java安装目录的文件,才能使用CFB模式。下载地址为: ...

    aws-java-sdk-s3-1.12.384.jar中文-英文对照文档.zip

    # 使用方法: 解压 【aws-java-sdk-s3-***.jar中文-英文对照文档.zip】,再解压其中的 【aws-java-sdk-s3-***-javadoc-API文档-中文(简体)-英语-对照版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行...

    local-policy.jar.US-export-policy.jar资源文件.zip

    local_policy.jar.US_export_policy.jar资源文件.zip

    java policy

    java 安全机制,描述java自身的安全模式,有助程序对特定文件的访问进行权限控制。

    无限强度加密local-policy.jar/US-export-policy.jar

    针对Java 8u151之前版本,内含有限强度策略文件,我们下载 oracle上的无限制版本替换local_policy.jar、US_export_policy.jar。因为美国的出口限制,Sun通过权限文件(local_policy.jar、US_export_policy.jar)做了...

    JAVA 2平台安全技术-结构,API设计和实现

    本书首先概述了计算机和网络安全概念并解释了Java安全模型,并在此基础上,详细描述了Java 2平台中新增加的许多安全结构方面的措施,同时对Java安全性的实施提出了使用指导,描绘了如何定制、扩展和精化安全结构以及...

    Java代码安全全解析.docx

    为了方便,JVM提供了把由Policy文件来定制Policy对象的功能。sun.security.provider.PolicyFile是根据配置文件中指定的策略来实现进行代码权限的管理。对于这种配置文件,我们称之为JAVA策略文件。

Global site tag (gtag.js) - Google Analytics