Antes tarde do que nunca . Comecei esta semana , ja que sobrou um tempo , tentar entender um pouco sobre o processo de validaçao e assinatura usando o componente AcbrPaf da biblioteca ACBR . Confesso que  não foi muito fácil , mas enfim consegui obter bons resultados e gostaria de compartilhar .

Antes de tudo meu ambiente de Trabalho .

  • Delphi21010
  • AcbrPaf Versao 0.05
  • libeay32.dll Versão 0.9.8.6
  • sign_bema.dll
  • openssl.exe 

Todas essas dll e mais o aplicativo.exe estão no Diretorio do executavel que foi compilado pelo Delphi

Vou começar o meu exemplo utilizando uma caracteristica do componente que é de gerar o EAD no Arquivo automaticamente.  De forma que não é necessário nenhuma codificação e o processo ja terá uma assinatura. Para isto a propriedade CBrPAF1.AssinarArquivo tem que ser true. Por padrão esta propriedade ja é true e vc não precisa se preocupar . Ressalto que nesta primeira parte do processo de geração de chaves é utilizando o OPENSSL.exe , padrão do AcbrPaf

Ao executar a linha de comando ACBrPAF1.SaveFileTXT_P(‘PAF_Produtos.txt’); será gerado um Arquivo txt no caminho especificado pela propridade path do componente . Neste arquivo se vc observar ja tem uma assinatura EADA709CF02D0631993AE6B43AE0EBC78FE1CF112D1D944F73782892BF75D5ADDC151E 0D9020C3234D22F0178B2E563311F6FFBEFAA5BFF791DC2C2016A634A447B0015B004B0 258027F90296D9830A9E9F550EAFA1288AA129510F9A3B26ACE37E9F3165CDA4494768B 8CF09F865E8C2578318DE90F04085E5534D0B7E303B98BE

 Esta assinatura foi gerada por uma chave particular definida na uses unit ACBrEAD; e  aqui eu subscrevo

  { Chave padrão… por motivos de segurança, GERE A SUA PROPRIA CHAVE e
     informe-a em: “OnGetKeyRSA” }

   cRFDRSAKey = ‘—–BEGIN RSA PRIVATE KEY—–’ + sLineBreak +
 ’MIICXQIBAAKBgQCtpPqcoOX4rwgdoKi6zJwPX9PA2iX2KxgvyxjE+daI5ZmYxcg0′+sLineBreak+                ‘NScjX59nXRaLmtltVRfsRc1n4+mLSXiWMh3jIbw+TWn+GXKQhS2GitpLVhO3A6Ns’+sLineBreak+                ‘vO1+RuP77s+uGYhqVvbD0Pziq+I2r4oktsjTbpnC7Mof3BjJdIUFsTHKYwIDAQAB’+sLineBreak+
‘AoGAXXqwU7umsi8ADnsb+pwF85zh8TM/NnvSpIAQkJHzNXVtL7ph4gEvVbK3rLyH’+sLineBreak +
 ’U5aEMICbxV16i9A9PPfLjAfk4CuPpZlTibgfBRIG3MXirum0tjcyzbPyiDrk0qwM’+sLineBreak+
 ’e83MyRkrnGlss6cRT3mZk67txEamqTVmDwz/Sfo1fVlCQAkCQQDW3N/EKyT+8tPW’+sLineBreak+
 ’1EuPXafRONMel4xB1RiBmHYJP1bo/sDebLpocL6oiVlUX/k/zPRo1wMvlXJxPyiz’+sLineBreak+
 ’mnf37cZ9AkEAzuPcDvGxwawr7EPGmPQ0f7aWv87tS/rt9L3nKiz8HfrT6WT0R1Bh’+sLineBreak+
 ’I7lLGq4VFWE29I6hQ2lPNGX9IGFjiflKXwJBALgsO+J62QtwOgU7lEkfjmnYu57N’+sLineBreak+
‘aHxFnOv5M7RZhrXRKKF/sYk0mzj8AoZAffYiSJ5VL3XqNF6+NLU/AvaR6kECQQCV’+sLineBreak+
‘nY6sd/kWmA4DhFgAkMnOehq2h0xwH/0pepPLmlCQ1a2eIVXOpMA692rq1m2E0pLN’+sLineBreak+ ‘dMAGYgfXWtIdMpCrXM59AkB5npcELeGBv1K8B41fmrlA6rEq4aqmfwAFRKcQTj8a’+sLineBreak+ ‘n09FVtccLVPJ42AM1/QXK6a8DGCtB9R+j5j3UO/iL0+3′+ sLineBreak +
 ’—–END RSA PRIVATE KEY—–’ ;

O  grande passo é vc gerar uma chave publica e juntamente coma chave privada para então gerar o Arquivo modulus.txt e dele extrair a sequência válida que devemos utilizar para que o Arquivo original seja Validado. Para esta etápa temos o auxilio do ja mencionado openssl.exe . Porém , não iremos fazer desta forma , isto é , não usaremos  a chave private padrão do componente , por razões de segurança ressaltadas no início , devemos usar a nossa propria chave.  Diga-se de passagem que este processo é único e esta chave deve valer para todos os documentos que devam ser enviados , alem de ser gardade em um local seguro

