Java 获取X509证书序列号
我需要获得x509证书的序列号。使用“certificate.getSerialNumber()”的结果与预期结果不同。正如我看到的X509证书文件规范,它应该采用以下格式:Java 获取X509证书序列号,java,security,x509certificate,Java,Security,X509certificate,我需要获得x509证书的序列号。使用“certificate.getSerialNumber()”的结果与预期结果不同。正如我看到的X509证书文件规范,它应该采用以下格式: Certificate ::= SEQUENCE { tbsCertificate TBSCertificate, signatureAlgorithm AlgorithmIdentifier, signatureValue BIT
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
代码:
输出:
275106190557734483187066766755592068430195471929
文件
查看文件时,我看到:
0...0..r.......000010000001007492690
. *.H..
..
这似乎是openssl提供的序列号,但openssl将其与“3”(在每个数字之后)混合使用。Java不会修改此数据。如果openssl也能做到这一点,我会感到惊讶。大概你的期望是不正确的。我对ruby也有同样的问题,并在java中找到了答案 对于那些想要ruby解决方案的人
serial = 275106190557734483187066766755592068430195471929
serial.to_s(16)
这将输出3030303031303030313030373439323639你好,我修改了我的问题。我知道我在什么地方错了,请帮我找到哪里。结果需要文件中的数字。OpenSSL只是打印十六进制值。”0'是0x30,'1'是0x31,等等。不知道Java在做什么,但我现在无法从iPad上看到您的所有代码,我明天会仔细查看。如果您的Java代码正在读取相同的文件,我认为它看起来没问题。是的,它是相同的文件。您还可以帮助对该问题进行投票,使其更具标记性。作为参考,
0x30
是“0”的ASCII码。类似地,0x31
用于“1”…一直到0x39。在上有许多关于OpenSSL库的有用信息,并提供了解决方案:.getSerialNumber().toString(16)
serial = 275106190557734483187066766755592068430195471929
serial.to_s(16)