2017-05-17 16 views
-1

ここでは、RunTime中にClient Privateキーを使用してキーストアを作成しようとしています。 privateKeyをキーストアにロードする際に直面しています。RSA秘密鍵を使用したキーストアの作成

JKSタイプ:

clientKey=-----BEGIN RSA PRIVATE KEY----- ...-----END RSA PRIVATE KEY-----" 
KeyStore keyStore = KeyStore.getInstance("JKS"); 

keyStore.load(new ByteArrayInputStream(clientKey.getBytes()), "*********".toCharArray()); 

Exception: 
java.io.IOException: Invalid keystore format 
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:658) 
at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:56) 
at sun.security.provider.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:224) 
at sun.security.provider.JavaKeyStore$DualFormatJKS.engineLoad(JavaKeyStore.java:70) 

PKCS12タイプ:

clientKey=-----BEGIN RSA PRIVATE KEY----- ...-----END RSA PRIVATE KEY-----" 

KeyStore keyStore = KeyStore.getInstance("PKCS12"); 
keyStore.load(new ByteArrayInputStream(clientKey.getBytes()), "*********".toCharArray()); 

Exception: 
java.io.IOException: toDerInputStream rejects tag type 45 
at sun.security.util.DerValue.toDerInputStream(DerValue.java:847) 
at sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1915) 
at java.security.KeyStore.load(KeyStore.java:1445) 

この問題を解決するために助けてください。

+0

秘密鍵はどのような形式でもキーストーンではありません。あなたが何を求めているのか、試しているのか、なぜこれがうまくいくと思ったのかは不明です。 – EJP

答えて

0

clientKeyには開始および終了ヘッダーがあります。それらを削除してから、鍵を解読してByteArrayInputStreamにフィードする必要があります。

次の方法で-----BEGIN RSA PRIVATE KEY----------END RSA PRIVATE KEY-----を削除することができます。

clientKey = clientKey.replace("-----BEGIN RSA PRIVATE KEY-----", ""); 
clientKey = clientKey.replace("-----END RSA PRIVATE KEY-----", ""); 

そして、何をして残っていることはBase64エンコード形式(PEM)です。 base64でエンコードされた形式でない場合は、エンコーディングの種類を識別してデコードする必要があります。 base64でエンコードされている場合は、以下のようにデコードしてデコードすることができます。

new ByteArrayInputStream(Base64.decode(clientKey)); // <-- clientKey here is without the headers. 
関連する問題