Vamos fazer o processo desde o inicio , isto é , gerando uma chave privada diferente da chave Padrão do componente para então gerar a chave publica e por fim o Arquivo  modulus.txt . Para isto localize o Openssl.exe de dois clik e  o seu Editor Dos será aberto para então podermos digitar as instruçoes , que seguem

Para gerar a chave Privada de 1024 bytes:
openssl> genrsa -out priv_key.pem 1024   

Para gerar a chave Publica a partir da privada:
openssl> rsa -in priv_key.pem -pubout -out pub_key.pem

Para extrair o expoente e o modulo:
openssl> rsa -modulus -in priv_key.pem -inform PEM -text -pubout -out modulus.pem

com isto no diretorio onde esta localizado o Aplicativo Openssl.exe teremos três Arquivos txt criados pela linha de comando digitada anteriomente .

O que fazer com estes arquivos ???? Para que servem ???

O primerio Arquivo é uma chave privada . Esta chave sera pessoal intrasferido e deve ser bem guardada e usada em todos os processos de Assinatura de seus Arquivos . Após o comando genrsa -out priv_key.pem 1024 , deve ter sido criado um arquivo texto com o nome de priv_key.pem no diretorio onde esta instalado o Openssl.exe . Este Arquivo pode ser aberto com o Bloco de Notas . De um click nele e selecione o Programa Bloco de Notas para ter acesso as suas informações . Com o Arquivo aberto posicione o Cursor no início e dê um Shift + End para seleciona-lo . E por fim um Cntr + C , A fim de copiar o conteudo para a aréa de transferência do Windows .

Volte no delphi e no evento OnGetKeyRSA do Componente AcbrPaf escreva PrivateKey_RSA:=”;  após isto posicione o piple (cursor) entre o ‘|’ parêntesis e dê um Ctrl+V transferindo então o conteudo  que fora selecionado na etapa anterior . Agora é so concatenar de modo corretamente esta String . Faça isto com muito cuidado de modo que sua String informada para a Variável PrivateKey_RSA esteja parecida com a que postarei logo abaixo

TForm6.ACBrPAF1PAFGetKeyRSA(var PrivateKey_RSA: string);
begin
 PrivateKey_RSA:=’—–BEGIN RSA PRIVATE KEY—–’+sLineBreak +
‘MIICXgIBAAKBgQC6OydTzDiv0BtkdilF3HATMOAAZVXC50GfQN5TaLNCR4coJ5Td’+sLineBreak+
‘vAdeoL55J6d0C8Wkmd+8IpATvQ9x6aw1hiu3FUIEpyG95iMf4RTXgzgO4wnET/T6′+sLineBreak+
‘dmFqhy3KUI1XJ8BOnh9Z0Bnh1Kno3msqT/iNI4N4/AkFCT35uR6Dj2UAwwIDAQAB’+sLineBreak+
‘AoGBAIGydL8teUUoQAuFJ1VaIkubPEXKTSICAHeyq6OXRVChlAVpG4oZS2ChvkWO’+sLineBreak+
‘UlbFZA4wg9r4jzLP9pO005QrLwGQiWSQJ86P9XJHuMnxvaLhi6O/f5JHV1psi1Fc’+sLineBreak+
‘AiWPa5CCs60ki1l3CEslC3xK3IPcqRChj0VXmOPCrnlMlFIRAkEA3WfwH+wlkvhe’+sLineBreak+
‘yM1FIy9HL0v/8s597eWrYcE6fu4WE49HC7zrCunoTDu9cySMvhIhblApNGg4j2We’+sLineBreak+
’11b7MshlbQJBANdUPxRfDT+oyMLfeRk900WuXnpdeiCe02rOpnXDRtvCjsQ5TzDr’+sLineBreak+
‘d8wytBDm9y+9hyxn+L/D2V8ZyqtLJoalkO8CQQC2PozYKfBPxqN2lAh5yrvEgcFf’+sLineBreak+
‘YnsjrC3i3EPDIUUIuqIXVlz+ccUlovLxaT90YMYl4FPacINF/ba+uDky9uMNAkEA’+sLineBreak+
‘oRBeIqG6qjxY9xLrZQsOxhdYihTzrgS/RSwP7RRFI0pTOclYR9JJiI8Ai4gHq0kM’+sLineBreak+
‘HBYlRWN8a5tCMoCC78JWNwJAElOrOB5gHp6RTlyE+xSfpjX5JBsdaRXyu289OebC’+sLineBreak+
‘S0fMtx+s1InVnH+F0eQctOrLMZGAeV5Nj56vDtgx+H7qSw==’+ sLineBreak +
‘—–END RSA PRIVATE KEY—–’;
end;

Com isto feito  estamos  informando ao componente AcbrPaf que não iremos utilizar a chave privata , que por padrão ja vem pré-instalada no componente , mas sim a nossa chave  definida no evento GetKeyRSA e atribuida a variável PrivateKey_RSA . O Resultado imediato desta nova atribuição é na hora de executarmos o comando pore xemplo ACBrPAF1.SaveFileTXT_P(‘PAF_Produtos.txt’);  termos  um EAD diferente do padrão . (O que pode ser constatado na Ultima linha do arquivo PAF_Produtos.txt ) .

O próximo passo que será visto na outra parte do artigo é a montagem do arquivo SHouse para podermos então  efetuar a validação

um abraço e atê a próxima

Linh para o Original