问题
I'm trying to get serial number from a X.509 Cert.. When i compare the Serial number generated by my code with the actual serial number(on windows), leading zeroes of the actual serial number(of the X509 cert) are missing.
Any suggestions or alternative ways to get the serial number of the x.509 cert in hex with the leading zeroes??
Below is the code segment which I'm currently using:
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);
回答1:
BigInteger
has a toByteArray()
method that re-adds the leading 00s:
byte[] serialNumBA = certificate.getSerialNumber().toByteArray()
Now you have several ways to convert the byte array to a hex string:
How to convert a byte array to a hex string in Java?
For example with Apache commons codec:
String serialNum = Hex.encodeHexString(serialNumBA);
来源:https://stackoverflow.com/questions/41031770/missing-leading-zeroes-while-retrieving-serial-number-of-a-x509-cert