Esiste la possibilità di generare un java.security.cert.X509Certificate da un byte []?Genera X509Certificate dal byte []?
40
A
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);
-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
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
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. –
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