仍然可以使用自签名Java小程序访问智能卡?

时间:2014-01-30 12:04:55

标签: java security applet accesscontrolexception

我尝试使用javax.smartcardio与客户端的智能卡进行通信。 该applet仅适用于Intranet内的用户。 当我在Eclipse中调试它时,applet工作正常。

当我在浏览器中打开它时(我试过IE9和Chrome),其中包含以下HTML代码:

<body>
<!-- ... -->
<script src="https://www.java.com/js/deployJava.js"></script>
<script> 
    var attributes = {
        code:'test.TestClass',  width:300, height:300, scriptable:true} ; 
    var parameters = {jnlp_href: 'TestJNLP.jnlp'} ; 
    deployJava.runApplet(attributes, parameters, '1.7'); 
</script>
<!-- ... -->
</body>

我得到以下例外: AccessControlException

Java-Console仅显示以下3行:     缺少Application-Name清单属性:file:/ C:/AppletTestSite/TestApplet.jar     主jar中缺少权限清单属性:file:/ C:/AppletTestSite/TestApplet.jar     CacheEntry [file:/ C:/AppletTestSite/TestApplet.jar]:updateAvailable = true,lastModified = Wed Jan 29 08:40:39 CET 2014,length = 6684

我尝试过的事情:

-using doPrivileged

public void init() {
    try {
        AccessController
                .doPrivileged(new PrivilegedExceptionAction<Integer>() {
                    public Integer run() {
                        ReaderInit(); //<------
                        return null;
                    }
                });
    } catch (PrivilegedActionException e) {
        // catch block
        e.printStackTrace();
    }

}

- 添加jnlp文件的权限:

<security>
  <all-permissions/>
</security>

- 在清单中添加以下行:

Permissions: all-permissions

- 使用keytool&amp; jarsigner

对jar文件进行自签名
C:\Program Files\Java\jdk1.7.0_51\bin>jarsigner -verify C:\AppletTestSite\TestApplet.jar
jar verified.

- 在java控制面板中,将Security Level设置为Medium并将站点的URL添加到Exception Site List

我是否遗漏了某些东西或者根本不可能(自1.7.0_51更新以来)在没有公共可信CA的情况下访问智能卡?

我想避免为applet的每个用户更改策略文件。

0 个答案:

没有答案