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).
- Pour référence,
0x30
est le code ASCII de '0'. De même0x31
pour '1'...tout le chemin jusqu'à 0x39. - Il y a beaucoup de trucs utiles concernant la Bibliothèque OpenSSL sur zakird.com/2013/10/13/certificate-parsing-with-openssl et fm4dd.com/openssl/certserial.htm
- X509 numéro de série à l'aide de java fournit la solution:
.getSerialNumber().toString(16)
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème avec ruby et trouvé la réponse ici en java X509 numéro de série à l'aide de java
Pour ceux qui veulent la solution en ruby
ce sera de sortie 3030303031303030303030313030373439323639
Java ne pas modifier ces données. Je serais étonné si openssl non plus. Sans doute vos attentes sont incorrectes.