0

KeyToolクラスを使用したプログラミングでJavaキーストアをPFXファイルに変換するには、Keytool.exeと同じ機能をサポートする必要があります。プロジェクト要件の制限により、アプリケーションからコマンドプロンプトプロセスを使用できないため、プログラミングを通じてコマンドプロセスを開くこともできません。

例えば

C:\ keytool -importkeystore -srckeystore .k eystore -srcstoretype JKS -destkeystore thekeystore.pfx -deststoretype PKCS12

上記のコマンドを使用してkeytool.exeでPFXファイルを作成できますが、自分のアプリケーションからキーストアでPFXファイルを生成する必要があります。私はグーグルでたくさん検索しました、そして私はこの問題に関してどんな参照または助けも与えることができるどんな役に立つリンクも見つけることができませんでした。クラスsun.security.tools.Keytoolがありますが、これも検索しましたが、このクラスの一般的なプログラミングヘルプを見つけることができません。誰かが何かヒントやアイデアを持っているなら、それを共有してください。

4

1 に答える 1

2

KeyToolクラスについてはわかりません。これは、パブリックAPIではないため、使用するのは嫌ですが、KeyStoreクラスを使用して自分でキーストアを読み書きできます。ドキュメントによると、Javaは少なくともキーストアタイプjkspkcs12キーストアタイプをサポートしているため、次のようなことができます。

public void convertKeystore(Path sourceKeystorePath,
                            char[] sourceKeystorePassword,
                            Path destKeystorePath,
                            char[] destKeystorePassword)
throws GeneralSecurityException, IOException {

    KeyStore sourceKeystore = KeyStore.getInstance("jks");
    try (InputStream stream =
            new BufferedInputStream(
                Files.newInputStream(sourceKeystorePath))) {
        sourceKeystore.load(stream, sourceKeystorePassword);
    }

    KeyStore destKeystore = KeyStore.getInstance("pkcs12");
    destKeystore.load(null, destKeystorePassword);

    // Assume each alias in a keystore has the same password
    // as the keystore itself.
    KeyStore.ProtectionParameter sourceAliasPassword =
        new KeyStore.PasswordProtection(sourceKeystorePassword);
    KeyStore.ProtectionParameter destAliasPassword =
        new KeyStore.PasswordProtection(destKeystorePassword);

    Enumeration<String> aliasList = sourceKeystore.aliases();
    while (aliasList.hasMoreElements()) {
        String alias = aliasList.nextElement();
        KeyStore.Entry entry =
            sourceKeystore.getEntry(alias, sourceAliasPassword);
        destKeystore.setEntry(alias, entry, destAliasPassword);
    }

    try (OutputStream stream =
            new BufferedOutputStream(
                Files.newOutputStream(destKeystorePath))) {
        destKeystore.store(stream, destKeystorePassword);
    }
}
于 2013-03-23T13:43:34.017 に答える