b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

浏览器小程序通过“数字签名”获得JNA调用的DLL权限

电脑杂谈  发布时间:2020-04-01 07:04:19  来源:网络整理

applet图标_数字个性签名_applet数字签名

首先将依赖的DLL放在JRE bin目录中(注意: 当浏览器在applet中同时具有JDK和JRE时,默认值为系统中的JRE,将仅找到JRE bin目录DLL)<

使用JNA编写DLL库的接口

package com.test;
import com.sun.jna.Native;
import com.sun.jna.ptr.ByteByReference;
import com.sun.jna.win32.StdCallLibrary;
public interface MyLib extends StdCallLibrary{
	MyLib Instance = (MyLib)Native.loadLibrary("NJRwCard", MyLib.class);
	
	public int comset(ByteByReference baudrate);
	
}

为什么要编写Applet?

package com.test;
import javax.swing.JApplet;
import javax.swing.JLabel;
import com.sun.jna.Memory;
import com.sun.jna.ptr.ByteByReference;
@SuppressWarnings("serial")
public class MyApplet extends JApplet {
	int temp;
	Memory memory;
	
	static int count = 0;
	@Override
	public void init() {
		
		ByteByReference baudrate = new ByteByReference();
		memory = new Memory(20);
		memory.setString(0, "abc");
		baudrate.setPointer(memory);
		
		temp = MyLib.Instance.comset(baudrate);
		String info = new String();
		switch (temp) {
		case -1:
			info = "配置串口失败!";
			break;
		default:
			info = "自动配置串口成功!";
			break;
		}
		
		
	    getContentPane().add(new JLabel(info));
	}
}

现在,您可以在IDE中以As Applet的身份运行,但是它可能会失败. 因为您使用的是配置的JDK,所以可能找不到资源. 您还必须将DLL放入JDK bin目录中.

运行完之后,使用IDE将Applet打包到Jar包中,或在命令行上执行以下语句:

jar

-cvf MyApplet.jar类

您可以编写Applet.jsp页面

<applet codebase="<%=basePath%>applets" 
            code="com.epro.iccard.IcCardApplet" 
            name="IcCardApplet" 
            width="320" 
            archive="iccard.jar,jna.jar;"
            height="24">
    
    </applet>

由于要调用客户端的本地资源,因此未经许可的系统将报告访问被拒绝的错误,因此采用以下方法获得授权.

applet图标_applet数字签名_数字个性签名

生成证书和签名

1,键盘工具

-genkey -keystore pepper.store -alias pepper

此命令用于生成密钥库. 执行后applet数字签名,应在c: / admin中生成pepper.store文件. 在这里,胡椒粉是我的名字. 您可以修改它. 另外,执行命令时,系统会提示您输入密钥库的密码. 您必须在这里记住它,否则以后要使用它时将无法输入.

2,键盘工具

-export -keystore pepper.store -alias pepper -file pepper.cert

此命令用于生成用于签名的证书. 同样,这里的辣椒也可以替换为您需要的名称. 执行此命令后,将在c: / admin中生成pepper.cert文件.

3

jarsigner -keystore pepper.store MyApplet.jar pepper

此命令使用上面生成的证书对我们的jar文件进行签名.

尽管已签名,但由于客户端此时将不主动信任我们的签名,因此需要一些工作来获取客户端DLL的读取和写入权限. 有三种方法(建议使用第三种方法):

方法一,创建一个新的策略文件

数字个性签名_applet数字签名_applet图标

创建一个新的策略文件,并添加这些策略文件(修改文件)

1. 在c: / admin中生成一个名为applet.policy的文件,其内容如下:

keystore "file:pepper.store","JKS";
grant signedBy "pepper" { 
	permission java.io.FilePermission "<< ALL FILES >>","read"; 
}; 

此文件允许Pepper签名的Applet拥有对所有本地文件的读取权限.

2. 在$ {java.home} / jre / lib / security目录中修改java.securityapplet数字签名,并找到以下两行:

policy.url.1 =文件: $ {java.home} /lib/security/java.policy

policy.url.2 =文件: $ {user.home} /. java.policy

在下面添加第三行

policy.url.3 =文件: c:

/admin/applet.policy

我们先前创建的applet.policy文件仅在完成此修改后才有效.

在WebRoot下添加Applets目录,并将签名的applet.jar,jna.jar放在此路径下

applet图标_数字个性签名_applet数字签名

启动Tomcat

好的,现在该applet可以运行读取和写入文件的功能. 如果要考虑在Internet上实现此applet,则无需在所有客户端上执行上述步骤,只需在服务器上创建目录,例如c: / admin,然后将此目录映射到. 这是一个假设的URL,将Pepper.cert,pepper.store,FileReaderApplet.html,MyApplet.jar和applet.policy放在此目录中,然后按如下所示修改applet.policy文件:

密钥库

“ http: //”,

“ JKS”;授予

signedBy“ pepper” {权限java.io.FilePermission“ <<所有文件>>”,“读取”;};

3. 每个客户端只需修改其$ {java.home} / jre / lib / security目录中的java.security文件,如下所示:

policy.url.1 =文件: $ {java.home} /lib/security/java.policypolicy.url.2 =

文件: $ {user.home} /. java.policypolicy.url.3 =

www.testApplet.com/admin/applet.policy

当然,每个客户端仍然需要安装JRE.

方法二,修改Java默认安全策略文件(不是很安全)

applet图标_数字个性签名_applet数字签名

打开$ {java.home} /lib/security/java.policy文件并添加授权

如果报告的异常是:

java.security.AccessControlException: 访问被拒绝(读取了java.util.PropertyPermission jna.encoding)

在授予后在括号中的jna.encoding中添加一行

阅读授权

权限java.util.PropertyPermission“ jna.encoding”,“读取”;

方法三,使用AccessController.doPrivileged提升代码权限(推荐,无需修改客户端配置):

如果您不希望客户端修改JRE中的安全配置,则可以选择在代码中对其进行升级,请参考它.

请注意,使用此方法: 执行需要权限的代码需要特殊的方法才能执行

如果您信任此签名,

AccessController.doPrivileged(...)将执行此代码

在此示例中,您可以封装comset方法:


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-159759-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...