JKSからKeyとその証明書チェーンを抽出しましたが、今ではこのキーをJavaを使用してWindowsキーストアに追加しようとしています。私は次のことをやった私のJKSロードするにはプログラムでWindows証明書ストアに秘密鍵を追加する方法
:
String jksPath = "D:\\mykeystore.jks";
KeyStore keystore = KeyStore.getInstance("JKS");
FileInputStream fIn = new FileInputStream(jksPath);
keystore.load(fIn, "12345678".toCharArray());
は、その後、私は、キーと証明書チェーンを取得:
Key key = keystore.getKey("res1", "12345678".toCharArray());
Certificate[] cchain = keystore.getCertificateChain("res1");
これまでのところは良い、私はこのキーを追加しよう私のWindowsのキーストア:
KeyStore ks = KeyStore.getInstance("Windows-MY");
ks.load(null, null);
ks.setKeyEntry("myKey", key, "12345678".toCharArray(), cchain);
そしてBOOM:
スレッド "main"の例外java.lang.ClassCastException:[Ljava.security.cert.Certificate; [Ljava.security.cert.X509Certificate;にキャストすることはできません。at sun.security.mscapi.KeyStore.engineSetKeyEntry(KeyStore.java:402) at sun.security.mscapi.KeyStore $ MY.engineSetKeyEntry(KeyStore.java:62) java.security.KeyStore.setKeyEntry(KeyStore。 java:909)
のsetKeyEntryコールによって例外がスローされます。
P.S:JKSタイプのキーストアで同じ構文を使用する場合、例外はスローされません。