Bonjour,
J'ai un jeton au format JWT à crypter en RSA256.
J'utilise donc ceci:
Je souhaite maintenant chiffrer avec mon certificat (fichier monCertificat.pem) qui est de la forme suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 JWEHeader header = new JWEHeader(JWEAlgorithm.RSA_OAEP, EncryptionMethod.A256GCM); // "typ": "JWT" header.setType(new JOSEObjectType("JWT")); // "x5t":identifiant du certificat header.setX509CertThumbprint(new Base64URL("monCertificat")); JWTClaimsSet claimSet = new JWTClaimsSet(); // sets sur claimSet Map<String, Object> customClaims = new HashMap<String, Object>(); // sets sur customClaims claimSet.setCustomClaims(customClaims); EncryptedJWT jwt = new EncryptedJWT(header,claimSet);
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
Le contenu de ce certificat est je présume en Base64.
J'ai essayé ceci:
J'ai l'exception suivante sur "keyFactory.generatePublic(spec)":
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 String filename = "C:/xxx/monCertificat.pem"; File file = new File(filename); FileInputStream fis = new FileInputStream(file); DataInputStream dis = new DataInputStream(fis); byte[] keyBytes = new byte[(int)file.length()]; dis.readFully(keyBytes); dis.close(); X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); RSAPublicKey publicKey = (RSAPublicKey)keyFactory.generatePublic(spec); RSAEncrypter encrypter = new RSAEncrypter(publicKey); jwt.encrypt(encrypter); String jwtString = jwt.serialize();
Je ne comprend pas quoi faire pour que ca fonctionne et suis un peu perdu entre certificat, clé publique pour chiffrer...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 java.security.spec.InvalidKeySpecException: Inappropriate key specification: invalid key format
Est-ce que vous pouvez m'aider svp?
Edit:
J'ai changé l'algo pour le chiffrage du jeton comme ceci afin d'utiliser CertificateFactory qui permet apparament d'xploiter les certificats pem:
Je n'ai plus d'erreur et j'obtiens une clé publique. Cela vous semble t-il correct?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 String filename = "C:/xxx/monCertificat.pem"; File file = new File(filename); CertificateFactory fact = CertificateFactory.getInstance("X.509"); FileInputStream is = new FileInputStream (file); X509Certificate cer = (X509Certificate) fact.generateCertificate(is); RSAPublicKey publicKey = (RSAPublicKey) cer.getPublicKey(); RSAEncrypter encrypter = new RSAEncrypter(publicKey); jwt.encrypt(encrypter); String jwtString = jwt.serialize();
Partager