9 votes

Lire un certificat X.509 avec Java

J'essaie d'utiliser Java pour lire un certificat que j'ai reçu d'une partie externe. Le code génère l'erreur suivante :

java.lang.RuntimeException : java.security.cert.CertificateException : Unable to initialize, java.io.IOException : extra data given to DerValue constructor

Le code :

FileInputStream ksfis = new FileInputStream(this.getCertificateFile());
ksbufin = new BufferedInputStream(ksfis);
certificate = (X509Certificate)
  CertificateFactory.getInstance("X.509").generateCertificate(ksbufin);

Pour m'assurer que le problème n'était pas dans le code, j'ai créé un certificat auto-signé et je l'ai utilisé avec le code, et cela a fonctionné correctement. J'ai installé les deux certificats dans la chaîne de clés du système et ils sont tous deux valides. J'utilise un Mac et Java 1.6.

Savez-vous pourquoi j'obtiens l'exception susmentionnée lorsque je charge le certificat externe de la partie ? Pensez-vous qu'il a été corrompu pendant le transfert ? Si c'est le cas, il ne devrait pas apparaître comme valide sur le système local, n'est-ce pas ?

8voto

owlstead Points 22329

Essayez de taper ceci en utilisant openssl, puis importez le résultat :

openssl x509 -outform der -in certificate.pem -out certificate.der

ou utiliser la fonctionnalité Java Bouncy Castle dans l'API légère :

http://www.bouncycastle.org/docs/pkixdocs1.5on/org/bouncycastle/openssl/PEMReader.html

Vous pouvez encoder à nouveau le résultat et utiliser ensuite la fonction "X509" CertificateBuilder en Java pour obtenir un certificat défini par la JCE, par exemple

ByteArrayInputStream certStream  =  new ByteArrayInputStream(binaryCert);
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) certFactory.generateCertificate(certStream);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X