Como assinar digitalmente uma mensagem com M2Crypto usando as chaves dentro de um formato DER certificado
-
18-09-2019 - |
Pergunta
Eu estou trabalhando em um projeto de implementação de assinaturas digitais das mensagens de saída e decidiu usar M2Crypto para isso.
Eu tenho um certificado (no formato DER) a partir do qual eu extrair as chaves para assinar a mensagem.Por algum motivo que eu continuo recebendo um feio erro de falha de segmentação quando eu chamar o "sign_update" método.
Dado os exemplos anteriores eu li aqui, estou claramente faltando alguma coisa.
Aqui está o exemplo que eu estou trabalhando:
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()
Obrigado antecipadamente pela ajuda,
Pablo
Solução
Uma coisa óbvia salta-me:você diz o seu certificado em formato DER, mas você está passando format=0
para load_cert()
o que significa PEM.Ver X509 variáveis de módulo.Talvez não o que está causando o problema, embora (eu espero que você deseja obter uma exceção se você misturar o cert tipo).
Atualização Depois de mais alguns pensei, eu acho que você está tentando fazer a coisa errada aqui, é por isso que ele está falhando (embora, é claro, não deve falhar, mas levantar uma exceção).Você não pode assinar uma mensagem utilizando a chave pública de um certificado.Isso seria como fazer digitais falsificação.
Pense nisso desta maneira.Você receber meu certificado que contém a minha chave pública.Você pode usar a chave pública para criptografar uma mensagem para mim.Só eu serei capaz de desencriptar usando a minha chave privada.Você pode assinar a mensagem usando a sua chave privada, e eu posso usar sua chave pública para verificar a sua assinatura.
Outras dicas
Não existe um arquivo de chave privado, é por isso que trava e eu não posso assiná -lo.