Bonjour,
Est ce que quelqu'un pourra me montrer comment configurer mon environnement java pour supporter et utiliser PKCS12 ?
Merci
Version imprimable
Bonjour,
Est ce que quelqu'un pourra me montrer comment configurer mon environnement java pour supporter et utiliser PKCS12 ?
Merci
Bonjour,
Je pense que votre sujet est en lien avec celui-ci :
http://www.developpez.net/forums/d17...r-mycert-cert/
Or celui-ci cite le tutoriel suivant sur la cryptographie :
http://nyal.developpez.com/tutoriel/...cycastle/#L3.1
Je vous conseil donc de le lire. Si toute fois, vous avez des difficultés, nous somme là pour ça.
Cordialement,
Patrick Kolodziejczyk.
Merci je les les tutoriaux et je vous mets au courant.
J'ai testé le bout de code suivant (j'ai pris à partir du tutoriel) pour charger mon keystore :
Une exception est levée à la ligne suivante :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 // CHARGEMENT DU FICHIER PKCS#12 Keystore ks = null; char[] password = null; Security.addProvider(new BouncyCastleProvider()); try { ks = KeyStore.getInstance("PKCS12"); // Password pour le fichier personnal_nyal.p12 password = "2[$0wUOS".toCharArray(); ks.load(new FileInputStream("personnal_nyal.p12"), password); } catch (Exception e) { System.out.println("Erreur: fichier " + "personnal_nyal.p12" + " n'est pas un fichier pkcs#12 valide ou passphrase incorrect"); return ; }
Code:ks.load(new FileInputStream("personnal_nyal.p12"), password);
Voilà l'exception que je reçois :
Est ce que c'est mon environnement qui n'est pas bien configuré?Citation:
java.io.IOException: failed to decrypt safe contents entry: java.io.IOException: getSecretKey failed: PBE SecretKeyFactory not available
at com.sun.net.ssl.internal.pkcs12.PKCS12KeyStore.engineLoad(Unknown Source)
at java.security.KeyStore.load(Unknown Source)
at com.anthil.apns.service.ExtractFile.main(LoadFile.java:21)
Caused by: java.io.IOException: getSecretKey failed: PBE SecretKeyFactory not available
at com.sun.net.ssl.internal.pkcs12.PKCS12KeyStore.getPBEKey(Unknown Source)
... 3 more
Caused by: java.security.NoSuchAlgorithmException: PBE SecretKeyFactory not available
at javax.crypto.SecretKeyFactory.<init>(DashoA13*..)
at javax.crypto.SecretKeyFactory.getInstance(DashoA13*..)
... 4 more
ou est ce que le problème vient de mon certificat.p12 ?
Bonjour,
Essai de commencer par :
Code:ks = KeyStore.getInstance("PKCS12","BC");
J'ai ajouteret l'exception a changé.Code:ks = KeyStore.getInstance("PKCS12","BC");
Mais la raison pour laquelle je veux utiliser le PKCS est d'envoyer une push notification à un iphone à partir d'un programme java, voilà le code source de mon programme :
Une exception est levée un fois l'exécution arrive à la ligne suivante:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 payLoad.addAlert("My alert message"); payLoad.addBadge(45); payLoad.addSound("default"); PushNotificationManager pushManager = PushNotificationManager.getInstance(); pushManager.addDevice("iPhone", "f4201f5d8278fe39545349d0868a24a3b60ed732"); log.warn("Initializing connectiong with APNS..."); // Connect to APNs pushManager.initializeConnection(HOST, PORT, "c:/myDir/Certificates.p12", "password", SSLConnectionHelper.KEYSTORE_TYPE_PKCS12); Device client = pushManager.getDevice("iPhone"); // Send Push log.warn("Sending push notification..."); PushNotificationManager.getInstance().sendNotification(client, payLoad);
et l'exception est la suivante :Code:
1
2
3 pushManager.initializeConnection(HOST, PORT, "/etc/Certificates.p12", "password", SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);
Avez vous une idée de comment je peux résoudre ça ?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Exception in thread "main" com.notnoop.exceptions.InvalidSSLConfig: java.io.IOException: failed to decrypt safe contents entry: java.io.IOException: getSecretKey failed: PBE SecretKeyFactory not available at com.notnoop.apns.internal.Utilities.newSSLContext(Utilities.java:102) at com.notnoop.apns.ApnsServiceBuilder.withCert(ApnsServiceBuilder.java:139) at com.notnoop.apns.ApnsServiceBuilder.withCert(ApnsServiceBuilder.java:114) at com.anthil.apns.service.Push.main(Push.java:20) Caused by: java.io.IOException: failed to decrypt safe contents entry: java.io.IOException: getSecretKey failed: PBE SecretKeyFactory not available at com.sun.net.ssl.internal.pkcs12.PKCS12KeyStore.engineLoad(Unknown Source) at java.security.KeyStore.load(Unknown Source) at com.notnoop.apns.internal.Utilities.newSSLContext(Utilities.java:87) ... 3 more Caused by: java.io.IOException: getSecretKey failed: PBE SecretKeyFactory not available at com.sun.net.ssl.internal.pkcs12.PKCS12KeyStore.getPBEKey(Unknown Source) ... 6 more Caused by: java.security.NoSuchAlgorithmException: PBE SecretKeyFactory not available at javax.crypto.SecretKeyFactory.<init>(DashoA13*..) at javax.crypto.SecretKeyFactory.getInstance(DashoA13*..) ... 7 more
C'est bien ce qui me semblait, tu n'avais pas le bon provider.
Maintenant ceci :
Vérifie que tu utilises bien BC comme provider partout.Code:java.security.NoSuchAlgorithmException: PBE SecretKeyFactory not available
Comment je peux le vérifier ?
Et si je trouve que je ne l'utilise pas partout.
Comment je peux l'utiliser dans ce code source ?
Il faut préciser explicitement le provider dans les getInstance.
Je n'ai pas trouver comment le forcer dans ce bout de code :
J'ai même ajouté ces 2 ligne au débutCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 payLoad.addAlert("My alert message"); payLoad.addBadge(45); payLoad.addSound("default"); PushNotificationManager pushManager = PushNotificationManager.getInstance(); pushManager.addDevice("iPhone", "f4201f5d8278fe39545349d0868a24a3b60ed732"); log.warn("Initializing connectiong with APNS..."); // Connect to APNs pushManager.initializeConnection(HOST, PORT, "c:/myDir/Certificates.p12", "password", SSLConnectionHelper.KEYSTORE_TYPE_PKCS12); Device client = pushManager.getDevice("iPhone"); // Send Push log.warn("Sending push notification..."); PushNotificationManager.getInstance().sendNotification(client, payLoad);
, mais j'ai toujours la même exception.Code:
1
2 Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider ()); KeyStore ks = KeyStore.getInstance("PKCS12","BC");
L'erreur signifie que la méthode de chiffrement et la signature de la clé n'est pas supporté.
Comment as-tu fais ton fichier PKCS#12 ?
Par exemple si je fais :
Code:SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndAES").generateSecret( new PBEKeySpec("password".toCharArray()));
J'ai un :
Car mon provider ne connais pas cet algorithme.Code:
1
2
3
4 Exception in thread "main" java.security.NoSuchAlgorithmException: Algorithm PBEWithMD5AndAES not available at javax.crypto.b.a(Unknown Source) at javax.crypto.SecretKeyFactory.getInstance(Unknown Source) at AES.main(AES.java)
Ce n'ai pas moi qui l'ai fait.
comment je peux faire le mien en y introduisant un certificat.cer ?
Je dois lui ajouter une clé publique ou une clé privée ? et comment je peux générer les clés ?
Merci
Créé un keystore au format jks avec la commande keytool , une clé privée autosigné :
Converti un jks en jkcs12 :Code:keytool -genkey -keyalg RSA -alias "selfsigned" -keystore KEYSTORE.jks -storepass "secret" -validity 360
Code:keytool -importkeystore -srckeystore KEYSTORE.jks -destkeystore KEYSTORE.p12 -srcstoretype JKS -deststoretype PKCS12
Bonjour,
Quand j'exécute la deuxième commande j'ai l'erreur suivante :
Code:erreur keytool : java.io.IOException: Invalid keystore format
Je viens de tester chez un collègue, ça marche sans problème. Est ce que ça pourrait être due à mon OS ?
J'ai Windows 7 et mon collègue XP.
Bonjour,
L'OS non , mais la JRE installé très certainement.
Que dois-je vérifier ?
Déjà, la version de la JRE et du jar Bouncy Castle.
J'ai jre 7 et bcprov-jdk16-146.jar.
Et l'autre machine ?