2010-08-02 1 views

risposta

58

Sicuro.

Gli oggetti certificato possono essere creati da un'istanza di CertificateFactory - in particolare, una configurata per creare certificati X509. Questo può essere creato in questo modo:

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

allora avete bisogno di passare un InputStream contenente i byte del certificato. Ciò può essere ottenuto avvolgendo l'array di byte in un ByteArrayInputStream:

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

Grazie per la risposta. Ma sto diventando "(java.security.cert.CertificateException) java.security.cert.CertificateException: Impossibile analizzare il certificato: java.io.IOException: input vuoto" sull'ultima riga. InputStream non è vuoto, ma genera Eccezione – 0bj3ct

+1

La stessa cosa è successa a me all'inizio perché non stavo pensando attentamente a quello che stavo facendo. Nel mio caso era perché stavo cercando di fare quanto sopra con i byte da un keystore piuttosto che il certificato nel keystore. Estrarre il certificato dal keystore, ottenere i byte codificati, e quindi lavorare su quelli è stato ciò che ha reso questa risposta sopra funzionante per me. –

+2

Nel mio caso il problema era che il byte [] era codificato in base 64 ... Il messaggio di errore era "Input vuoto" leggermente fuorviante. Forse aiuta qualcuno a volte ... – 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 domanda non menziona base-64 e manca l'inizializzazione di 'stream'. Questo codice genererà un 'NullPointerException'. – EJP