2010-08-02 12 views

Répondre

58

Bien sûr.

Les objets de certificat peuvent être créés par une instance de CertificateFactory - en particulier, un configuré pour créer des certificats X509. Cela peut être créé comme ceci:

CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); 

Ensuite, vous devez passer un InputStream contenant les octets du certificat. Ceci peut être réalisé en enveloppant votre tableau d'octets dans un ByteArrayInputStream:

InputStream in = new ByteArrayInputStream(bytes); 
X509Certificate cert = (X509Certificate)certFactory.generateCertificate(in); 
+0

Merci pour votre réponse. Mais je reçois "(java.security.cert.CertificateException) java.security.cert.CertificateException: Impossible d'analyser le certificat: java.io.IOException: Entrée vide" sur la dernière ligne. InputStream n'est pas vide, mais il lance Exception – 0bj3ct

+1

La même chose m'est arrivée au début parce que je ne réfléchissais pas trop à ce que je faisais. Dans mon cas, c'était parce que j'essayais de faire ce qui précède avec les octets d'un keystore plutôt que le certificat dans le keystore. Extraire le certificat du keystore, obtenir les octets codés, puis travailler sur ceux-ci, a été ce qui a fait que cette réponse ci-dessus a fonctionné pour moi. –

+2

Dans mon cas, le problème était que l'octet [] était encodé en base 64 ... Le message d'erreur était l'entrée "Empty input" légèrement trompeuse. Peut-être que cela aide quelqu'un ... – riskop

-1
InputStream stream = null; 
byte[] bencoded = javax.xml.bind.DatatypeConverter.parseBase64Binary(x509CertificateStr); 

try { 
    CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); 
    cert = (X509Certificate) certFactory.generateCertificate(stream); 

} catch (java.security.cert.CertificateException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
+0

La question ne mentionne pas la base-64, et l'initialisation de 'stream' est manquante. Ce code va lancer une exception 'NullPointerException'. – EJP