obtenir X509Certificate numéro de série

J'ai besoin d'obtenir le numéro de série de certificat x509. Le résultat de l'utilisation d'un certificat.getSerialNumber()" diffère de celle prévue. Comme je vois certificat X509 fichier specs, il faut aller dans le format suivant:

    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
        }

Et je ne pouvais pas trouver dans le début du fichier de la valeur fournie par le certificat.getSerialNumber() la méthode.

Question: Quand j'essaie d'afficher le numéro de série avec openssl il prend à droite de la valeur à partir d'un fichier, mais ajoute '3' après chaque numéro.

Donc ma question est: Comment puis-je obtenir de la série mémorisé la valeur? Et où lire le pourquoi et le comment d'openssl et de java modifie ces données.

OPENSSL

Exécuter avec:

openssl x509 -serial -noout -inform DER -in mycert.cer

Résultat:

serial=3030303031303030303030313030373439323639

JAVA

Code:

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);

De sortie:

275106190557734483187066766755592068430195471929

FICHIER

Et affichez le fichier, je vois:

0...0..r.......000010000001007492690
.   *.H..
..

qui semble être le numéro de série fourni par openssl mais openssl le mélanger avec de l' '3'(après chaque numéro).

InformationsquelleAutor Denis | 2010-08-07