[python-brasil] Ajuda com assinatura digital de arquivos

1,216 views
Skip to first unread message

Danilo Lucena

unread,
Sep 1, 2008, 8:26:41 AM9/1/08
to python...@yahoogrupos.com.br
Pessoal,

Primeiro peço perdão se a solução deste problema já tiver sido discutido
aqui na lista mas não achei nada que me ajudasse.

Estou precisando saber como seria possível assinar arquivos digitalmente
usando o Python. Eu crio certificados de teste no formato X.509 e preciso
assinar qualquer tipo de arquivo usando esse certificado (tanto o tipo A1
quanto o A3).

A intenção é fazer o seguinte processo:
- pegar um arquivo com extensão qualquer
- assinar o arquivo com um determinado certificado
- gerar um arquivo p7s (que é o arquivo final já assinado)

eu consegui fazer essas coisas em meio termo, mas usando .net e o sdk
CAPICOM da microsoft. Gostaria mesmo de usar python pois assim tenho mais
segurança para aplicações mais pesadas, sem contar que isso é pra um projeto
open-source.

Agradeço se alguém puder me dar uma luz. Qualquer material de referência e
dicas irão me ajudar.

Um abraço a todos.


[As partes desta mensagem que não continham texto foram removidas]


------------------------------------

,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia: |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar |
| E se você é usuário do BOL lembre-se de cadastrar o |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html


Jociel Andrade

unread,
Sep 1, 2008, 1:59:12 PM9/1/08
to python...@yahoogrupos.com.br
2008/9/1 Danilo Lucena <ryg...@gmail.com>:

> Estou precisando saber como seria possível assinar arquivos digitalmente
> usando o Python. Eu crio certificados de teste no formato X.509 e preciso
> assinar qualquer tipo de arquivo usando esse certificado (tanto o tipo A1
> quanto o A3).
>
> A intenção é fazer o seguinte processo:
> - pegar um arquivo com extensão qualquer
> - assinar o arquivo com um determinado certificado
> - gerar um arquivo p7s (que é o arquivo final já assinado)
>
> eu consegui fazer essas coisas em meio termo, mas usando .net e o sdk
> CAPICOM da microsoft. Gostaria mesmo de usar python pois assim tenho mais
> segurança para aplicações mais pesadas, sem contar que isso é pra um projeto
> open-source.

Existe a biblioteca Chilkat que é comercial [1] e existe uma maneira
de se fazer utilizando uma biblioteca de java (iText) com Jython.

[1] http://www.example-code.com/python/cert_usePrivateKeyFromPEM.asp
[2] http://kelpi.com/script/00cd7c

Talvez outras pessoas daqui saibam outra maneira.

Jociel Andrade

unread,
Sep 1, 2008, 2:11:25 PM9/1/08
to python...@yahoogrupos.com.br
2008/9/1 Jociel Andrade <jca...@gmail.com>:

> 2008/9/1 Danilo Lucena <ryg...@gmail.com>:
>> Estou precisando saber como seria possível assinar arquivos digitalmente
>> usando o Python. Eu crio certificados de teste no formato X.509 e preciso
>> assinar qualquer tipo de arquivo usando esse certificado (tanto o tipo A1
>> quanto o A3).
>>
>> A intenção é fazer o seguinte processo:
>> - pegar um arquivo com extensão qualquer
>> - assinar o arquivo com um determinado certificado
>> - gerar um arquivo p7s (que é o arquivo final já assinado)
>>
>> eu consegui fazer essas coisas em meio termo, mas usando .net e o sdk
>> CAPICOM da microsoft. Gostaria mesmo de usar python pois assim tenho mais
>> segurança para aplicações mais pesadas, sem contar que isso é pra um projeto
>> open-source.
>
> Existe a biblioteca Chilkat que é comercial [1] e existe uma maneira
> de se fazer utilizando uma biblioteca de java (iText) com Jython.
>
> [1] http://www.example-code.com/python/cert_usePrivateKeyFromPEM.asp
> [2] http://kelpi.com/script/00cd7c
>
> Talvez outras pessoas daqui saibam outra maneira.

Acredito que M2CRYPTO [1] seja exatamente o que vc precisa. Veja [2].
[1] http://freshmeat.net/projects/m2crypto/
[2] http://sandbox.rulemaker.net/ngps/m2/howto.smime.html

Danilo Lucena

unread,
Sep 1, 2008, 2:07:26 PM9/1/08
to python...@yahoogrupos.com.br
Jociel Andrade,

Exato, eu conheço as duas ferramentas. O problema do Chilkat é que é pago e
já elimina a possibildiade de uso. A questão do iText pelo que eu olhei ele
assina arquivos pdf (o que seria exatamente meu problema) porém usando a
assinatura do reader, o que não é o que eu preciso.

