2012-03-20 14 views
5

Sto cercando una classe di utilità in grado di generare stringhe di certificati casuali a scopo di test. Qualche idea se ce n'è una già implementata?Genera certificati casuali

risposta

4

Il built-in librerie Java X500 sono orientati più verso utilizzando certificati di generare e parsing certificati. Potresti trovare un modo per fare ciò che vuoi, ma sarebbe quasi certamente disordinato e in un'API protetta (sun.security.*).

Suggerisco di includere la biblioteca del castello di Bouncy (licenza Apache). Ha una classe chiamata X509V3CertificateGenerator che è possibile utilizzare per impostare i campi di un certificato (emittente, oggetto, data di scadenza, ecc.).

Si dovrebbe quindi essere in grado di ottenere la stringa PEM da esso utilizzando la classe PEMWriter.

+5

Si noti che 'X509V3CertificateGenerator' è stato deprecato (almeno in Bouncy Castle 1.47). Suggeriscono di usare 'X509v3CertificateBuilder' (non nel' bcprov' ma nel vaso 'bcpkix'). – martijno

+0

Ora è nel contenitore 'bcmail' – KeksArmee

+0

@KeksArmee: è ancora in' bcpkix'. – jackyalcine

3

Per aggiungere alla soluzione data dalla martijno,

Invece di scrivere il proprio firmatario contenuti, JCAContentSigner può essere utilizzato per evitare le mappature a AlgorithmIdentifier (vale a dire OID).

JcaContentSignerBuilder accetta i nomi degli algoritmi come definiti here.

X509v3CertificateBuilder certBuilder = new X509v3CertificateBuilder(issuer, serialNumber, startDate, expiryDate, subject, SubjectPublicKeyInfo.getInstance(keyPair.getPublic().getEncoded())); 
JcaContentSignerBuilder builder = new JcaContentSignerBuilder("SHA256withRSA"); 
ContentSigner signer = builder.build(keyPair.getPrivate()); 

byte[] certBytes = certBuilder.build(signer).getEncoded(); 
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); 
X509Certificate certificate = (X509Certificate)certificateFactory.generateCertificate(new ByteArrayInputStream(certBytes)); 
+0

Ho ragione se questo non è un certificato autofirmato, devo solo sostituire la chiave privata con la chiave privata della CA? – maxbit89

Problemi correlati