簡體   English   中英

獲取X509Certificate序列號

[英]get X509Certificate serial number

我需要獲得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'混合(在每個數字之后)。

我遇到了與ruby相同的問題,並使用java在java X509序列號中找到了答案

對於那些想要紅寶石解決方案的人

serial = 275106190557734483187066766755592068430195471929
serial.to_s(16)

這將輸出3030303031303030303030313030373439323639

Java不會修改此數據。 如果openssl做到了,我會感到驚訝。 大概你的期望是不正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM