新しいプロバイダーを追加する署名付きアプレットを使用しています。アプレットが署名されている場合、そのようなコードは信頼できると見なされます。
プライベート メソッドの場合:
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 でデバッグすると、アプレットは完全に機能し、新しいプロバイダーが追加されますが、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)