Java 使用RSA私钥创建密钥库
在这里,我们尝试在运行时使用客户机私钥创建密钥库。 在将privateKey加载到密钥库时,我们将面临此问题 JKS类型: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()),
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));//私钥不是任何格式的密钥。不清楚你在问什么,尝试什么,或者为什么你认为这会奏效。