我需要獲得x509證書的序列號。使用「certificate.getSerialNumber()」的結果與預期的不同。當我看到X509證書文件的規格,它應該在以下格式:獲得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
FILE
和查看文件,我看到:
0...0..r.......000010000001007492690
. *.H..
..
這似乎是串行的,由OpenSSL的,但OpenSSL的組合提供它與'3'(在每個數字之後)。
作爲參考,'的0x30 '是'0'的ASCII碼。同樣,'0x31'代表'1'...一直到0x39。 – cHao 2011-09-29 10:32:53
https://zakird.com/2013/10/13/certificate-parsing-with-openssl/和http://fm4dd.com/openssl/certserial.htm – EpicPandaForce 2015-03-24 11:51:01
[X509中有許多關於OpenSSL Library的有用資料序列號使用java](http://stackoverflow.com/questions/12582850/x509-serial-number-using-java)提供的解決方案:'.getSerialNumber()。toString(16)' – Vadzim 2015-09-15 11:49:41