文章目录

  • Applet在浏览器运行的要求
  • JRE安全运行机制
    • java.security
    • 安全策略文件的主要格式
    • 1. keystore
    • 2. grant
    • JRE默认的安全设置(JRE下的java.policy文件)
    • 用户目录下的策略文件
  • 权限设置方式

此篇承接
说透Applet的数字签名之1——Applet及其运行
说透Applet的数字签名之2——数字签名

Applet在浏览器运行的要求

在浏览器端要显示Applet的要求有:

  1. 安装JRE
  2. 安装浏览器插件。Chrome在42版之后默认就不支持相关插件,IE还可以安装。
  3. 安全设置

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)]

以上的主要配置包括:

  1. provider, 提供商, 一些加密算法实现的Java安全API, 比如数字签名算法或消息摘要算法。
    配置的格式是:
    security.provider.<n>=<className>
    该配置可以配置多个。 n 代表序号

  2. 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)]

  1. file:${{java.ext.dirs}} 目录(即jre6\lib\ext 目录)下的文件开放所有权限。
    也就是所有放入该目录下的Applet都可以执行。不会卡权限

  2. 默认授予停止线程的运行时权限、本地机器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”)没有权限的问题, 对应就有三种方式进行添加

  1. 在JRE的 java.policy 添加
    在permission java.lang.RuntimePermission “stopThread”; 下新增:
    permission java.lang.RuntimePermission "getenv.OS";

  2. 在用户目录的.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授权细节相关推荐

  1. Java Applet 授权命令

    keytool -genkey -keystore appletname.store -alias appletnamecert jarsigner -keystore appletname.stor ...

  2. 请求令牌 接口_时序图说明JWT用户认证及接口鉴权的细节

    JWT用户认证及接口鉴权的细节以及原理 一.回顾JWT的授权及鉴权流程 在笔者的上一篇文章中,已经为大家介绍了JWT以及其结构及使用方法.其授权与鉴权流程浓缩为以下两句话: 授权:使用可信用户信息(用 ...

  3. iOS-Security 苹果安全白皮书都讲了些啥?

    2017.03.27 原文地址 使用Google 按段落翻译(上传文档的不太准),通读一遍后去掉设备或网络的超专业术语,也算是筛选掉对开发者意义不大的信息吧! 苹果设计的 iOS 平台向来是以安全为核 ...

  4. Delphi XE5 常见问题解答

    Delphi XE5 常见问题解答 有关于新即时试用的问题吗?请看看 RAD Studio 即时试用常见问答. 常见问题 什么是 Delphi? Embarcadero? Delphi? XE5 是易 ...

  5. Confluence 实现公司wiki【转】

    Confluence是一个企业级的Wiki软件,可用于在企业.部门.团队内部进行信息共享和协同编辑 一.安装过程 1 安装并配置mysql [root@vm1 ~]# tail -13 /etc/my ...

  6. Servlet的调试

    以下内容引用自http://wiki.jikexueyuan.com/project/servlet/debugging.html: 测试/调试Servlet始终是困难的.Servlets往往涉及大量 ...

  7. 项目微管理 - 总结也是新的开始

    时间都去哪了?听着这首耳熟能详的旋律,感叹着飞速流逝的年华,我渐渐的陷入到沉思之中. 时间过的真的很快,从一名程序员到接手一个一线项目团队一晃已经2年多了.在这段时间里,我接触了各种各样的人,处理了各 ...

  8. android 生成aar文件,Android 中.aar文件生成方法与用法

    https://i.cnblogs.com/EditPosts.aspx?opt=1 无论是用Eclipse还是用Android Studio做android开发,都会接触到jar包,全称应该是:Ja ...

  9. 编程基础---java Servlet 学习

    来源1 来源2 来源3 Servlet 为创建基于 web 的应用程序提供了基于组件.独立于平台的方法,可以不受 CGI 程序的性能限制.Servlet 有权限访问所有的 Java API,包括访问企 ...

最新文章

  1. unknown error 1130,unknown error 1045
  2. 扩增子图表解读8网络图:节点OTU或类Venn比较
  3. 潭州Java中级班(day_04)
  4. 学习运维工程师是正确的选择,发展与前景都是和好的
  5. 4.2.4 磁盘的管理
  6. Feedback about (Blockchain OR ML) AND (logistics)
  7. http/https监控获取响应时间(DNS解析时间,RRT时间,服务器处理时间等)
  8. JAVA格式化当前日期或者取年月日
  9. 英文字典。怎样设计数据结构
  10. Linux 动态库剖析
  11. pr视频两边模糊_干货!Pr教程:如何在视频中添加模糊效果?
  12. 五一快乐假期每天都在上课qaq
  13. 公司年会要求搞一个抽奖程序,及时安排一波
  14. 通达OA工作流程-使用方法
  15. 计算机系统里绘图基本操作,计算机的基本操作
  16. HTML5吃豆豆游戏开发实战(三)2d碰撞检测、重构
  17. 【软件过程管理】课程知识点梳理及习题
  18. 这3个今日头条常见的赚钱方法,掌握后,月入过万都不难
  19. 火狐Firefox浏览器安装使用油猴Tampermonkey插件
  20. 【教程】解决ngrok reconnecting外部网络无法访问

热门文章

  1. 【learning】一种奇妙的网络流建模方式
  2. 《推荐系统实践》笔记(转)
  3. hadoop1 hadoop2 fair-schduler 配置和使用
  4. S1:动态方法调用:call apply
  5. 史上最权威的 Activiti 框架学习
  6. Unicode和ANSI之间转换 - NotePad++轻松实现
  7. Microsoft.Jet.Oledb.4.0 找不到提供者或未安裝問題
  8. 小白的springboot之路(十)、全局异常处理
  9. Oracle11g adump目录下面.aud增长导致空间撑满无法删除导致CRS无法启动的解决方法
  10. ‘ActiveX component can’t create object解决方法