0
私は、証明書を作成する外部サービスを用意しています。このサービスのうち、バッファ(String)を受け取ります。このバッファをJavaのKeyStoreにロードしてから、「ストア」関数を使用して.p12ファイルを作成しようとします。しかし、ストア関数は例外をスローします - "与えられた最終ブロックが適切に埋められない"。KeyStoreを使用して.p12ファイルを作成する
私が何を試みても、これを動作させたり問題の原因を見つけることはできません。
私のコードは次のとおりです。
public void createP12Certificate(String userName, String comment) throws KeyStoreException, AdminCertificateException, CertificateException, NoSuchAlgorithmException, IOException
{
KeyStore store = KeyStore.getInstance("PKCS12");
/* Some Code that gets 'buff' etc. */
byte[] byteBuff = hexStringToByteArray(buff);
Arrays.reverse(byteBuff);
InputStream inputStream = new ByteArrayInputStream(byteBuff);
store.load(inputStream, password.toCharArray());
OutputStream outputStream = new FileOutputStream(userName+".p12");
store.store(outputStream,anotherPassword); //Throws Exception
}
はどうもありがとうございました!他の投稿のコードが例外なく動作しますので
これはコンテンツを受信する形式ですか? hexStringToByteArrayとArrays.reverseの組み合わせは非常に奇妙です – pedrofb
現在、C#で動作するコードを複製しようとしています。したがって、Javaの.net関数にアクセスできます。 JavaとC#の両方は、バッファ(証明書の内容)を提供する外部Webサービスを使用します。これは16進文字列であり、KeyStoreはバイト配列を想定しているため、hexStringToByteArrayを使用する必要があります。バイト配列を元に戻さないと、Javaは「ロード」メソッドで例外をスローします。データはPKCS12形式ではありません。 C#はバイト配列を逆転させるので、私もそれを逆にしました。 Javaは "load"で例外をスローしなくなりましたが、今説明したように、 "store"に例外をスローします。 – Adam
C#でHex変換 - >バイト - >逆が同じ動作をしない可能性があります。メモ帳++などの16進バイトの変換をサポートするテキストエディタなど、サーバーから返される形式を確認することをお勧めします。ファイルを見ることなく、私はもっと助けることができません – pedrofb