7

アルゴリズムでKeytoolを使用してキーストレージを作成しようとしています。

SignatureSPI、MessagedigestSPI、KeyPairGeneratorSPIの拡張クラスでカスタムjava.security.providerを作成し、静的にインストールしました。

私が遭遇した問題は、以下を使用してストレージを作成しようとしているときです。

keytool -alias something -genkeypair -keyalg GOST2001KeyPairGenerator -sigalg GOST2001Signature -providerclass ru.test.security.test_provider -storetype pkcs12 -keystore test_keystore

デバッグメッセージとエラーが表示されます:

GOST2001KeyPairGenerator initialize
GOST2001KeyPairGenerator generateKeyPair
GOST2001Signature engineInitSign
keytool error: java.lang.RuntimeException: internal error! unrecognized algorithm name: GOST2001Signature

奇妙なことに、アルゴリズムは実際に実行を開始しますが、その後認識されずに呼び出されます。何が悪いのか見当がつかない。

4

2 に答える 2

1

ここで私がしたこと:

  • カスタムプロバイダーとそれに必要なクラスのjarファイルを作成する必要があります。
  • 次に、そのjarをC:\ Program Files \ Java \ jre6 \ lib\extに配置する必要があります。
  • security.provider.7 = my.package.MyProviderをjava.securityに追加します(7は順序の次のintです)。
  • キーツールのコマンドラインでオプション-providerNameMYPROVIDERNAMEを使用します
  • -providerClassを使用する場合は、クラス名だけでなく、完全修飾名を使用してください。

それはそれをする必要があります。

そうでない場合でも、オプションを修正した後でも、NoSuchProviderException(-providerNameを使用)またはClassNotFoundException(-providerClassを使用)が発生します。keytoolの正しいコピーを使用していることを確認してください。つまり、実行時に、PATH変数に依存するのではなく、keytoolのフルパスを指定します。パスがプロバイダーがインストールされたJREを参照していることを確認してください。多くのシステム(私のような)には、複数のJRE/JDKがインストールされています。

幸運を。

于 2012-10-20T15:18:31.507 に答える
1

プログラムがアルゴリズム内で行っている進行状況を見ることができなければ、何が起こっているのかを知ることは困難です。デバッグ メッセージなどで実際に機能するプログラムの部分を追跡してみてください。そうすれば、何が機能し、何が機能しないかがわかります。

RuntimeException がある場合、ループに陥る可能性があります。また、アルゴリズム GOST2001Signature が認識できない場合、そこに問題がある可能性があります。一度機能した場合は、2回目に初期化しないでください。通常、私が書いたプログラムの一部が 1 回は機能するが、2 回目は機能しない場合、何かを初期化するのを忘れて結果が変わってしまうなどの原因がありました。

幸運を。私の提案がお役に立てば幸いです。

于 2012-05-31T17:55:04.327 に答える