Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取X509证书序列号_Java_Security_X509certificate - Fatal编程技术网

Java 获取X509证书序列号

Java 获取X509证书序列号,java,security,x509certificate,Java,Security,X509certificate,我需要获得x509证书的序列号。使用“certificate.getSerialNumber()”的结果与预期结果不同。正如我看到的X509证书文件规范,它应该采用以下格式: Certificate ::= SEQUENCE { tbsCertificate TBSCertificate, signatureAlgorithm AlgorithmIdentifier, signatureValue BIT

我需要获得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

代码:

输出:

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)