J'essaie d'envoyer un email SMIME signé et j'échoue. J'utilise Python 3, j'ai donc choisi la librairie poor-smime-sign
. En utilisant Thunderbird pour recevoir, je reçois soit un email vide avec des "destinataires non divulgués" et pas de sujet, qui est signé ou je reçois tout en texte brut, en imprimant un énorme blob de base64 avec le corps du message - aucun signe de signer (jeu de mots non intentionnel, remarqué et laissé intact).Exemple utilisant poor-smime-sign
J'ai comparé la source d'un e-mail de travail (créé par Thunderbird à partir de mon dossier envoyé) avec mes mails franken, mais je ne vois pas vraiment la différence.
Voici le code:
from poor_smime_sign import smime_sign
def signEmail(self, message :str) -> str:
"""Sign the message-body.
The message is encoded in UTF-8, signed and then returned as Unicode.
Check this document on how to generate untrusted example-keys:
https://tools.ietf.org/doc/python-m2crypto/howto.smime.html
Check the settings ('invmail'->'keydir') where to put the keys.
The privateKey is called 'signer_key.pem' and publicKey 'signer.pem'.
"""
import os
privateKey = os.path.join(settings.SF.mail['keydir'], 'signer_key.pem')
publicKey = os.path.join(settings.SF.mail['keydir'], 'signer.pem')
try:
signed = smime_sign(publicKey, privateKey, message.encode('UTF-8'))
except Exception as e:
raise(Exception("Problem during signing: "+str(e)))
return signed.decode('UTF-8')
poor_smime_sign
BTW est assez humble au sujet de leur module, j'aime bien. J'ai regardé leur code et tout ce qu'ils font est d'appeler openssl
, ce qui est ce que j'aurais fait, aussi, la prochaine étape. Si vous faites un dépannage, vous pouvez entrer dans le mod et consigner la commande qui est exécutée et la manipuler dans un shell jusqu'à ce que vous compreniez pourquoi elle échoue. Je p.ex. eu pub et priv cert dans le mauvais sens et a eu un message d'erreur vraiment stupide.
C'est ce qui met le message ensemble à la fin. Je l'avais copié à partir d'un exemple quelque part.
body = self.signEmail(body)
emailAr = [
"From: %s" % emailFrom,
"To: %s" % emailTo,
"Subject: %s" % subject,
"", # <- that one
body,
]
message = "\r\n".join(emailAr)
#...
server.sendmail(emailFrom, [emailTo], message.encode('UTF-8'))