Bonjour à tous,

J'ai créé une appli qui permet de signé électroniquement des documents pdf à partir d'un certificat électronique. Lorsque je lance mon appli, celle-ci plante sur

java.io.IOException: java.lang.reflect.InvocationTargetException
at com.ibm.security.pkcs7.ContentInfo.createDynamicObject(Unknown Source
)
at com.ibm.security.pkcs7.ContentInfo.createContent(Unknown Source)
at com.ibm.security.pkcs7.ContentInfo.decode(Unknown Source)
at com.ibm.security.pkcsutil.PKCSDerObject.decode(Unknown Source)
at com.ibm.security.pkcsutil.PKCSDerObject.<init>(Unknown Source)
at com.ibm.security.pkcs7.ContentInfo.<init>(Unknown Source)
at com.ibm.security.pkcs12.AuthenticatedSafe.decode(Unknown Source)
at com.ibm.security.pkcsutil.PKCSDerObject.decode(Unknown Source)
at com.ibm.security.pkcs12.AuthenticatedSafe.<init>(Unknown Source)
at com.ibm.security.pkcs12.BasicPFX.verifyMac(Unknown Source)
at com.ibm.security.pkcs12.PFX.verifyMac(Unknown Source)
at com.ibm.crypto.provider.PKCS12KeyStore.engineLoad(Unknown Source)
at java.security.KeyStore.load(KeyStore.java:1173)
at fr.mipih.emagh2.editionpdf.edition.ClientSignatureElectronique.signPd
f(ClientSignatureElectronique.java:113)
at fr.mipih.emagh2.editionpdf.edition.ClientSignatureElectronique.main(C
lientSignatureElectronique.java:73)


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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
	public static final boolean signPdf(String fname, String fnameS, String MdPCertificat, String PathToCertificat) 
			throws IOException, DocumentException, Exception 
	{
 
		String FileKeyUncrypted="";
		try {
			CryptageSignatureElectronique CSE = new CryptageSignatureElectronique("***********");
			traceur.tracer(ERREUR, "fileKeyPassword : "+PathToCertificat);
			FileKeyUncrypted = CSE.decode(MdPCertificat);
			traceur.tracer(ERREUR, "fileKeyPassword decrypté: "+FileKeyUncrypted);
		}
	    catch(Exception e)
	    { 
	    	traceur.tracer(ERREUR, "Message: "+ e.getMessage());
	    }
 
	    traceur.tracer(ERREUR, "Fichier à signer: "+fname);
	    traceur.tracer(ERREUR, "Fichier signe: "+fnameS);
			// Creation d'un KeyStore
			traceur.tracer(ERREUR, "1");
			KeyStore ks = KeyStore.getInstance("pkcs12");
			traceur.tracer(ERREUR, "2");
			// Chargement du certificat p12 dans el magasin
			ks.load(new FileInputStream(PathToCertificat), FileKeyUncrypted.toCharArray());
			traceur.tracer(ERREUR, "3");
			String alias = (String)ks.aliases().nextElement();
			traceur.tracer(ERREUR, "4");
			// Recupération de la clef privée
			PrivateKey key = (PrivateKey)ks.getKey(alias, FileKeyUncrypted.toCharArray());
			traceur.tracer(ERREUR, "5");
			// et de la chaine de certificats
			Certificate[] chain = ks.getCertificateChain(alias);
			traceur.tracer(ERREUR, "6");
 
			// Lecture du document source
			traceur.tracer(ERREUR, "7");
			PdfReader pdfReader = new PdfReader((new File(fname)).getAbsolutePath());
			traceur.tracer(ERREUR, "8");
			File outputFile = new File(fnameS);
			traceur.tracer(ERREUR, "9");
			// Creation du tampon de signature
			PdfStamper pdfStamper;
			traceur.tracer(ERREUR, "10");
			pdfStamper = PdfStamper.createSignature(pdfReader, null, '\0', outputFile);
			traceur.tracer(ERREUR, "11");
			PdfSignatureAppearance sap = pdfStamper.getSignatureAppearance();
			traceur.tracer(ERREUR, "12");
			sap.setCrypto(key, chain, null, PdfSignatureAppearance.SELF_SIGNED);
			traceur.tracer(ERREUR, "13");
			sap.setReason("Authentification sécurisée du document");
			traceur.tracer(ERREUR, "14");
			sap.setLocation("");
			traceur.tracer(ERREUR, "15");
			// Position du tampon sur la page (ici en bas a gauche page 1)
			sap.setVisibleSignature(new Rectangle(10, 10, 50, 35), 1, "sign_rbl");
			traceur.tracer(ERREUR, "16");
 
			pdfStamper.setFormFlattening(true);
			traceur.tracer(ERREUR, "17");
			pdfStamper.close();
			traceur.tracer(ERREUR, "18");
 
			return true;
	}
Le problème se situe lors de l'appel :
ks.load(new FileInputStream(PathToCertificat),FileKeyUncrypted.toCharArray());

Le fichier du certificat et le mot de passe son correct.
Je ne comprend pas trop cette erreur et je n'ai rien trouvé sur le net.

Pourriez-vous m'aider svp?

Ne serait ce qu'arriver à obtenir un message un peu plus compréhensible sur l'erreur rencontrée?

Le java utilisé est :

java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build pap32dev-20051104)
IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 AIX ppc-32 j9vmap3223-20051103 (JIT enabled)
J9VM - 20051027_03723_bHdSMR
JIT - 20051027_1437_r8
GC - 20051020_AA)
JCL - 20051102

Je suis un peu newbie dans cet environnement de développement.

D'autre part, l'application est développée sous Eclipse avec la jre 1.5.0_06.

Merci d'avance pour votre aide