Applet授权细节
文章目录
- Applet在浏览器运行的要求
- JRE安全运行机制
- java.security
- 安全策略文件的主要格式
- 1. keystore
- 2. grant
- JRE默认的安全设置(JRE下的java.policy文件)
- 用户目录下的策略文件
- 权限设置方式
此篇承接
说透Applet的数字签名之1——Applet及其运行
说透Applet的数字签名之2——数字签名
Applet在浏览器运行的要求
在浏览器端要显示Applet的要求有:
- 安装JRE
- 安装浏览器插件。Chrome在42版之后默认就不支持相关插件,IE还可以安装。
- 安全设置
JRE安全运行机制
客户端机器的JVM的安全性是通过JRE安装目录下的java.security 和 java.policy 进行控制。
以JRE1.8为例,路径示例为:
C:\Program Files (x86)\Java\jre1.8.0_241\lib\security
java.security
该文件是主要的安全配置文件,文件的示例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A3Y9ZFVg-1580012190334)(images/screenshot_1580006850637.png)]
以上的主要配置包括:
provider, 提供商, 一些加密算法实现的Java安全API, 比如数字签名算法或消息摘要算法。
配置的格式是:
security.provider.<n>=<className>
该配置可以配置多个。 n 代表序号policy 安全策略相关配置
以下配置指定使用策略文件的方式进行设置。
policy.provider=sun.security.provider.PolicyFile
JRE 默认读取的策略文件有两个:
policy.url.1=file:${java.home}/lib/security/java.policypolicy.url.2=file:${user.home}/.java.policy
第一个位于JRE的 security目录, 文件名是java.policy
另外一个位于用户目录, 文件名是.java.policy(文件名多一个点)
安全策略文件的主要格式
java.policy可以设置密钥库和授权信息。主要配置项如下:
keystore "file://C:/Program Files/Java/jre6/lib/security/cacerts", "JKS";grant {permission java.io.FilePermission "<<ALL FILES>>", "read";
};grant signedBy "myapplet", codeBase "http://localhost:8080/" {permission java.security.AllPermission;
};
1. keystore
keystore设置密钥库的位置, 实例中使用的是JRE本身的, JKS是该密钥的算法。keystore可以设置本地文件(file协议),也可以设置在线的密钥库(http协议)。
keystore "some_keystore_url", "keystore_type";
默认存在的,路径默认是/lib/security/cacerts,默认密码是changeit。
使用命令keytool -list -rfc -keystore cacerts
来列出其中的内容
2. grant
grant即授权部分, signedBy是证书的发证机构, codeBase是访问的地址(可以是本地文件,也可以是在线的)。
JRE默认的安全设置(JRE下的java.policy文件)
该文件的设置是机器级别的,所有使用该机器的用户都应用此策略。 内容如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CxQRcflB-1580012190336)(images/screenshot_1580011026398.png)]
file:${{java.ext.dirs}} 目录(即jre6\lib\ext 目录)下的文件开放所有权限。
也就是所有放入该目录下的Applet都可以执行。不会卡权限默认授予停止线程的运行时权限、本地机器1024端口的连接权限,以及读取java.version、os.name等属性的权限。
permission java.lang.RuntimePermission “stopThread”;
permission java.net.SocketPermission “localhost:1024-”, “listen”;
permission java.util.PropertyPermission “java.version”, “read”;
注意: 上一篇的实例中使用System.getenv(“OS”); 获取操作系统的属性, 会报没有权限; 如果使用System.getProperty(“os.name”)则不存在权限拒绝的问题。
System.getenv(“OS”)要能执行需要新增如下权限:
permission java.lang.RuntimePermission "getenv.OS";
用户目录下的策略文件
file:${user.home}/.java.policy
该文件是位于用户目录下, 是用户层级的。
如果没有运行和设置过, 该文件是没有的。
此外可以通过policy.url.3=xx 来新增策略文件
权限设置方式
针对上一篇执行System.getenv(“OS”)没有权限的问题, 对应就有三种方式进行添加
在JRE的 java.policy 添加
在permission java.lang.RuntimePermission “stopThread”; 下新增:
permission java.lang.RuntimePermission "getenv.OS";
在用户目录的.java.policy文件中设置
在file:${user.home}/.java.policy最后加上:
grant {permission java.lang.RuntimePermission "getenv.OS";
};
以上授权开放了所有Applet执行getenv.OS的权限,如果要限制访问的签发机构(signedBy)的codeBase,则配置如下:
grant signedBy "myapplet", codeBase "file://D/inssoftware/tomcat7/webapps/applet/jdk6/myapplet.html"{permission java.lang.RuntimePermission "getenv.OS";
};
可以添加之后会出现权限的问题, 原因是JRE使用的密钥库文件是lib/security/cacerts, 将myapplet.cer导入:
keytool -import -alias myapplet -file myapplet.cer -keystore cacerts
————————————————————————
Applet授权细节相关推荐
- Java Applet 授权命令
keytool -genkey -keystore appletname.store -alias appletnamecert jarsigner -keystore appletname.stor ...
- 请求令牌 接口_时序图说明JWT用户认证及接口鉴权的细节
JWT用户认证及接口鉴权的细节以及原理 一.回顾JWT的授权及鉴权流程 在笔者的上一篇文章中,已经为大家介绍了JWT以及其结构及使用方法.其授权与鉴权流程浓缩为以下两句话: 授权:使用可信用户信息(用 ...
- iOS-Security 苹果安全白皮书都讲了些啥?
2017.03.27 原文地址 使用Google 按段落翻译(上传文档的不太准),通读一遍后去掉设备或网络的超专业术语,也算是筛选掉对开发者意义不大的信息吧! 苹果设计的 iOS 平台向来是以安全为核 ...
- Delphi XE5 常见问题解答
Delphi XE5 常见问题解答 有关于新即时试用的问题吗?请看看 RAD Studio 即时试用常见问答. 常见问题 什么是 Delphi? Embarcadero? Delphi? XE5 是易 ...
- Confluence 实现公司wiki【转】
Confluence是一个企业级的Wiki软件,可用于在企业.部门.团队内部进行信息共享和协同编辑 一.安装过程 1 安装并配置mysql [root@vm1 ~]# tail -13 /etc/my ...
- Servlet的调试
以下内容引用自http://wiki.jikexueyuan.com/project/servlet/debugging.html: 测试/调试Servlet始终是困难的.Servlets往往涉及大量 ...
- 项目微管理 - 总结也是新的开始
时间都去哪了?听着这首耳熟能详的旋律,感叹着飞速流逝的年华,我渐渐的陷入到沉思之中. 时间过的真的很快,从一名程序员到接手一个一线项目团队一晃已经2年多了.在这段时间里,我接触了各种各样的人,处理了各 ...
- android 生成aar文件,Android 中.aar文件生成方法与用法
https://i.cnblogs.com/EditPosts.aspx?opt=1 无论是用Eclipse还是用Android Studio做android开发,都会接触到jar包,全称应该是:Ja ...
- 编程基础---java Servlet 学习
来源1 来源2 来源3 Servlet 为创建基于 web 的应用程序提供了基于组件.独立于平台的方法,可以不受 CGI 程序的性能限制.Servlet 有权限访问所有的 Java API,包括访问企 ...
最新文章
- unknown error 1130,unknown error 1045
- 扩增子图表解读8网络图:节点OTU或类Venn比较
- 潭州Java中级班(day_04)
- 学习运维工程师是正确的选择,发展与前景都是和好的
- 4.2.4 磁盘的管理
- Feedback about (Blockchain OR ML) AND (logistics)
- http/https监控获取响应时间(DNS解析时间,RRT时间,服务器处理时间等)
- JAVA格式化当前日期或者取年月日
- 英文字典。怎样设计数据结构
- Linux 动态库剖析
- pr视频两边模糊_干货!Pr教程:如何在视频中添加模糊效果?
- 五一快乐假期每天都在上课qaq
- 公司年会要求搞一个抽奖程序,及时安排一波
- 通达OA工作流程-使用方法
- 计算机系统里绘图基本操作,计算机的基本操作
- HTML5吃豆豆游戏开发实战(三)2d碰撞检测、重构
- 【软件过程管理】课程知识点梳理及习题
- 这3个今日头条常见的赚钱方法,掌握后,月入过万都不难
- 火狐Firefox浏览器安装使用油猴Tampermonkey插件
- 【教程】解决ngrok reconnecting外部网络无法访问
热门文章
- 【learning】一种奇妙的网络流建模方式
- 《推荐系统实践》笔记(转)
- hadoop1 hadoop2 fair-schduler 配置和使用
- S1:动态方法调用:call apply
- 史上最权威的 Activiti 框架学习
- Unicode和ANSI之间转换 - NotePad++轻松实现
- Microsoft.Jet.Oledb.4.0 找不到提供者或未安裝問題
- 小白的springboot之路(十)、全局异常处理
- Oracle11g adump目录下面.aud增长导致空间撑满无法删除导致CRS无法启动的解决方法
- ‘ActiveX component can’t create object解决方法