簡體   English   中英

有沒有一種方法可以漂亮地打印X509證書?

[英]Is there a way to pretty print an X509Certificate?

我有一個網頁,其中顯示服務器正在使用的SSL證書的詳細信息。 我以為toString()可能還可以,但是看起來像這樣:

  [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,所以我希望可以在其中找到它,但似乎無法找到它。

最糟糕的是最糟糕的,我知道我可以花些時間自己弄清所有的點點滴滴,但我不知道我是否會錯過有人可能會期望在那里找到的擴展。

用我自己的解決方案回答我自己的問題。

事實證明,這種糟糕的toString()輸出僅在使用Sun的X509Certificate實現時發生。 使用BouncyCastle時,它看起來要好得多(至少更詳細)。

事實證明,在呈現頁面之前,我們沒有初始化BC的提供程序。 初始化被延遲了,直到我們想要使用它來實際生成證書為止,並且現在已經在Webapp啟動時完成了,toString()看起來要好得多。

幾乎所有的“零散”都應該從標准X509Certificate類中獲得:

您應該能夠輕松地格式化所需的任何格式,但是可以根據需要進行格式化。 您還可以通過“ getIssuerAlternativeNames() ”集合進行訪問和迭代。

PS:

這是有關實現X509Certificate類的絕佳鏈接:

這是使用Bouncy Castle的人的鏈接(解決方案還涉及上述鏈接):

從BC Provider嘗試PEMReader API

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

一旦您打印了obj,它將為您提供toString格式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM