2012-06-13 34 views
6

我有一個網頁,其中顯示了正在與服務器一起使用的SSL證書的詳細信息。我認爲的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

嘗試PEMReader API

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

一旦打印OBJ它會給你的toString格式

相關問題