Assinatura digital

Enviada por Guilherme Soares 
Guilherme Soares
Assinatura digital
12 de December de 2011 às 08:22AM
Pessoal, bom dia.

Estou desenvolvendo um sistema onde o usuário, vai poder assinar documentos pdf com um token a3, já fiz a parte de login, com os dados do token, mas agora não estou conseguindo assinar, a função openssl_pkcs7_sign pede como parâmetro a chave privada, e como eu pego a chave privada desse token pra fazer a assinatura?

Desde já agradeço
Marcos Regis
Re: Assinatura digital
12 de December de 2011 às 04:40PM
Tem que usar um input file em um formulário para que o cliente aponte para o arquivo .pem/.ppk dele.
Marcos Regis
Re: Assinatura digital
12 de December de 2011 às 04:41PM
Lembrando que o usuário deve ter o leitor A3.

Há uma outra forma que é instalar o certificado no navegador, porém não é recomendado para uso em computadores compartilhados.
Guilherme Soares
Re: Assinatura digital
12 de December de 2011 às 05:25PM
Se puderem me ajudar, essa parte não conheço muito e estou precisando muito resolver isso, onde fica o pem/.ppk do usuário, todos eles terão leitora de token a3, já está nas especificações do sistema.

Podem me adicionar meu skype é coolwather2, fico on praticamente o dia todo.

Obrigado
Marcos Regis
Re: Assinatura digital
13 de December de 2011 às 12:26PM
quando você coloca o leitor no micro, ele deve abrir uma nova unidade somente leitura. Navegue até ele e veja o que tem dentro.
Guilherme Soares
Re: Assinatura digital
14 de December de 2011 às 05:22AM
Instalando o certificado no navegador como fica?
Estou tentando aqui, mas não achei essa unidade que você tinha me dito.

Obrigado
Marcos Regis
Re: Assinatura digital
14 de December de 2011 às 12:06PM
Tem que ter alguma forma de você ler o certificado.
Normalmente é via aplicação java que vem junto com o leitor.
Ele pode ser um arquivo .cert, .pem ou .ppk (mais comum ser o .cert)

Para saber como usar leia a documentação de seu leitor de certificado.
Guilherme Soares
Re: Assinatura digital
14 de December de 2011 às 05:23PM
$_SERVER['SSL_CLIENT_CERT']

Essa função me retorna uma string com o certificado do cliente, é esse o certificado do cliente?

Com ele eu consigo proceder a assinatura?

Obrigado
Marcos Regis
Re: Assinatura digital
15 de December de 2011 às 10:41AM
sim, desde que ele tenha sido instalado no navegador.
Para maiores informações consulte a documentação do certificado.
Marcos Regis
Re: Assinatura digital
16 de December de 2011 às 12:41PM
Olá Guilherme.
Estou respondendo seu e-mail aqui para que fique de informação para quem precisar fazer a mesma coisa.

Não consegui dar código ou mesmo dicas de como fazer a assinatura pelo fato de que você ainda está na parte que não cabe a um programador WEB resolver.
O primeiro ponto que você deve conseguir resolver é conseguir ler o certificado digital.
O Cartão A3 é um certificado digital em hardware diferentemente do A1 que é em arquivo. Não há como interagir com ele sem o leitor e consequentemente sem o software do leitor. Eu tenho um cartão A3 agora por exigência legal porém não tenho o leitor (quem usa é meu contador e ele sim precisa do leitor).

O ideal é usar o leitor para pegar o certificado diretamente do token.
Isso não será feito pelo PHP. Será feito pelo S.O. mediante uso do software do leitor do certificado.
Para que consiga assinar digitalmente um documento no servidor, a chave privada deve ser lida utilizando de um campo do tipo file e isso só será possível se o software do cartão permitir tal.
Geralmente isso não é possível de se fazer e é necessário utilizar uma aplicação Java (applet) capaz de ler o certificado na região de "certificados instalados do usuário logado", assinar o documento localmente e depois fazer o upload dele.

Eu ainda não precisei fazer nada remoto para ler A3 e por isso não sou o mais indicado para lhe ajudar.

Se a pergunta for CONSIGO LER UM CERTIFICADO DIGITAL DO TIPO A3 COM PHP DO LADO DO SERVIDOR?
A minha resposta será NÃO. Só com PHP não é possível ler o certificado A3, precisando de uma aplicação do lado do cliente que pode tanto ser um Applet ou mesmo um programa em PHP-GTK (não recomendo).

Quanto ao certificado ser instalado no navegador, pode ser verificado indo em Ferramentas->Opções->Avançado[Certificados] no Firefox.
Guilherme Soares
Re: Assinatura digital
17 de December de 2011 às 02:32PM
Peguei o certificado .cer e estou com ele no servidor, tendo esse certificado no servidor eu consigo assinar com o php?

Obrigado
Marcos Regis
Re: Assinatura digital
18 de December de 2011 às 09:36AM
sim, neste momento entram todos aqueles scripts que você viu, que lê o certificado e o utiliza para assinar digitalmente um documento.

Dê uma boa olhada na documentação do PHP sobre as funções de OPENSSL como a openssl_pkey_get_private e openssl_pkcs12_read. Esta última deve ser a que vai ser usada para ler o certificado no formato .pfx e exportar para o formato .pem que a primeira lê e vai ser usada para assinar.
Como lhe falei, nem tenho como testar isso aquio pois não tenho o leitor do cartão.

Geralmente se faz uso do próprio openssl em linha de comando para extrair, converter e assinar utilizando certificados digitais.
O problema do A3 é fazer "ALGO" ler o certificado no Cartão, entrar com o PIN e recuperar as informações relevantes.
Ainda não sei como fazer isso.

Como conseguiu o .cer ?
Guilherme Soares
Re: Assinatura digital
18 de December de 2011 às 11:25AM
Instalei ele no navegador e depois mandei exportar esse certificado do navegador para um arquivo.
Guilherme Soares
Re: Assinatura digital
18 de December de 2011 às 11:26AM
Vou olhar as funções, caso eu consiga caminhar coloco aqui o passo a passo do que foi feito.
Fernando
Re: Assinatura digital
05 de March de 2012 às 02:43PM
Ola Guilherme, voce ja conseguiu evoluir com o certificado A3 ?
Bruno Pereira
Re: Assinatura digital
26 de June de 2012 às 07:04AM
Guilherme, também gostaria de saber se você conseguiu, preciso muito fazer isso também. Compartilhe sua experiencia se possível por favor. Obrigado.
Marcel Aimar
Re: Assinatura digital
13 de September de 2013 às 03:17PM
Também estou precisando resolver esse problema, conseguiu fazer?
Lourival dos Santos Pires Junior
Re: Assinatura digital
12 de May de 2015 às 05:57PM
Pessoal alguém conseguiu evoluir no lançe da assinatura digital com PHP ?

Estou precisando assinar pdfs gerados pelo sistema, sendo que meu desejo é assinar no lado servidor jogando o .pfx ou .cer no servidor apache.php.

Att
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.