私はSMIMEの署名付き電子メールを送信しようとしていますが失敗しています。貧弱な記号を使用した例
私はPython 3を使用しているので、poor-smime-sign
ライブラリを選択しました。 Thunderbirdを使用して受信者が「非公開の受信者」となっていて、署名されていない件名がないか、全文がプレーンテキストで表示され、メッセージボディでbase64の巨大な塊署名する(意図しない、気付き、そのまま残す)。
作業用メールの送信元(送信フォルダのThunderbirdで作成)と私のフランケンメールを比較しましたが、違いはあまりありません。
ここではコードです:
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
はところで私はかなり好きな彼らのモジュール、程度はかなり謙虚です。私は自分のコードを見て、彼らがしているのはopenssl
です。これは次のステップとして私がやったことです。トラブルシューティングをしている場合は、modに入り、実行されるコマンドをログに記録し、失敗した理由を理解するまでシェルでそれを実行することができます。 I pubとpriv certに間違ったやり方があり、本当に馬鹿馬鹿しいエラーメッセージが出ました。
これは、最後にメッセージをまとめたものです。私はどこかの例からそれをコピーしました。
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'))