2012-06-13 4 views
6

У меня есть веб-страница, где я показываю детали SSL-сертификата, который используется с сервером. Я думал, что ToString() может быть хорошо, но это выглядит следующим образом:Есть ли способ распечатать сертификат 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] 

У меня есть проблема с этим является неясным представлением расширений. Я бы предпочел увидеть «subjectAltNames» и список альтернативных имен, например, что я вижу в своем веб-браузере, когда я смотрю на информацию о сертификате.

Есть ли способ сделать это? У меня есть весь BouncyCastle на моем пути к классу, поэтому я надеялся, что смогу найти его там, но я, похоже, не могу его найти.

Худшее приходит в худшее. Я знаю, что могу поместить время на то, чтобы собрать все кусочки и кусочки, но я не знаю, пропущу ли я расширение, которое кто-то может ожидать найти там.

ответ

1

Ответ на мой вопрос с моим собственным решением.

Получается, что этот дрянной вывод toString() возникает только при использовании Sun для X509Certificate. При использовании BouncyCastle это выглядит намного лучше (или, более подробно, по крайней мере.)

Оказалось, что мы не инициализируем поставщика BC до того, как страница была отображена. Инициализация была отложена до тех пор, пока мы не хотим использовать ее для создания сертификата, и теперь, когда это делается при запуске webapp, toString() выглядит намного лучше.

1

Практически все «биты и куски» должны быть доступны из стандартного класса X509Certificate:

Вы должны быть в состоянии довольно легко форматировать все, что вы хотите, как вы хотите , Вы также можете получить доступ и выполнить итерацию через коллекцию «getIssuerAlternativeNames()».

PS:

Вот отличная ссылка о реализации класса X509Certificate:

А вот связь с кем-то, кто с помощью Bouncy Castle (решение также включает в себя выше ссылки):

0

Try PEMReader API от BC Provider

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

когда вы печатаете OBJ это даст вам формат ToString

Смежные вопросы