2010-03-05 3 views
29

Je signe des paquets dans du code Java et je veux vérifier les signatures sur un serveur C. Je veux forker openssl dans ce but (je peux toujours utiliser les fonctions de la librairie plus tard ... quand je sais que openssl peut vérifier les signatures); Cependant, il est à défaut de le faire:vérification d'une signature de fichier avec openssl dgst

openssl dgst -verify cert.pem -signature file.sha1 file.data 
  • tout ce qu'il dit est "incapable de charger le fichier clé"

Le certificat dit:

openssl verify cert.pem 

cert.pem: /C=.... 
error 20 at 0 depth lookup:unable to get local issuer certificate 

Cependant , Je ne me soucie pas spécifiquement de la vérification du certificat, je veux seulement vérifier la signature pour un fichier!

La sortie de openssl x509 -in cert.pem -noout -text est:

Certificate: 
    Data: 
     Version: 1 (0x0) 
     Serial Number: 
      ... 
     Signature Algorithm: sha1WithRSAEncryption 
     Issuer: C=... 
     Validity 
      Not Before: Feb 1 15:22:44 2010 GMT 
      Not After : Jun 19 15:22:44 2037 GMT 
     Subject: C=... 
     Subject Public Key Info: 
      Public Key Algorithm: rsaEncryption 
      RSA Public Key: (2048 bit) 
       Modulus (2048 bit): 
        00:cc:cc:f9:c7:3a:00:0f:07:90:55:d9:fb:a9:fe: 
        ... 
        32:cc:ee:7f:f2:01:c7:35:d2:b5:9b:35:dd:69:76: 
        00:a9 
       Exponent: 65537 (0x10001) 
    Signature Algorithm: sha1WithRSAEncryption 
     39:d6:2c:6b:6a:00:74:b5:81:c2:b8:60:d6:6b:54:11:41:8d: 
     ... 
     8f:3e:3f:5d:b3:f8:dd:5e 
+0

Je pense qu'il ya un certain problème avec cert.pem. Que fait la sortie "openssl x509 -in cert.pem -noout -text"? –

+0

@Anders Lindahl J'ai ajouté cela à la question – Will

Répondre

46

openssl dgst -verify foo.pem attend à ce que foo.pem contient la clé publique "brute" au format PEM. Le format brut est un codage d'une structure SubjectPublicKeyInfo, qui peut être trouvée dans un certificat; mais openssl dgst ne peut pas traiter un certificat complet en une fois.

Vous devez d'abord extraire la clé publique du certificat:

openssl x509 -pubkey -noout -in cert.pem > pubkey.pem 

puis utilisez la clé pour vérifier la signature:

openssl dgst -verify pubkey.pem -signature sigfile datafile 
Questions connexes