Implementação de Certificado digital em php usando e-cpf para médico

Enviada por Janielle 
Já coloquei um tópico sobre isso, mas talvez não tenha me expressado corretamente.
O que preciso mesmo é saber como implemento a certificação digital, como através do sistema gero a autenticação do prontuário eletrônico quando esse for impresso.
Como faço para obter a chave no php? Preciso de códigos, pq na net não encontrei nada.
Espero que possam me ajudar.
Janielle, eis aqui uma forma simplista e sem encriptação

<?php
$signature = null;
$toSign = "caminho/para/arquivo/a/ser/assinado"; // poderia vir de um formulário

// Ler a chave
$fp = file_get_contentes("key.pem"); // poderia vir de um formulário
$pkeyid = openssl_get_privatekey($priv_key);

// Calcula a assinatura - OPENSSL_ALGO_SHA1 é o padrão
openssl_sign($toSign, $signature, $pkeyid);
openssl_free_key($pkeyid);
// Assinanando
$hex = bin2hex( $signature );
$toSign .= "/" . $hex; // $toSign possui o conteudo do arquivo com a assinatura
echo $toSign;
Olá, agora depois de tanto tempo que estou em posse do leitor de cartão e-cpf, onde existe uma leitora e coloco o cartão. Esse código que me foi dado serve para isso? Como leio a chave nesse caso?
há algumas formas.

O mais fácil será criar um campo input file em um formulário. Quando ele for acionado aponte para o arquivo .pem do seu cartão.
E como encontro esse arquivo .pem. Procurei mais não encontrei.
Eu não sei como funciona esse cartão, por isso não tenho como te informar ao certo.
Ele não abre como se fosse uma unidade de disco somente leitura no computador? Se sim, tem que navegar até ele.
Assim tive que instalar a leitora e para abrir existe um administrador de token e esse quando o cartão está conectado na leitora ele mostra o certificado mais não consegui encontrar nenhum arquivo .pem.
Tava vendo e para cada cartão que colocar na leitora vou ter que colocar a senha e gerar o arquivo .cert?
Creio que é isso mesmo. Você tem que ter o .cert e enviar junto com a senha para validar ele.
Como eu validaria isso no php?
Marcos, gerei o arquivo.cert e agora ia tentar usar esse código que vc me passou, só que existem algumas variáveis que identifiquei que não estão sendo informadas em nenhum lugar como:

a $priv_key: $pkeyid = openssl_get_privatekey($priv_key);
a $tosign: openssl_sign($toSign, $signature, $pkeyid);


O qual a função delas no código?
Acabei passando com erros o código, está faltando a abertura da chave


deveria ser

<?php
$signature = null;
$toSign = "caminho/para/arquivo/a/ser/assinado"; // poderia vir de um formulário

// Ler a chave
$fp = file_get_contentes("/caminho/para/key.cert");
$pkeyid = openssl_get_privatekey($priv_key);

// ou se vier de um formulário
$fp = file_get_contents($_POST['FILES']['chave']); // a chave
$pass = $_POST['password']; //senha para validar a chave
$pkeyid = openssl_get_privatekey($priv_key,$pass); // abrindo a chave

// Calcula a assinatura - OPENSSL_ALGO_SHA1 é o padrão
// $signature é uma variável de callback
openssl_sign($toSign, $signature, $pkeyid);
openssl_free_key($pkeyid);
// Assinanando
$hex = bin2hex( $signature );
$toSign .= "/" . $hex; // $toSign possui o conteudo do arquivo com a assinatura
echo $toSign;
Nessa parte de ler a chave:

// Ler a chave
$fp = file_get_contentes("/caminho/para/key.cert");
$pkeyid = openssl_get_privatekey($priv_key);

$priv_key seria o que?

E tipo não tinha como pedir a senha a ele?
putz, passei errado de novo

segue o correto

$priv_key = file_get_contentes("/caminho/para/key.cert");
$pkeyid = openssl_get_privatekey($priv_key);


quando for assim dê uma olhada na documentação do PHP para a função

http://php.net/NOME_DA_FUNCAO
Rogério Luiz Sarmento
Re: Implementação de Certificado digital em php usando e-cpf para médico
05 de October de 2011 às 09:53PM
Oi pessoal,

Vcs conseguiram ler o certificado digital do SERASA, eu vi que vcs montaram o código e colocaram o caminho
na seguinte linha.

file_get_contentes("/caminho/para/key.cert");

Eu estou usando um certificado tipo Token ou Cartão (Certificado A3) e não aparece unidade para eu colocar caminho, como eu posso ler o certificado sem o caminho.

Agradeço a atenção

Rogério
Marcel Aimar
Re: Implementação de Certificado digital em php usando e-cpf para médico
13 de September de 2013 às 07:51PM
Janielle, estou precisando fazer o mesmo, você conseguiu?
Marcel Aimar ou Janielle, conseguiram?
A chave privada do e-cpf A3 fica dentro do token.

Acho que é preciso um applet Java para ler o token e interfacear com o PHP.

Alguém mexeu com isto?
Bazili Swioklo
Re: Implementação de Certificado digital em php usando e-cpf para médico
03 de November de 2015 às 12:36AM
Lançamos a pouco tempo a solução RestPKI. Serviço na web para assinaturas digitais via web services RestFULL. Há exemplos documentados de funcionamento em PHP e as primeiras 50 transações de cada mês são gratuitas.

Uma extensão para o Chrome (inclusive para linux) e uma para o IE já estão incluidas na solução para interfacear com o token.

vejam os exemplos no GitHub: https://github.com/LacunaSoftware/RestPkiSamples/tree/master/PHP
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.