Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用RSA私钥创建密钥库_Java_Keystore - Fatal编程技术网

Java 使用RSA私钥创建密钥库

Java 使用RSA私钥创建密钥库,java,keystore,Java,Keystore,在这里,我们尝试在运行时使用客户机私钥创建密钥库。 在将privateKey加载到密钥库时,我们将面临此问题 JKS类型: clientKey=-----BEGIN RSA PRIVATE KEY----- ...-----END RSA PRIVATE KEY-----" KeyStore keyStore = KeyStore.getInstance("JKS"); keyStore.load(new ByteArrayInputStream(clientKey.getBytes()),

在这里,我们尝试在运行时使用客户机私钥创建密钥库。 在将privateKey加载到密钥库时,我们将面临此问题

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)
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)
PKCS12类型:

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)
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)

请帮助解决此问题。

您的
clientKey
具有开始和结束标题。您必须删除它们,然后解码密钥并将其提供给
ByteArrayInputStream

您可以通过以下方式删除
----开始RSA私钥------
----结束RSA私钥------

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.

newbytearrayinputstream(Base64.decode(clientKey));//私钥不是任何格式的密钥。不清楚你在问什么,尝试什么,或者为什么你认为这会奏效。