2016-12-08 2 views
0

Ich versuche, Seriennummer von einem X.509-Cert zu bekommen .. Wenn ich die Seriennummer, die durch meinen Code mit der aktuellen Seriennummer (unter Windows) vergleichen, führende Nullen der tatsächlichen Seriennummer (des X509-Zertifikats) fehlen.Fehlende führende Nullen, während Seriennummer eines x509 cert Abrufen

Irgendwelche Vorschläge oder alternative Möglichkeiten, um die Seriennummer des X.509-Zertifikats in hex mit den führenden Nullen zu bekommen ??

Unten ist das Code-Segment, das ich zur Zeit mit:

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

Warum denken Sie, dass es Leafing Nullen geben sollte? Können Sie die ASN-codierte Seriennummer des Zertifikats anzeigen? – Crypt32

+0

Die tatsächliche Seriennummer sieht wie folgt aus: 00 a6 XX XX XX XX XX XX XX. aber die Seriennummer, die vom obigen Quellcode erzeugt wird, sieht aus wie a6 XX XX XX XX XX XX XX .. die führende 00 fehlt. – jAnA

+0

Die Seriennummer ist als ASN.1 INTEGER definiert. Führende Nullen sind nicht signifikant. – EJP

Antwort

1

BigInteger hat eine toByteArray() Methode, die die führende 00s erneut ergänzt:

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

Sie haben mehr Möglichkeiten, jetzt zu konvertieren das Byte-Array zu einer hexadezimalen Zeichenfolge:

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

Zum Beispiel mit Apache Commons Codec:

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

Eigentlich _preserve_ 00s nicht; es fügt eine einzelne 00 hinzu, wenn sie für das Zeichen benötigt wird, was (glücklicherweise) dieselbe Regel ist, die ASN.1 DER verwendet. –

+0

@ dave_thompson_085 Ja, du hast Recht. – Omikron

+0

Danke .., wenn ich die Seriennummer des selbstsignierten Certs mit openssl lese es zeigt nicht die führenden 00. aber wenn ich die Seriennummer in Windows lesen, zeigt es die führenden OO in der Seriennummer.Mai weiß ich warum? – jAnA