Tem de ser uma assinatura para arquivos binários de forma genérica, sem ser
nada específico para um tipo de arquivo.

Mas já agradeço a ajuda e se alguém mais tiver indicações eu agradeço.

2008/9/1 Jociel Andrade <jca...@gmail.com>

> 2008/9/1 Danilo Lucena <ryg...@gmail.com <rygaweb%40gmail.com>>:


>
> > Estou precisando saber como seria possível assinar arquivos digitalmente
> > usando o Python. Eu crio certificados de teste no formato X.509 e preciso
> > assinar qualquer tipo de arquivo usando esse certificado (tanto o tipo A1
> > quanto o A3).
> >
> > A intenção é fazer o seguinte processo:
> > - pegar um arquivo com extensão qualquer
> > - assinar o arquivo com um determinado certificado
> > - gerar um arquivo p7s (que é o arquivo final já assinado)
> >
> > eu consegui fazer essas coisas em meio termo, mas usando .net e o sdk
> > CAPICOM da microsoft. Gostaria mesmo de usar python pois assim tenho mais
> > segurança para aplicações mais pesadas, sem contar que isso é pra um
> projeto
> > open-source.
>
> Existe a biblioteca Chilkat que é comercial [1] e existe uma maneira
> de se fazer utilizando uma biblioteca de java (iText) com Jython.
>
> [1] http://www.example-code.com/python/cert_usePrivateKeyFromPEM.asp
> [2] http://kelpi.com/script/00cd7c
>
> Talvez outras pessoas daqui saibam outra maneira.
>
>

[As partes desta mensagem que não continham texto foram removidas]

Ronaldo Tomazeli Duarte

unread,
Sep 2, 2008, 7:47:08 AM9/2/08
to python...@yahoogrupos.com.br
Danilo,

Tente o M2Crypto. Ele é um binding Python para o OpenSSL, que realiza
assinatura digital usando o certificado (quando você diz que quer
assinar algo com um certificado eu estou assumindo que é com a chave
privada associada à chave pública do certificado).
Existe um ótimo livro sobre OpenSSL, que aborda o M2Crypto, denominado
"Network Security with OpenSSL".
Eu nunca usei o M2Crypto, uso o OpenSSL com C, mas pelo que li neste
livro a interface para Python é praticamente a mesma.

Ronaldo

Victor Godoy Poluceno

unread,
Sep 4, 2008, 3:16:41 PM9/4/08
to python...@yahoogrupos.com.br
Em 01/09/08, Danilo Lucena<ryg...@gmail.com> escreveu:

> Pessoal,
>
> Primeiro peço perdão se a solução deste problema já tiver sido discutido
> aqui na lista mas não achei nada que me ajudasse.
>
> Estou precisando saber como seria possível assinar arquivos digitalmente
> usando o Python. Eu crio certificados de teste no formato X.509 e preciso
> assinar qualquer tipo de arquivo usando esse certificado (tanto o tipo A1
> quanto o A3).
>

Esse post [1] fala sobre assintatura, não necesariamente de um arquivo,
mas de um dado.


> A intenção é fazer o seguinte processo:
> - pegar um arquivo com extensão qualquer
> - assinar o arquivo com um determinado certificado
> - gerar um arquivo p7s (que é o arquivo final já assinado)
>

pyopenssl nele [2]!


> eu consegui fazer essas coisas em meio termo, mas usando .net e o sdk
> CAPICOM da microsoft. Gostaria mesmo de usar python pois assim tenho mais
> segurança para aplicações mais pesadas, sem contar que isso é pra um projeto
> open-source.
>

CAPICOM. Urghhh... utilize pyopenssl!

> Agradeço se alguém puder me dar uma luz. Qualquer material de referência e
> dicas irão me ajudar.
>
> Um abraço a todos.

[1] - http://victorpoluceno.blogspot.com/2008/03/python-ssl-certificado-digital.html
[2] - http://pyopenssl.sourceforge.net/


Atenciosamente,
Victor Godoy Poluceno

Danilo Lucena

unread,
Sep 4, 2008, 3:31:24 PM9/4/08
to python...@yahoogrupos.com.br
Amigos,
Estou estudando os materiais dos links passados. Muito material na internet
diz respeito a assinaturas levando em consideração um ambiente web. No meu
caso o projeto é desktop mesmo e vai ficar rodando em background sendo
chamado por linha de comando.

Mas acredito que a solução esteja nos links passados. Caso tenha sucesso
repassarei para a lista tutoriais mostrando a implementação.

Muito obrigado a todos.

2008/9/4 Victor Godoy Poluceno <victorp...@gmail.com>

> Em 01/09/08, Danilo Lucena<ryg...@gmail.com <rygaweb%40gmail.com>>

[As partes desta mensagem que não continham texto foram removidas]

Reply all
Reply to author
Forward
0 new messages