BouncyCastleをWindowsのセキュリティプロバイダーとして追加しようとしていますXP Proなので、これを使用して、手順に従ってAndroidアプリケーションにいくつかの証明書を追加できます- ここ 。残念ながら、プロバイダーを追加することはできません。
私がした:
C:\Program Files\Java\jre6\lib\ext\
にダウンロードしました。C:\Program Files\Java\jre6\lib\ext\bcprov-jdk16-146.jar
を%CLASSPATH%
に追加しました。security.provider.7=org.bouncycastle.jce.provider.BouncyCastleProvider
を追加しました(7は順序の次のintです)。私が走るとき:
keytool -import -v -trustcacerts -alias 0 -file mycert.crt -keystore mystore.bks -storetype BKS -providerName org.bouncycastle.jce.provider.BouncyCastleProvider -storepass mypassword
次のエラーメッセージが表示されます。
keytool error: Java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider
また、動的に追加してみました。
import Java.security.Provider;
import Java.security.Security;
import Java.util.Enumeration;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class BouncyCastleMain {
public static void main(String[] args) throws Exception {
Security.addProvider(new BouncyCastleProvider()); // add it
try { // list them out
Provider p[] = Security.getProviders();
for (int i = 0; i < p.length; i++) {
System.out.println(p[i]);
for (Enumeration<?> e = p[i].keys(); e.hasMoreElements();)
System.out.println("\t" + e.nextElement());
}
} catch (Exception e) {
System.out.println(e);
}
}
}
最初はJavaクラスをコンパイルするときにアクセスエラーが発生しましたが、提案に従って警告に変更しました ここ 。コードを実行すると、BouncyCastleが表示されます。プロバイダーのリストですが、プログラムが完了した後も残りません。
私はそれが実行可能でなければならないと確信していますが、それを使用してkeytoolを実行するのに十分な時間この男をインストールする方法に悩まされています。 Java APIを介してkeytoolを実行することは可能ですか、それともプロバイダーを固執させるいくつかのステップを見逃した可能性がありますか?
ありがとう!
-providerName
オプションには、クラス名ではなく、プロバイダー名(この場合は "BC")が必要です。別のオプションである-providerClass
にはクラス名が必要であり、プロバイダーがJava.security
ファイルに登録されていない場合に役立ちます。
プロバイダーを「プログラム的に」登録する場合、それは一時的なものにすぎません。プログラムは、実行するたびにプロバイダーを再登録する必要があります。 BouncyCastleをkeytool
で利用できるようにすることが目標である場合、このアプローチを使用することはできません。
プロバイダーは既にインストールされているため(アーカイブをlib/ext
に配置し、Java.security
にリストすることにより)、-providerName BC
オプションを使用するのがおそらく最も簡単な解決策です。または、-providerClass org.bouncycastle.jce.provider.BouncyCastleProvider
オプションを使用することもできます。
ちなみに、CLASSPATH
環境変数は使用しないでください。 lib/ext
のライブラリはすでにクラスパス上にあります。
オプションを修正した後もNoSuchProviderException
(-providerName
を使用)またはClassNotFoundException
(-providerClass
を使用)が表示される場合は、の正しいコピーを使用していることを確認してください。 keytool
。つまり、実行時に、keytool
変数に依存するのではなく、PATH
のフルパスを指定します。パスがBouncyCastleがインストールされたJREを参照していることを確認してください。システムに複数のJREとJDKがあることは珍しいことではありません。
Windowsを使用している場合は、管理者としてコマンドラインを起動してkeytoolコマンドを入力することを忘れないでください。