1
我在Java KeyStore中存儲了我的證書,這是訪問Restful API所必需的。要訪問這個API,我需要創建JWT(Json Web Token),我正在用Java實現它。爲了生成JWT,我需要用給定的私鑰對有效載荷進行簽名。 那麼,我做的是,從.jks導入私有密鑰文件到我的代碼現在java - 需要從jks(java密鑰庫)導入私鑰
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();
,用這段代碼,它返回私鑰爲「空」值。這導致我的代碼失敗。 那麼,我的代碼是什麼,這樣我就可以讀取私鑰來簽署有效載荷來生成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。
您是如何將密鑰導入密鑰庫的?是導入密鑰時使用的別名的「鑰匙」? – JEY
我有一個.pfx文件。然後使用keytool命令,我將它導入到java密鑰庫中。 –
你確定「key」是你的私鑰的別名? – JEY