10

我有一个网页,其中显示了与服务器一起使用的 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”和替代名称列表,就像我在查看证书信息时在我的网络浏览器中看到的那样。

有没有办法做到这一点?我的班级路径上有整个 BouncyCastle,所以我希望我能在那里找到它,但我似乎无法找到它。

最糟糕的是最糟糕的我知道我可以花时间自己整理所有的零碎,但我不知道我是否会错过某人可能希望在那里找到的扩展。

4

3 回答 3

3

用我自己的解决方案回答我自己的问题。

事实证明,这种糟糕的 toString() 输出只发生在使用 Sun 的 X509Certificate 实现时。使用 BouncyCastle 时,它​​看起来要好得多(或者至少更详细。)

事实证明,我们没有在页面呈现之前初始化 BC 的提供程序。初始化被延迟,直到我们想用它来实际生成证书,现在它是在 webapp 启动时完成的,toString() 看起来好多了。

于 2012-06-19T04:38:39.797 回答
1

标准 X509Certificate 类中几乎所有的“点点滴滴”都应该是可用的:

你应该能够很容易地格式化你想要的任何东西,无论你想要什么。您还可以访问和迭代“ getIssuerAlternativeNames() ”集合。

PS:

这是一个关于实现 X509Certificate 类的优秀链接:

这是来自使用 Bouncy Castle 的人的链接(解决方案还涉及上述链接):

于 2012-06-13T05:55:42.727 回答
0

尝试来自 BC Provider 的 PEMReader API

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

一旦你打印了 obj 它会给你 toString 格式

于 2014-03-20T14:17:35.530 回答