Ответ 1
Я предполагаю, что вы путаете между подписью и цепочкой сертификатов подписывающего лица. PKCS7_get0_signers вернуть список подписчиков.
Чтобы создать сообщение PKCS7 с двумя подписчиками, вы можете использовать следующие шаги:
-
Строить ключ и сертификат для первого подписавшего:
openssl genrsa -out key1.pem openssl req -new -key key1.pem -subj "/CN=key1" | openssl x509 -req -signkey key1.pem -out cert1.pem
-
Создайте ключ и сертификат для второго подписчика:
openssl genrsa -out key2.pem openssl req -new -key key2.pem -subj "/CN=key2" | openssl x509 -req -signkey key2.pem -out cert2.pem
-
Создайте сообщение PKCS7 с использованием обоих подписчиков:
echo "Hello" | openssl smime -sign -nodetach \ -out signature.der -outform DER \ -inkey key1.pem -signer cert1.pem -inkey key2.pem -signer cert2.pem
Тогда подписчики могут быть напечатаны с вашим python script:
from M2Crypto import *
bio=BIO.File(open('signature.der'))
smime_object = SMIME.PKCS7(m2.pkcs7_read_bio_der(bio._ptr()))
signers = smime_object.get0_signers(X509.X509_Stack())
for cert in signers:
print(cert.get_issuer().as_text())
Он дает эмитенту подписчиков:
CN = ключ1
CN = ключ2