Мне нужно получить серийный номер сертификата x509. Результат использования "certificate.getSerialNumber()" отличается от ожидаемого. Как я вижу спецификации файла сертификата X509, он должен иметь следующий формат:
Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate,
signatureAlgorithm AlgorithmIdentifier,
signatureValue BIT STRING }
TBSCertificate ::= SEQUENCE {
version [0] EXPLICIT Version DEFAULT v1,
serialNumber CertificateSerialNumber,
signature AlgorithmIdentifier,
issuer Name,
validity Validity,
subject Name,
subjectPublicKeyInfo SubjectPublicKeyInfo,
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
-- If present, version shall be v2 or v3
subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,
-- If present, version shall be v2 or v3
extensions [3] EXPLICIT Extensions OPTIONAL
-- If present, version shall be v3
}
И я не смог найти в начале файла значение, предоставляемое методом certificate.getSerialNumber().
И связанный с этим вопрос: при попытке отобразить серийный номер с помощью openssl он берет правильное значение из файла, но добавляет «3» после каждого числа.
Итак, мой вопрос: как я могу получить сохраненное серийное значение? А где почитать почему и как openssl и java модифицируют эти данные.
OPENSSL
Бежать с:
openssl x509 -serial -noout -inform DER -in mycert.cer
Результат:
serial=3030303031303030303030313030373439323639
JAVA
Код:
InputStream in = new FileInputStream("mycert.cer");
BouncyCastleProvider provider = new BouncyCastleProvider();
CertificateFactory certificateFactory = CertificateFactory.getInstance("X509", provider);
X509Certificate certificate = (X509Certificate) certificateFactory.generateCertificate(in);
BigInteger serialNum = certificate.getSerialNumber();
System.out.println(serialNum);
Выход:
275106190557734483187066766755592068430195471929
ФАЙЛ
И просматривая файл, я вижу:
0...0..r.......000010000001007492690
. *.H..
..
который кажется серийным номером, предоставленным openssl, но openssl смешивает его с «3» (после каждого числа).
0x30
— это код ASCII для «0». Аналогично0x31
для '1'... вплоть до 0x39. - person cHao   schedule 29.09.2011.getSerialNumber().toString(16)
- person Vadzim   schedule 15.09.2015