Assinatura Digital (meu pesadelo) PAF-ECF
Boa tarde;
Não estou conseguindo validar a assinatura do Teste 12.
Estou usando esses comandos:
Criei o Arquivo CHAVE.PEM uma única vez com o comando:
openssl genrsa -out CHAVE.PEM 1024
Que me retornou:
Depois criei o arquivo pra ficar dentro do XML essa também uma única vez:
openssl rsa -in chave.pem -modulus -out PUBLICA.PEM
Que me retornou:
Então gero o arquivo com as DAV´s do período de nome DAV_ELET.TXT
No final gero a chave de validação com o seguinte comando;
OPENSSL dgst -md5 -sign CHAVE.PEM -out EAD.TXT -hex DAV_ELET.TXT
Este comando retorno para o arquivo EAD.TXT a chave de validação;
Elimino RSA-MD5(VAL_ELET.TXT)= e adiciono o restante no final do arquivo logo a frente de EAD.
Vou até o arquivo Set System Informatica.xml altero o Modulo
Quando vou validar da [b]Assinatura Inválida[/b].
Então é isso ai:
Se tiver faltando alguma coisa é só entrar em contato.
Não estou conseguindo validar a assinatura do Teste 12.
Estou usando esses comandos:
Criei o Arquivo CHAVE.PEM uma única vez com o comando:
openssl genrsa -out CHAVE.PEM 1024
Que me retornou:
-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDPMzEzj05OQ86HPq4eHFAArbF+KoCREkExn2GNv21sQbrJgh4N 19TTyP0dUh6F3e7u6Um1KbojXq9sVoo8m4m2Q3qEdEpv6F7mPGHk7epY36B7hK5w sz/BvKM0+4W8jSsK5wXbWZRZTSliOJSXvCignkB6wWh3ARwdZFliyx2EnQIDAQAB AoGAWTkFHdu+74rZW3nNRqAQf0pMXTT2KgI/Wpv0STK+btibE3zZbkKbnhs1i7O5 +xFHe0+v8rgmNGboiXF2k4SytqgO5yod8Nz1TDRCj5B1soifrP50dnhlELbdMvwb xWMvXf6VAfVKrJKPzdAyyCRd5CU3LYXFMQfpxWdbwTybG0ECQQDzWIpQZTVNX3l7 1WHi0GF3N296PZNyS8CijuwHjeinOHEubIAACzrQtKbDinPfnDx7EmaiTAx5EZVk 8wP0V8UtAkEA2fl4z6P/aEdlC6uL16D0tfVo+9T+VoBog844TfBk1IPSFM7x5xiQ a0WH9aonbNg45M2XCdUZhiyb7RDAIk5DMQJBALAZ/AZQJ7G1jRG7itn8GPyQRoE8 /G4zOdWp/k89OAeDhgylgkAF4GtWwHQzxsUkqHQcDeAXjtMykV17q/nwZoUCQQCx 3Px0yohtqdxNAoUQxZkJJSCuZaXIJe2ip9KP3noYYxw4uIjxnryxm8IOdvLGwUTj htMZRdcXAi2V6xYsqBnxAkB49wUy4pQfBWRtCNRlRs6ojI7nLnwG/b0Qj7SJMRd9 ZmBgzYIwJTaLD4z/Xx9BAuNbJDqeavSFxnlPcmuyCMrA -----END RSA PRIVATE KEY-----
Depois criei o arquivo pra ficar dentro do XML essa também uma única vez:
openssl rsa -in chave.pem -modulus -out PUBLICA.PEM
Que me retornou:
Modulus=CF3331338F4E4E43CE873EAE1E1C5000ADB17E2A80911241319F618DBF6D6C41BAC9821E0DD7D4D3C8FD1D521E85DDEEEEE949B529BA235EAF6C568A3C9B89B6437A84744A6FE85EE63C61E4EDEA58DFA07B84AE70B33FC1BCA334FB85BC8D2B0AE705DB5994594D2962389497BC28A09E407AC16877011C1D645962CB1D849D -----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDPMzEzj05OQ86HPq4eHFAArbF+KoCREkExn2GNv21sQbrJgh4N 19TTyP0dUh6F3e7u6Um1KbojXq9sVoo8m4m2Q3qEdEpv6F7mPGHk7epY36B7hK5w sz/BvKM0+4W8jSsK5wXbWZRZTSliOJSXvCignkB6wWh3ARwdZFliyx2EnQIDAQAB AoGAWTkFHdu+74rZW3nNRqAQf0pMXTT2KgI/Wpv0STK+btibE3zZbkKbnhs1i7O5 +xFHe0+v8rgmNGboiXF2k4SytqgO5yod8Nz1TDRCj5B1soifrP50dnhlELbdMvwb xWMvXf6VAfVKrJKPzdAyyCRd5CU3LYXFMQfpxWdbwTybG0ECQQDzWIpQZTVNX3l7 1WHi0GF3N296PZNyS8CijuwHjeinOHEubIAACzrQtKbDinPfnDx7EmaiTAx5EZVk 8wP0V8UtAkEA2fl4z6P/aEdlC6uL16D0tfVo+9T+VoBog844TfBk1IPSFM7x5xiQ a0WH9aonbNg45M2XCdUZhiyb7RDAIk5DMQJBALAZ/AZQJ7G1jRG7itn8GPyQRoE8 /G4zOdWp/k89OAeDhgylgkAF4GtWwHQzxsUkqHQcDeAXjtMykV17q/nwZoUCQQCx 3Px0yohtqdxNAoUQxZkJJSCuZaXIJe2ip9KP3noYYxw4uIjxnryxm8IOdvLGwUTj htMZRdcXAi2V6xYsqBnxAkB49wUy4pQfBWRtCNRlRs6ojI7nLnwG/b0Qj7SJMRd9 ZmBgzYIwJTaLD4z/Xx9BAuNbJDqeavSFxnlPcmuyCMrA -----END RSA PRIVATE KEY-----
Então gero o arquivo com as DAV´s do período de nome DAV_ELET.TXT
D1108640810001210011994280034 DECIO PLABIO ARAUJO ORNELAS D2108640810001214708050815165 ECF-IF BEMATECH MP20FI 001440000000000000120100721Orcamento 00023000000000 D2108640810001214708050815165 ECF-IF BEMATECH MP20FI 001439000000000000220100721Orcamento 00000100000000 D2108640810001214708050815165 ECF-IF BEMATECH MP20FI 001439000000000000320100721Orcamento 00015000000000 D2108640810001214708050815165 ECF-IF BEMATECH MP20FI 001439000000000000420100721Orcamento 00003000000000 D2108640810001214708050815165 ECF-IF BEMATECH MP20FI 001439000000000000520100721Orcamento 00020000000000 D2108640810001214708050815165 ECF-IF BEMATECH MP20FI 001440000000000000620100721Orcamento 00020000000000 D2108640810001214708050815165 ECF-IF BEMATECH MP20FI 001440000000000000720100721Orcamento 00015000000000 D2108640810001214708050815165 ECF-IF BEMATECH MP20FI 001440000000000000820100721Orcamento 00020000000000 D2108640810001214708050815165 ECF-IF BEMATECH MP20FI 001440000000000000920100721Orcamento 00003000000000 D2108640810001214708050815165 ECF-IF BEMATECH MP20FI 001441000000000001020100721Orcamento 00020000000000 D2108640810001214708050815165 ECF-IF BEMATECH MP20FI 001442000000000001120100721Orcamento 00003000000000 D210864081000121 000000000001220100721Orcamento 00015000000000 D210864081000121 000000000001320100721Orcamento 00000100000000 D210864081000121 000000000001420100721Orcamento 00000100000000 D210864081000121 000000000001520100721Orcamento 00000100000000 D2108640810001214708050815165 ECF-IF BEMATECH MP20FI 001443000000000001620100721Orcamento 00038200000000 D210864081000121 000000000001720100721Orcamento 00020000000000 D9108640810001210011994280034 000017
No final gero a chave de validação com o seguinte comando;
OPENSSL dgst -md5 -sign CHAVE.PEM -out EAD.TXT -hex DAV_ELET.TXT
Este comando retorno para o arquivo EAD.TXT a chave de validação;
RSA-MD5(VAL_ELET.TXT)= 6c5cb5bceab541f70995a9183ab42f4f52e0c56cbbf5a6ca6b71abf7a549a9598a6cc5273bd59b63378f9f49afb1d7252aaaceb672dbe1e13cfb2de5fea72f5374e918a08868316356bd2bdbb8594c1cb1d583481af745a479e07e729b17cdc460efe2b00f13bcfbef9c58867341905897f5d94acad0be1caf11f06e9f54e087
Elimino RSA-MD5(VAL_ELET.TXT)= e adiciono o restante no final do arquivo logo a frente de EAD.
Vou até o arquivo Set System Informatica.xml altero o Modulo
<?xml version="1.0"?> <empresa_desenvolvedora> <nome>Set System Informatica</nome> <chave> <modulo>CF3331338F4E4E43CE873EAE1E1C5000ADB17E2A80911241319F618DBF6D6C41BAC9821E0DD7D4D3C8FD1D521E85DDEEEEE949B529BA235EAF6C568A3C9B89B6437A84744A6FE85EE63C61E4EDEA58DFA07B84AE70B33FC1BCA334FB85BC8D2B0AE705DB5994594D2962389497BC28A09E407AC16877011C1D645962CB1D849D </modulo> <expoente_publico>10001</expoente_publico> </chave> </empresa_desenvolvedora>
Quando vou validar da [b]Assinatura Inválida[/b].
Então é isso ai:
Se tiver faltando alguma coisa é só entrar em contato.
José Carlos
Curtidas 0
Respostas
Gilmar Fernandes
22/07/2010
Que linguagem você está usando ???
Qual impressora ???
Outro detalhe, a chave publica e privada você gera uma única vez (é uma identificação da sua empresa, ela é única), você não precisa gerá-la cada vez que você for gerar o arquivo .txt.
Qual impressora ???
Outro detalhe, a chave publica e privada você gera uma única vez (é uma identificação da sua empresa, ela é única), você não precisa gerá-la cada vez que você for gerar o arquivo .txt.
GOSTEI 0
José Carlos
22/07/2010
Que linguagem você está usando ???
Qual impressora ???
Outro detalhe, a chave publica e privada você gera uma única vez (é uma identificação da sua empresa, ela é única), você não precisa gerá-la cada vez que você for gerar o arquivo .txt.
Qual impressora ???
Outro detalhe, a chave publica e privada você gera uma única vez (é uma identificação da sua empresa, ela é única), você não precisa gerá-la cada vez que você for gerar o arquivo .txt.
Delphi * Mais to querendo fazer manual
Pq tem um parte do sistema q ta ainda em Clipper
o ECF é Bematech
Sim a Chave Publica e privada só estou gerando uma vez. Coloquei todo o procedimento que usei..
GOSTEI 0
Gilmar Fernandes
22/07/2010
Uma vez gerado o XML, você não altera também não. O Módulo (que é a chave pública) é gerado uma única vez. Esse XML é usado SÓ para validar a assinatura.
Agora como você está usando Delphi, usa os recursos da propria Bematech (DLL), não tem dor de cabeça. É muito simples.
{ Funcoes de Assinatura Digital }
function genkkey(ChavePublica: String; ChavePrivada: String): integer; stdcall; external 'sign_bema.dll';
function generateEAD(NomeArq: String; ChavePublica: String; ChavePrivada: String; EAD:String; Sign: Integer): integer; stdcall; external 'sign_bema.dll';
// Aqui você passa o path do arquivo a ser assinado
function AssinaArquivoEAD(W_Arquivo :String) : Boolean;
var
W_EAD: String;
begin
// A Chave Publica e Privada, devem ser geradas uma unica vez e armazenada.
//
// Assina o Arquivo Digitalmente
//
W_EAD := Repetir(' ', 256);
W_Comando := IntToStr(GenerateEAD(W_Arquivo, WVG_ChavePublica, WVG_ChavePrivada, W_EAD, 1));
if Erros then
Result := True
else
Result := False;
end;
Agora como você está usando Delphi, usa os recursos da propria Bematech (DLL), não tem dor de cabeça. É muito simples.
{ Funcoes de Assinatura Digital }
function genkkey(ChavePublica: String; ChavePrivada: String): integer; stdcall; external 'sign_bema.dll';
function generateEAD(NomeArq: String; ChavePublica: String; ChavePrivada: String; EAD:String; Sign: Integer): integer; stdcall; external 'sign_bema.dll';
// Aqui você passa o path do arquivo a ser assinado
function AssinaArquivoEAD(W_Arquivo :String) : Boolean;
var
W_EAD: String;
begin
// A Chave Publica e Privada, devem ser geradas uma unica vez e armazenada.
//
// Assina o Arquivo Digitalmente
//
W_EAD := Repetir(' ', 256);
W_Comando := IntToStr(GenerateEAD(W_Arquivo, WVG_ChavePublica, WVG_ChavePrivada, W_EAD, 1));
if Erros then
Result := True
else
Result := False;
end;
GOSTEI 0