2016-12-08 14 views
0

私はX.509証明書からシリアル番号を取得しようとしています。私のコードで生成されたシリアル番号と実際のシリアル番号(ウィンドウ上) (X509証明書の)実際のシリアル番号の先頭にゼロがありません。x509証明書のシリアル番号を取得中に先行ゼロが見つからない

x.509証明書のシリアルナンバーを先行ゼロの16進数で得るための提案や代替方法はありますか?以下は

私が現在使用しているコード・セグメントである:

InputStream in = new FileInputStream("cert"); 
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); 
X509Certificate certificate = (X509Certificate) certificateFactory.generateCertificate(in); 
String serialNum = certificate.getSerialNumber().toString(16); 
System.out.println(serialNum); 
+0

なぜリーフィングゼロがあると思われますか? ASNでコード化された証明書のシリアル番号を表示できますか? – Crypt32

+0

実際のシリアル番号の表示は、00 a6 XX XX XX XX XX XX XXのようになります。上記のソースコードで生成されたシリアル番号は、a6 XX XX XX XX XX XX XXのように見えます。先頭00はありません。 – jAnA

+0

シリアル番号は、ASN.1 INTEGERとして定義されています。先行ゼロは重要ではありません。 – EJP

答えて

1

BigInteger大手00sの再追加toByteArray()方法があります。

byte[] serialNumBA = certificate.getSerialNumber().toByteArray() 

は今、あなたは、変換には、いくつかの方法がありますバイト配列を16進文字列に変換します。

How to convert a byte array to a hex string in Java?

たとえばApacheコモンズコーデックの場合:

String serialNum = Hex.encodeHexString(serialNumBA); 
+0

実際には_preserve_00sはありません。それはサインのために必要とされる1つの00のifを再追加します(幸いにも)ASN.1 DERが使用するのと同じルールです。 –

+0

@ dave_thompson_085ええ、そうです。 – Omikron

+0

ありがとうございました。私はopensslを使って自己署名証明書のシリアル番号を読むと、それは先頭の00を表示していません。しかし、Windowsのシリアル番号を読むとシリアル番号の先頭にooが表示されます。 – jAnA

関連する問題