Как сделать цифровую подпись сообщения с помощью M2Crypto, используя ключи в сертификате формата DER - PullRequest
1 голос
/ 08 марта 2010

Я работаю над проектом по внедрению цифровых подписей исходящих сообщений и решил использовать M2Crypto для этого.

У меня есть сертификат (в формате DER), из которого я извлекаю ключи для подписи сообщения. По какой-то причине я продолжаю получать некрасивую ошибку ошибки сегментации, когда вызываю метод sign_update.

Учитывая предыдущие примеры, которые я прочитал здесь, я явно что-то упускаю.

Вот пример, над которым я работаю:

from M2Crypto.X509 import *

cert = load_cert( 'certificate.cer', format=1 )
Pub_key = cert.get_pubkey()
Pub_key.reset_context(md='sha1')
Pub_key.sign_init()
Pub_key.sign_update( "This should be good." )

print Pub_key.sign_final()

Заранее спасибо за помощь,

Pablo

Ответы [ 2 ]

2 голосов
/ 09 марта 2010

Одна очевидная вещь бросается в глаза: вы говорите, что ваш сертификат в формате DER, но вы передаете format=0 в load_cert(), что означает PEM. См. Переменные модуля X509 . Возможно, не в том, что является причиной вашей проблемы (хотя я ожидаю, что вы получите исключение, если смешаете тип сертификата).

Обновление Подумав еще немного, я думаю, что вы пытаетесь сделать что-то не то здесь, вот почему это происходит сбой (хотя, конечно, он не должен падать, но вызывает исключение). Вы не можете подписать сообщение, используя открытый ключ из сертификата. Это было бы похоже на цифровую подделку.

Думайте об этом так. Вы получите мой сертификат, который содержит мой открытый ключ. Вы можете использовать открытый ключ, чтобы зашифровать мне сообщение. Только я смогу расшифровать, используя мой закрытый ключ. Вы можете подписать сообщение с помощью вашего личного ключа , а я могу использовать ваш открытый ключ для проверки вашей подписи.

0 голосов
/ 10 марта 2010

Файл с закрытым ключом отсутствует, поэтому он падает, и я не могу его подписать.

...