着信 smime メッセージが有効であること (つまり、会社の秘密鍵で暗号化され、特定の公開鍵セットに署名されていること) を検証する一連の bash スクリプトを統合し、場合によっては書き直す必要があります。
この一連の bash は、おそらく M2Crypto の助けを借りて Python で作成された小さなアプリケーションに置き換えられます。
これまでのところ、復号化の部分はうまくいっていますが、署名の検証に問題があります。
この単一のbash行を置き換えるpythonコードを書く必要があります
openssl smime -verify -in to_verify.txt -CAfile signer_pubkey.pem -out verified.txt
to_verify.txt の内容は、「通常の」マルチパート/署名付き p7 であり、署名が添付されているかどうかに関係なく使用できます。
前のコマンドは、検証が成功すると 0 で終了し、smime エンベロープからコンテンツを抽出します。
ここで、m2crypto の例から取った Python に戻ります。
import os
from M2Crypto import BIO, Rand, SMIME, X509
cert_dir = '/home/niphlod/certs'
doc_dir = '/home/niphlod/datastore'
signer = os.path.join(cert_dir, 'signer_pubkey.pem')
letter = os.path.join(doc_dir,'out_decrypt.txt')
# Instantiate an SMIME object.
s = SMIME.SMIME()
# Load the signer's cert.
x509 = X509.load_cert(signer)
sk = X509.X509_Stack()
sk.push(x509)
s.set_x509_stack(sk)
# Load the signer's CA cert. They're all self-signed, hence the following
st = X509.X509_Store()
st.load_info(signer)
s.set_x509_store(st)
# Load the data, verify it.
p7, data = SMIME.smime_load_pkcs7(letter)
v = s.verify(p7)
print v
print data
print data.read()
うーん....驚き、わかりました
Traceback (most recent call last):
File "m2crypto_verify.py", line 28, in <module>
v = s.verify(p7)
File "/usr/lib/pymodules/python2.6/M2Crypto/SMIME.py", line 215, in verify
blob = m2.pkcs7_verify0(p7, self.x509_stack._ptr(), self.x509_store._ptr(), flags)
M2Crypto.SMIME.PKCS7_Error: no content
Openssl はこのファイルを正しく読み取り、抽出し、検証していますが、m2crypto はコンテンツがないことをどのように報告できますか?
バンプ: 誰もこれに興味がありませんか?