0

我正在使用一个签名的小程序,它添加了一个新的提供程序。如果小程序已签名,则认为此类代码是可信的。

在私有方法中:

private Provider addProvider() throws Exception {

    logger.log(Level.INFO, "addProvider ... "); 

    Provider p = new sun.security.pkcs11.SunPKCS11(
                     new ByteArrayInputStream(config.getBytes())
                     );
    //Security.addProvider(p);

    return p;
}

config是一个字符串,其中包含 PKCS11 的名称和库。

当我使用 netbeans 调试时,applet 可以完美运行并添加了新的提供程序,但是当我在 html 文件中执行 applet 时,applet 没有初始化。如果我取消注释下添加提供程序的行,则 html 中的小程序将被初始化。

private Provider addProvider() throws Exception {

    logger.log(Level.INFO, "addProvider ... "); 

    //Provider p = new sun.security.pkcs11.SunPKCS11(
                 //     new ByteArrayInputStream(config.getBytes())
                 //   );
    // Security.addProvider(p);

    return p;
}

然后添加提供程序时出现问题。

只有这一行导致小程序未初始化:

Provider p = new sun.security.pkcs11.SunPKCS11(
                 new ByteArrayInputStream(config.getBytes())
                 );

我插入了一个try {}

private Provider addProvider() throws Exception {

    logger.log(Level.INFO, "addProvider ... "); 

    try{
        Provider p = new sun.security.pkcs11.SunPKCS11(
                         new ByteArrayInputStream(config.getBytes())
                     );
        Security.addProvider(p);

    } catch (Exception ex) {
        logger.log(Level.SEVERE, "Excepcion provider: {0}", ex);
    }    
    return p;
}

但是就像小程序没有初始化我没有得到任何异常有什么建议吗?

感谢安德鲁的评论。

我已经添加了你的建议,现在我收到了一个错误:

            try{

                provider = new sun.security.pkcs11.SunPKCS11(
                                new ByteArrayInputStream(config.getBytes())
                                );
                Security.addProvider(provider);

            } catch (Throwable t) {                    
                logger.log(Level.SEVERE, "Excepcion provider:", t);
                logger.log(Level.SEVERE, "Throwable.Cause: ", t.getCause());                          

            } 

日志显示:

例外供应商:

<message>java.lang.ExceptionInInitializerError</message>

Throwable.Cause:java.security.AccessControlException:访问被拒绝(java.lang.RuntimePermission accessClassInPackage.sun.security.util)

4

0 回答 0