2012-06-13 12 views
6

Ho una pagina web in cui mostro i dettagli di un certificato SSL che viene utilizzato con il server. Ho pensato che toString() potrebbe essere a posto, ma sembra che questo:C'è un modo per stampare un certificato X509?

[0]   Version: 3 
     SerialNumber: 117262955582477610212812061435665386300 
      IssuerDN: CN=localhost 
      Start Date: Wed Jun 13 15:15:05 EST 2012 
      Final Date: Tue Jun 08 15:15:05 EST 2032 
      SubjectDN: CN=localhost 
      Public Key: DSA Public Key 
      y: 6ef96c2ace616280c5453dda2[TRUNCATED BY ME] 

    Signature Algorithm: SHA1withDSA 
      Signature: 302c021450b1557d879a25ccf6b89e7ac6de8dc6 
         0b13df7e0214559cdc810cdb1faa3a645da837cd 
         5efdeb81d62e 
     Extensions: 
         critical(true) 2.5.29.17 value = DER Sequence 
    Tagged [7] IMPLICIT 
     DER Octet String[4] 

Il problema che ho con esso è la rappresentazione oscura di estensioni. Preferirei vedere "subjectAltNames" e l'elenco di nomi alternativi, come quello che posso vedere nel mio browser quando guardo le informazioni sul certificato.

C'è un modo per farlo? Ho la totalità di BouncyCastle sul mio percorso di classe, quindi speravo di trovarlo lì, ma non riesco a trovarlo.

Il peggiore peggiore so che posso dedicare tempo a raccogliere tutti i pezzi, ma non so se mi mancherà un'estensione che qualcuno potrebbe aspettarsi di trovare lì.

risposta

1

Rispondere alla mia domanda con la mia soluzione.

Si scopre che questo output di toString() scadente si verifica solo quando si utilizza l'implementazione di Sun di X509Certificate. Quando si utilizza BouncyCastle, sembra molto meglio (o più dettagliato, almeno.)

Si è appena scoperto che non stavamo inizializzando il provider di BC prima che la pagina venisse resa. L'inizializzazione è stata ritardata fino a quando non avremmo voluto usarlo per generare effettivamente un certificato e ora che è stato fatto all'avvio webapp, il toString() sembra molto meglio.

1

Praticamente tutti i "pezzi" dovrebbero essere disponibili dalla classe X509Certificate di serie:

si dovrebbe essere in grado di formattare abbastanza facilmente quello che vuoi, come vuoi . Puoi anche accedere e scorrere la collezione "getIssuerAlternativeNames()".

PS:

Ecco un eccellente collegamento sull'implementazione della classe X509Certificate:

Ed ecco un link da qualcuno che sta usando Bouncy Castle (La soluzione prevede anche quanto sopra collegamento):

0

Prova PEMReader API da BC Provider

byte[] content = data.getBytes(); 
// create new buffered reader 
PEMReader pemReader = new PEMReader(br, null);  
Object obj = pemReader.readObject(); 

una volta che si stampa l'obj che vi darà il formato toString

Problemi correlati