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;
}

configPKCS11 の名前とライブラリを含む文字列です。

netbeans でデバッグすると、アプレットは完全に機能し、新しいプロバイダーが追加されますが、html ファイルでアプレットを実行すると、アプレットが初期化されません。そして、プロバイダーが追加された次の行のコメントを外すと、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