java - 需要从 jks(java keystore) 导入私钥
java - need to import private key from jks(java keystore)
我将我的证书存储在 Java KeyStore 中,这是访问 Restful API 所必需的。要访问此 API,我需要创建我在 Java 中实现的 JWT(Json Web 令牌)。为了生成 JWT,我需要使用给定的私钥对有效负载进行签名。
所以,我正在做的是,将私钥从 .jks 文件导入我的代码
FileInputStream is = new FileInputStream("src/main/resources/file.jks");
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(is, "password".toCharArray());
PrivateKey privateKey = (PrivateKey) keystore.getKey("key", "".toCharArray());
JWTClaimsSet claimsSetOne = new JWTClaimsSet.Builder()
.subject("alias")
.issueTime(new Date(123000L))
.issuer("https://issuer")
.audience("https://audience")
.build();
JWSSigner signer = new RSASSASigner(privateKey);
SignedJWT signedJWT = new SignedJWT (new JWSHeader(JWSAlgorithm.RS256), claimsSetOne);
signedJWT.sign(signer);
String orderOne = signedJWT.serialize();
现在,有了这段代码,它 returns 私钥作为 "null" 值。这导致我的代码失败。
那么,我的代码是什么,这样我就可以读取私钥来签署有效负载以生成 JWT。
或实现相同目标的任何其他替代方案。
提前致谢。
编辑 :
然后我尝试了这个命令,
File file = new File("src/main/resources/sho1.jks");
InputStream is = new FileInputStream(file);
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
String password = "sho123";
keystore.load(is, password.toCharArray());
KeyStore.PrivateKeyEntry keyEnt =
(KeyStore.PrivateKeyEntry) keystore.getEntry("sho",new KeyStore.PasswordProtection(password.toCharArray()));
PrivateKey privateKey = keyEnt.getPrivateKey();
它给我的错误是 Invalid_Signature。
JAVA 代码的执行没有任何问题。此代码工作正常。我得到的 INVALID_SIGNATURE 错误是由于 JKS。我导入的证书不正确,即它没有正确的证书路径。我尝试导入正确的方法然后它起作用了。
因此,请确保在这种情况下,您正在导入具有正确密钥对的证书,以便在 JKS 中获得正确的指纹。
谢谢大家。
我将我的证书存储在 Java KeyStore 中,这是访问 Restful API 所必需的。要访问此 API,我需要创建我在 Java 中实现的 JWT(Json Web 令牌)。为了生成 JWT,我需要使用给定的私钥对有效负载进行签名。 所以,我正在做的是,将私钥从 .jks 文件导入我的代码
FileInputStream is = new FileInputStream("src/main/resources/file.jks");
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(is, "password".toCharArray());
PrivateKey privateKey = (PrivateKey) keystore.getKey("key", "".toCharArray());
JWTClaimsSet claimsSetOne = new JWTClaimsSet.Builder()
.subject("alias")
.issueTime(new Date(123000L))
.issuer("https://issuer")
.audience("https://audience")
.build();
JWSSigner signer = new RSASSASigner(privateKey);
SignedJWT signedJWT = new SignedJWT (new JWSHeader(JWSAlgorithm.RS256), claimsSetOne);
signedJWT.sign(signer);
String orderOne = signedJWT.serialize();
现在,有了这段代码,它 returns 私钥作为 "null" 值。这导致我的代码失败。
那么,我的代码是什么,这样我就可以读取私钥来签署有效负载以生成 JWT。
或实现相同目标的任何其他替代方案。
提前致谢。
编辑 :
然后我尝试了这个命令,
File file = new File("src/main/resources/sho1.jks");
InputStream is = new FileInputStream(file);
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
String password = "sho123";
keystore.load(is, password.toCharArray());
KeyStore.PrivateKeyEntry keyEnt =
(KeyStore.PrivateKeyEntry) keystore.getEntry("sho",new KeyStore.PasswordProtection(password.toCharArray()));
PrivateKey privateKey = keyEnt.getPrivateKey();
它给我的错误是 Invalid_Signature。
JAVA 代码的执行没有任何问题。此代码工作正常。我得到的 INVALID_SIGNATURE 错误是由于 JKS。我导入的证书不正确,即它没有正确的证书路径。我尝试导入正确的方法然后它起作用了。 因此,请确保在这种情况下,您正在导入具有正确密钥对的证书,以便在 JKS 中获得正确的指纹。 谢谢大家。