2

キー ストアを作成し、公開キーを抽出しました。キー ストアを使用するためにkeyproperties.propertiesファイルを作成しましたが、"PRIVATE" というプロパティがわかりません。それがパスなのか、秘密鍵のパスワードなのか、それとも何か他のものなのか、私は完全に混乱しています。

  1. プロパティファイル ->.properties拡張子付き
  2. データはどこからも来ておらず、静的データを使用しています。
  3. PRIVATE-> 秘密鍵を取得するために使用されるキーストアのパス

これは私のコードのスニペットです:

public static void main(String[] args)throws Exception {
   Properties properties = new Properties();
   String path = properties.getProperty("PRIVATE");
   KeyStore ks = KeyStore.getInstance("pkcs12", "BC");
   ks.load(new FileInputStream(path), keystore_password.toCharArray());
}
4

1 に答える 1

3

Propertiesを使用してオブジェクトを作成するときnew Properties()、そのオブジェクトにはまだデータが格納されていません。properties.getProperty("PRIVATE")常に が返されるため、意味がありませんnull

ファイルを作成したと主張していますが、オブジェクト.propertiesにロードしている場所はどこにもありません。Properties

properties.load(new FileInputStream(readerForProperties));

そのファイルを読み取ることができる を使用してファイルに定義したプロパティ(そのようなファイルの作成方法については、 API ドキュメント.propertiesを参照してください) は、メソッドを使用してアクセスできるようになります。ReadergetProperty()

path変数を使用FileInputStreamして、 をロードするために使用される を作成していますKeyStore。その場合、path はキー ストアへのパスである必要があります。

私が書いた例を、ドキュメントを読まずに (または少なくとも理解せずに) コピー/貼り付けたようです。

私の例では、"Private"プロパティ名として使用しましたが、それは関係ありません。"pathToKS"または"keystore"またはという名前を付けたい場合"banana"は、そうすることができます。

私の場合、.propertiesファイルは次のようになります。

PUBLIC      c:/examples/signatures/public.cer
ROOTCERT    c:/examples/signatures/CACertSigningAuthority.crt
PRIVATE     c:/examples/signatures/private.p12
PASSWORD    secret

したがって、私の場合、properties.getProperty("PRIVATE")はキーストアproperties.getProperty("PUBLIC")を返し、公開鍵properties.getProperty("ROOTCERT")を返し、認証局の公開鍵をproperties.getProperty("PASSWORD")返し、キーストアのパスワードと、公開鍵に対応するキーストアに保存されている秘密鍵のパスワードを返します (これらのパスワードは同一である必要はありません)。

次のようにキーストアへのパスを保存する場合:

banana  c:/examples/signatures/private.p12

これを行う必要があります:

String path = properties.getProperty("banana");

さらにコードを書く前に、ドキュメントを注意深く読んでください。ドキュメントを読むと、時間を大幅に節約できます。

于 2013-08-19T10:43:59.190 に答える