2012-06-13 10 views
6

Tengo una página web donde muestro los detalles de un certificado SSL que se está utilizando con el servidor. Pensé que toString() podría estar bien, pero parece que esto:¿Hay alguna manera de imprimir bastante un certificado 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] 

El problema que tengo con él es la representación oscura de extensiones. Preferiría ver "subjectAltNames" y la lista de nombres alternativos, como lo que puedo ver en mi navegador web cuando miro la información del certificado.

¿Hay alguna manera de hacer esto? Tengo la totalidad de BouncyCastle en mi camino de clase, así que esperaba haberlo encontrado allí, pero parece que no puedo encontrarlo.

Peor llega al peor Sé que puedo dedicar tiempo a sacar todos los pedazos, pero no sé si voy a perder una extensión que alguien podría esperar encontrar allí.

Respuesta

1

Respondiendo a mi propia pregunta con mi propia solución.

Resulta que esta salida de mierda toString() solo ocurre cuando se usa la implementación de Sun del Certificado X509. Al utilizar BouncyCastle, se ve mucho mejor (o más detallada, al menos).

Resultó que no estábamos inicializando el proveedor de BC antes de que se procesara la página. La inicialización se retrasó hasta que quisimos usarla para generar realmente un certificado y ahora que se ha hecho en el inicio de la aplicación webapp, toString() se ve mucho mejor.

1

Casi todas las "partes y piezas" deben estar disponibles en la clase X509Certificate estándar:

Usted debe ser capaz de dar formato muy fácilmente lo que quiera, como quiera . También puede acceder e iterar a través de la colección "getIssuerAlternativeNames()".

PS:

He aquí un excelente enlace sobre la implementación de la clase X509Certificate:

Y aquí hay un enlace de alguien que está utilizando Castillo Hinchable (la solución también implica lo anterior enlace):

0

Try PEMReader API de BC Proveedor

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

una vez que se imprime el obj que le dará el formato toString

Cuestiones relacionadas