`
skzr.org
  • 浏览: 355482 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

JAVA数字签名提升权限

阅读更多

本文描述怎样通过数字签名提升java的访问权限,本文环境:

os:Ubuntu9.10 64b

Firefox:3.5.8 jre环境:JRE 1.6.0_18(64b)

测试java代码和jsp页面代码如下:

public class TestApplet extends Applet {
	private static final long serialVersionUID = 1L;
	private void info(String msg) {
		System.out.println(msg);
	}
	@Override
	public void init() {
		super.init();
		readFile("Linux".equalsIgnoreCase(System.getProperty("os.name")) ? "/etc/hostname" : "c:\\boot.ini");
	}
	private void readFile(final String filePath) {
		info("读取文件:" + filePath);
		String text = AccessController.doPrivileged(new PrivilegedAction<String>() {
			@Override
			public String run() {
				StringBuilder buffer = new StringBuilder();
				BufferedReader reader = null;
				try {
					reader = new BufferedReader(new FileReader(filePath));
					while(reader.ready()) buffer.append(reader.readLine());
				} catch (Exception e) {
					throw new IllegalStateException(e);
				} finally {
					if (reader != null) {
						try {
							reader.close();
						} catch (IOException e) {
							e.printStackTrace();
						}
					}
				}
				return buffer.toString();
			}
		});
		info("读取结果为:" + text);
	}
}
<%@ page language="java" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
	<body>
	<applet id="hh" alt="Applet" width="100" height="100" 
		code="org.skzr.TestApplet" 
		archive="skzr-applet-sign.jar"
		codebase="<%=basePath %>demo" mayscript>
	</applet>
	</body>
</html>
 

因为考虑到大家一般是windows 32位环境所以:导出时使用我的linux64下仅有的32位jdk:jdk1.6.0_14-32

把以上类导出为包:skzr-applet.jar

签名:(使用同一个32位jdk:jdk1.6.0_14-32)

1 创建keystore:

  /prog/java/jdk1.6.0_14-32/bin/keytool -genkey -keystore skzr-applet.keystore -alias skzr-applet

2 签名:

 /prog/java/jdk1.6.0_14-32/bin/jarsigner -keystore skzr-applet.keystore skzr-applet.jar skzr-applet

把demo放入tomcat的webapps下,打开http://localhost:8080/demo/index.jsp测试

 

index.jsp里面使用未签名包 :skzr-applet.jar在控制台可以发现异常:

java.lang.IllegalStateException: java.security.AccessControlException: access denied (java.io.FilePermission /etc/hostname read),因为我的是linux所以读取此文件

index.jsp里面使用已签名包 :skzr-applet-sign.jar在控制台可以发现正确读取了文件:下面是控制台输出:

读取文件:/etc/hostname
读取结果为:skzr
basic: Applet initialized

 至此权限提升完毕 ^ ^

效果图:

google chrome for linux

 firefox 3.5.8

至于Windows下是一样的效果


 

 例子demo

demo.zip
其中skzr-applet.jar未签名 skzr-applet-sign.jar是签名后的包

总结:

1 jre的策略文件不需要更改的
如果真的签名了,客户端加载运行jar时会出现询问是否信任此签名的提示的!

问题在于,你如果签名了整个applet jar那么每一次重新发布都需要重新签名,比较繁琐,好的办法是,把需要提升权限的打为一个jar,一般这个jar不会经常更改的,签名此jar就可以了,其他的(如界面UI)的jar就算修改了也不需要重新签名的

2 要点:需要提升权限的类一定要放入一个jar包,签名一次即可

3 注意执行需要权限的代码需要一个特殊的方法执行,
AccessController.doPrivileged(...)如果信任此签名,将可以执行此代码

 

  • 大小: 122.9 KB
  • 大小: 125.3 KB
  • 大小: 28.2 KB
分享到:
评论
12 楼 skzr.org 2010-03-22  
相互交流了,事物都是有销亡的,沉了还可以search到,哈哈

我也是直接使用eclipse的export方式打的包
11 楼 aspnetdb 2010-03-22  
aspnetdb 写道
老大,过来又问你问题啦。还是关于Applet的。我就是照着你的思路来弄的。不过引入包的时候有点问题。http://www.iteye.com/problems/38471。这个是我新问的问题。帮个忙,呵呵。


解决了。主要问题出在打包那里。我开始用 jar -cvf my.jar *.class那种方式打包,数字签名不正确。后来用MyEclipse自带的export方式打包。数字签名后,正确了。因为什么不清楚。以后可以调查,不过现在问题解决了。谢啦。 这个帖子不要沉噢~~
10 楼 aspnetdb 2010-03-22  
老大,过来又问你问题啦。还是关于Applet的。我就是照着你的思路来弄的。不过引入包的时候有点问题。http://www.iteye.com/problems/38471。这个是我新问的问题。帮个忙,呵呵。
9 楼 phoenixup 2010-03-22  
iehyou 写道
客户端应该还要装JRE,这是个硬伤...


管理系统安装JRE不算硬伤~~~其他的就有点小麻烦了。。
8 楼 iehyou 2010-03-22  
客户端应该还要装JRE,这是个硬伤...
7 楼 williamou 2010-03-22  
8错
听说过这种数字签名提升权限,但没机会试过
收起来备用拉,以后可以参考
6 楼 aspnetdb 2010-03-22  
呵呵,这几天懒了,才看到。这会我仔细的看看。一会有收获再顶你哈。
5 楼 skzr.org 2010-03-22  
谢谢linux1689!
linux1689 写道
关于这方面的资料,推荐看看比较权威和全面的《Java加密与解密的艺术》,在JE上就能搜索到,近期将犀利上市。


呵呵这么专业的加密艺术学不过来阿!
现在已经过了技术追求期,目前致力于把自己所学知识积累起来!

此文是问答中某人的问题,关于签名applet后还要修改jre的策略文件的问题!
关于Applet的数字签名提问人:aspnetdb

曾经也迷茫过,明明签名了,为什么还要修改策略,2年前吧,和此问题一样的
当年详情:
写一个引擎(applet运行在浏览器中作为服务为JS 提供直接访问远端web服务器中的java对象的能力)提供服务:缓存,业务处理,构想是不是有离线数据提交功能,想法太多,很多东西需要使用反射和访问站点资源,所以迫切需要某些特权操作(呵呵,在applet中使用spring作为容器)——听说数字签名可以

参考了网上N多关于java签名提升访问系统资源权限的问题,好像都是相互抄袭,虽然签名了,可是代码依然提示没有权限访问!!!郁闷了不少时间,一次偶然让我发现了AccessController.doPrivileged(...)的秘密,纯属偶然

开始实现的远端调用java利用的是自己定义协议访问特定url,然后服务器解析协议调用对象返回结果(特别类似dwr的实现),一直在权限这里卡了,我协议传输直接使用Serializable传输的!后来看了spring提供了http invoker就切换到spring的了,结果发现spring执行远端的时候没有出现权限问题,跟踪代码后找到了AccessController.doPrivileged(...)
至此问题解决!
什么需要修改jre的策略文件提升权限,我看比较片面,也不是很好——客户端那么多jre改起来麻烦阿,貌似任何java程序的策略都会因此而改变,不太好阿!
4 楼 linux1689 2010-03-21  
关于这方面的资料,推荐看看比较权威和全面的《Java加密与解密的艺术》,在JE上就能搜索到,近期将犀利上市。
3 楼 skzr.org 2010-03-20  
我只是在答题,写下mark下

呵呵,确实我一直想去一个以java为平台发展的公司做!
自己发展吧
Good Luck! nihaoyoushang
2 楼 nihaoyoushang 2010-03-20  
skzr.org 写道
唉 怎么没有任何反应哦!



呵呵,我关注一下。

目前来说,还没有用到这个。不过我会收藏一下,应该以后是个很好的解决方案呢
1 楼 skzr.org 2010-03-20  
唉 怎么没有任何反应哦!

相关推荐

    java源码包---java 源码 大量 实例

     Java 数字签名、数字证书的相关实例。  关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据...

    JAVA上百实例源码以及开源项目

     Java 数字签名、数字证书的相关实例。  关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据...

    java源码包4

     Java 数字签名、数字证书的相关实例。  关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据...

    java源码包3

     Java 数字签名、数字证书的相关实例。  关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据...

    JAVA上百实例源码以及开源项目源代码

     Java 数字签名、数字证书的相关实例。  关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据...

    java源码包2

     Java 数字签名、数字证书的相关实例。  关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,系统相关,数字签名,数字证书 Java 数字签名、数字证书的相关实例。 关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,系统相关,数字签名,数字证书 Java 数字签名、数字证书的相关实例。 关于数字签名:产生RSA密钥对(myKeyPair),得到RSA密钥对,产生Signature对象,对用...

    ASP基于RSA的数字签名的设计与实现.zip

    这些项目源码还提供了丰富的功能模块和插件,支持用户管理、权限控制、数据可视化、电子支付、互动社交等特色功能。 通过使用这批ASP项目源码,开发人员可以快速搭建相应的Web应用程序,减少从头开始开发的时间和...

    android手机安全卫士

    手机杀毒:从服务器下载最新的病毒库, 根据程序的包名和程序的数字签名识别病毒,提示用户并查杀. 恶意软件,吸费木马无处可藏。 系统优化: 清理手机缓存,提高手机性能,优化电池管理 高级工具: 自动ip拨号,手机...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    管理员进入登录后,可对帐户进行管理,包括添加管理员帐户、修改管理员帐户、删除管理员帐户和对帐户进行权限设置。 博客用户通过前台登录后,可对自己的博客空间进行管理,包括发布自己的网络日志、收藏个人图片...

Global site tag (gtag.js) - Google Analytics