2017-02-23 8 views
1

J'ai un stocké mon certificat dans le KeyStore Java qui est requis pour accéder à Restful API. Pour accéder à cette API, j'ai besoin de créer JWT (Json Web Token) que j'implémente en Java. Pour générer JWT j'ai besoin de signer la charge utile avec une clé privée donnée. Alors, ce que je fais est, l'importation clé privée du fichier .jks dans mon codejava - besoin d'importer la clé privée de jks (keystore 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(); 

Maintenant, avec ce morceau de code, il retourne la clé privée comme valeur « null ». ce qui entraîne l'échec de mon code. Alors, quel pourrait être mon code afin que je puisse lire la clé privée pour signer la charge utile pour générer JWT. Ou toute autre alternative pour y parvenir. Merci d'avance.
Edit: Je essayé cette commande,

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

Il me donne erreur Invalid_Signature.

+0

Comment avez-vous importé la clé dans votre magasin de clés? est "clé" l'alias utilisé lors de l'importation de votre clé? – JEY

+0

J'ai un fichier .pfx. Ensuite, en utilisant la commande keytool, j'ai importé cela dans le keystore java. –

+0

Et vous êtes sûr que "clé" est l'alias de votre clé privée? – JEY

Répondre

1

Rien ne cloche dans l'implémentation du code JAVA. Ce code fonctionne bien. Erreur que je reçois comme INVALID_SIGNATURE est due à JKS. Le certificat que j'importe n'est pas correct, c'est-à-dire qu'il n'a pas le bon chemin de certificat. J'ai essayé d'importer correctement, alors ça marche. Assurez-vous donc que dans ce type de scénario, vous importez un certificat avec une paire de clés correcte pour obtenir l'empreinte correcte dans le JKS. Merci à tous.