Мне нужно объединить и, возможно, переписать несколько сценариев bash, которые проверяют действительность входящих сообщений smime (т. Е. Зашифрованы с помощью личного ключа компании и подписаны определенным набором открытых ключей)
Эта группа bash будет заменена небольшим приложением, написанным, возможно, на Python с помощью M2Crypto.
До сих пор часть расшифровки действительно работала хорошо, но у меня проблема с проверкой подписи.
Мне нужно написать код на Python, который заменит эту строку bash
openssl smime -verify -in to_verify.txt -CAfile signer_pubkey.pem -out verified.txt
Содержимое файла to_verify.txt представляет собой «обычный» составной / подписанный p7, к которому может быть прикреплена подпись или нет.
Предыдущая команда завершается с 0, когда проверка прошла успешно, и извлекает содержимое из конверта smime.
Теперь вернемся к Python, взяты из примеров m2crypto:
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 может сообщить об отсутствии контента?
БАМП: никто не заинтересован в этом?