10

サーバーで使用されているSSL証明書の詳細を表示するWebページがあります。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全体を持っているので、そこで見つけられると思っていましたが、見つけられないようです。

最悪の事態は最悪の事態になります。私は自分ですべての断片を取り除くことに時間をかけることができることを知っていますが、誰かがそこで見つけることを期待するかもしれない拡張機能を見逃すかどうかはわかりません。

4

3 に答える 3

3

私自身の解決策で私自身の質問に答えます。

このくだらないtoString()出力は、SunのX509Certificateの実装を使用している場合にのみ発生することがわかりました。BouncyCastleを使用すると、見た目がはるかに良くなります(少なくとも、より詳細になります)。

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

于 2012-06-19T04:38:39.797 に答える
1

ほとんどすべての「ビットとピース」は、標準のX509Certificateクラスから入手できるはずです。

好きなように、好きなように簡単にフォーマットできるはずです。「 getIssuerAlternativeNames()」コレクションにアクセスして反復することもできます。

PS:

X509Certificateクラスの実装に関する優れたリンクは次のとおりです。

そして、これが弾力がある城を使用している誰かからのリンクです(解決策は上記のリンクも含みます):

于 2012-06-13T05:55:42.727 に答える
0

BCプロバイダーのPEMReaderAPIをお試しください

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 に答える