Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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-需要从jks(java密钥库)导入私钥_Java_Jwt_Private Key_Jks - Fatal编程技术网

java-需要从jks(java密钥库)导入私钥

java-需要从jks(java密钥库)导入私钥,java,jwt,private-key,jks,Java,Jwt,Private Key,Jks,我将证书存储在Java密钥库中,这是访问Restful API所必需的。要访问这个API,我需要创建JWT(JSONWeb令牌),我正在用Java实现它。为了生成JWT,我需要使用给定的私钥对有效负载进行签名。 所以,我要做的是,将私钥从.jks文件导入到我的代码中 FileInputStream is = new FileInputStream("src/main/resources/file.jks"); KeyStore keystore = KeyStore.ge

我将证书存储在Java密钥库中,这是访问Restful API所必需的。要访问这个API,我需要创建JWT(JSONWeb令牌),我正在用Java实现它。为了生成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();
现在,使用这段代码,它将私钥作为“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();

它给我的错误是无效的\u签名。

JAVA代码的实现中没有任何错误。这段代码运行良好。作为无效的_签名获取的错误是由JKS引起的。我导入的证书不正确,即没有正确的证书路径。我试着以正确的方式导入,然后就可以了。 因此,请确保在这种情况下,您正在导入具有正确密钥对的证书,以便在JKS中获得正确的指纹。
谢谢大家

JAVA代码的实现没有任何错误。这段代码运行良好。作为无效的_签名获取的错误是由JKS引起的。我导入的证书不正确,即没有正确的证书路径。我试着以正确的方式导入,然后就可以了。 因此,请确保在这种情况下,您正在导入具有正确密钥对的证书,以便在JKS中获得正确的指纹。
谢谢大家

您是如何在密钥库中导入密钥的?“key”是导入密钥时使用的别名吗?我有一个.pfx文件。然后使用keytool命令,我在java密钥库中导入了它。您确定“key”是您的私钥的别名吗?现在看看编辑的代码。其中“sho”是我们给jks的别名。服务器返回的是无效的_签名吗?或者它是由提供的代码引发的?您是如何在密钥库中导入密钥的?“key”是导入密钥时使用的别名吗?我有一个.pfx文件。然后使用keytool命令,我在java密钥库中导入了它。您确定“key”是您的私钥的别名吗?现在看看编辑的代码。其中“sho”是我们给jks的别名。服务器返回的是无效的_签名吗?还是由提供的代码抛出?