Comment signer numériquement un message avec M2Crypto en utilisant les touches dans un certificat de format DER
-
18-09-2019 - |
Question
Je travaille sur un projet pour mettre en œuvre des signatures numériques de messages sortants et j'ai décidé d'utiliser M2Crypto pour cela.
J'ai un certificat (au format DER) à partir duquel je extrait les clés pour signer le message. Pour une raison quelconque, je continue d'obtenir une erreur de défaut de segmentation laide lorsque j'appelle la méthode "Sign_update".
Compte tenu des exemples précédents que j'ai lus ici, il me manque clairement quelque chose.
Voici l'exemple sur lequel je travaille:
from M2Crypto.X509 import *
cert = load_cert( 'certificate.cer', format=1 )
Pub_key = cert.get_pubkey()
Pub_key.reset_context(md='sha1')
Pub_key.sign_init()
Pub_key.sign_update( "This should be good." )
print Pub_key.sign_final()
Merci d'avance pour l'aide,
Pablo
La solution
Une chose évidente me saute dessus: vous dites que votre certificat est au format der, mais vous passez format=0
à load_cert()
ce qui signifie pem. Voir Variables du module x509. Peut-être pas ce qui cause votre problème, cependant (je m'attendrais à ce que vous obteniez une exception si vous mélangez le type de certificat).
Mise à jour Après avoir réfléchi, je pense que vous essayez de faire la mauvaise chose ici, c'est pourquoi il s'écrase (même si cela ne devrait bien sûr pas s'écraser mais lever une exception). Vous ne pouvez pas signer un message en utilisant la clé publique à partir d'un certificat. Ce serait comme faire une contrefaçon numérique.
Pense-y de cette façon. Vous recevez mon certificat, qui contient ma clé publique. Vous pouvez utiliser la clé publique pour me crypter un message. Seulement, je pourrai décrypter en utilisant ma clé privée. Vous pouvez signer le message en utilisant Votre clé privée, et je peux utiliser Votre clé publique pour vérifier votre signature.
Autres conseils
Il n'y a pas de fichier de clé privé, c'est pourquoi il se bloque et je ne peux pas le signer.