2012-06-13 12 views
6

サーバーで使用されているSSL証明書の詳細を表示するWebページがあります。私はそれのtoString()は大丈夫かもしれないと思ったが、それは次のようになります。私はそれを持っているX509Certificateをきれいに印刷する方法はありますか?

[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"と証明書情報を見ると私のWebブラウザで見ることができるような代替名のリストが好きです。

これを実行する方法はありますか?私はBouncyCastleの全部を私のクラスパスに持っていますので、私はそこにそれを見つけることができたと思っていましたが、私はそれを見つけることができないようです。

最悪になります私は自分自身のすべてのビットとピースを得ることに時間を置くことができることを知っていますが、私は誰かがそこに見つけることを期待するかもしれない拡張を欠場するかどうかは分かりません。

答えて

1

私自身の解決策で自分の質問に答える。

この厄介なtoString()出力は、SunのX509Certificateの実装を使用している場合にのみ発生します。 BouncyCastleを使用すると、より多くの詳細が表示されます。

ページがレンダリングされる前にBCのプロバイダを初期化していないことが判明しました。初期化は、実際に証明書を生成するために使用するまで延期され、webappの起動時に行われるようになったので、toString()はよりよく見えます。

1

ほとんどすべて「こまごまとしたが、」標準のX509Certificateクラスから利用可能であるべきである:

あなたはかなり簡単にしたいしかし、あなたが好きなフォーマットすることができるはずです。また、「getIssuerAlternativeNames()」コレクションにアクセスして繰り返し行うこともできます。

PS:

はここでのX509Certificateクラスの実装に関する優れたリンクです:

そして、ここで弾む城を使っている誰かからのリンク(ソリューションは、上記の関係ですリンク):

0

あなたがobjを印刷したら、それはあなたのtoString形式

を与えるBCプロバイダ

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

からPEMReaderのAPIを試してみてください