17

スマートカードにアクセスするために PKCS11 プロバイダーをセットアップしようとしています。システムに PKCS11 ライブラリをインストールし、Java PKCS#11 リファレンス ガイドの指示に従いました。参照では、単にインスタンスを作成しsun.security.pkcs11.SunPKCS11、構成ファイルの名前をコンストラクターに渡します。次のコードをコンパイルしようとすると

Provider p = new sun.security.pkcs11.SunPKCS11("pkcs11.cfg");
Security.addProvider(p);

次のエラーが表示されます。

アクセス制限: 必要なライブラリー /usr/lib/jvm/java-6-sun-1.6.0.24/jre/lib/ext/sunpkcs11.jar の制限により、コンストラクター SunPKCS11(String) にアクセスできません

私は何を間違っていますか?Ubuntu x86 で Eclipse 3.5 と Java SE 1.6 を使用しています。

よろしくお願いします。

4

5 に答える 5

22

プロジェクトのプロパティを調べて、Librariesタブを開きます。JRE System Libraryを実行環境に設定したとします。ワークスペース JRE に変更するか、特定の JRE を手動で選択します。

背景: 実行環境を選択するということは、Java API に準拠したアプリを作成するということです。このクラスsun.security.pkcs11.SunPKCS11は、Sun Java 実装専用としてマークされた sun パッケージにあり、標準 Java API の一部ではありません。

于 2011-03-02T19:10:42.870 に答える
9

プロジェクト プロパティの[ Java Build Path ]ペインに移動し、JRE System Library エントリを展開します。[アクセス ルール] をクリックし、[編集...] ボタンをクリックします。アクセス可能にするアクセス ルールをルールパターンsun/security/pkcs11/**に追加します。これにより、Eclipse は泣き言を言うのをやめます。

于 2011-05-31T15:47:26.590 に答える
5

私の知る限り、Java で PKCS#11 トークンを使用するには、Sun API を使用する方法と、独自の実装を使用する方法の 2 つがあります。それぞれに長所と短所があります。Sun'API の主な利点は、PKCS#11 トークンを通常のキーストアにマップすることです。したがって、BouncyCastle は、ハードウェア デバイスとやり取りしていることを実際に把握することなく、トークン内の秘密鍵にアクセスできます。さらに、ネイティブの依存関係はすべて Sun の JVM に既にバンドルされているため、異なるプラットフォームでのネイティブ コードの移植やサポートについて心配する必要はありません。主な欠点は、非標準であるため、どの JVM でも見つかる保証がないことです。商用 API (IAIK の PKCS11 ラッパーを参照) は優れており、オープン ソース化されていますが、2 つの欠点があります。それらは別の API (料金を支払う必要があります...) で動作するように作られているため、トークンを KeyStore として公開せず、BouncyCastle を透過的に使用することはできず、維持および配布する必要があるネイティブ コンポーネントがあります。 . ブラウザーで PKCS#11 を使用する必要がある場合、それがどれほど面倒なことかご存知のとおりです...

于 2011-03-17T08:35:44.557 に答える
4

このエラーの理由は、特定のクラスがSun JVMによってのみ使用されることを想定しており、新しいバージョンのEclipseでは、クラスの不適切/違法な使用について開発者に警告する警告チェックが行われたためです。

別のstackoverflowスレッドでは、BouncyCastleの実装を使用することを推奨しています。 sun.security.pkcs11.SunPKCS11を使用した奇妙な問題:指定された手順が見つかりませんでしたか?

于 2011-03-02T19:09:24.340 に答える