Ir para conteúdo
  • Cadastre-se

dev botao

Assinatura Digital - Em Base64 / Pkcs#1 - Duvidas.


Walleg
  • Este tópico foi criado há 2037 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Boa tarde.
Bem, estou procurando algo a respeito dessa Assinatura Digital, vcs tem algo disponível?
Pelo o que li é o conjunto dos CNPJ's do AC + o do Do Estabelecimento Comercial e assim criptografados em 344 caracteres no padrão PKCS#1.

No Site da Receita eles disponibilizaram um link de

um Assinador, porém está em .php - >  http://www.fazenda.sp.gov.br/sat/downloads/assinador_nseg.zip

 

Em um documento que tenho da receita eles falam o seguinte:

 

"A Sefaz disponibilizou sugestão de código para geração da assinatura, na página do SAT: 

http://www.fazenda.sp.gov.br/sat, menu downloads -> arquivos vigentes, item “Assinador de 
Número de Segurança”. Recomenda-se que seja construído um executável em C#.net com esse 
código e que seja feita a comparação do resultado (texto Base64) com o resultado gerado pelo 
aplicativo utilizado pela Software House."
 
Porém eles não explicam direito, também li a respeito que esses CNPJ's podem/devem ser vinculados com o e-CNPJ do AC.
 

Bem, vcs teriam como me dar uma dica de como isso está funcionando ou se já tem algo de teste?
Obrigado desde já!

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • Membros Pro

Estou tentando gerar usando o CAPICOM + Delphi para criar um exe gerar a assinatura porém não estou tendo sucesso, assinatura gerada fica bem maior que o 344 caractres, me parece que a capicom usa SHA1 e como tem que usar SHA256 talvez não vai dar certo usar a CAPICOM,estou usando o seguinte codigo :

function TF_Assinatura.Assinar(vCNPJs: String): Boolean;
var
  Store : IStore3;
  CertsLista, CertsSelecionado : ICertificates2;
  CertDados : ICertificate;
  lSigner : TSigner;
  lSignedData : TSignedData;
  vAssinatura:string;
  Crypt: EncryptedData;
begin
  Result := False;
 
  Store := CoStore.Create;
  Store.Open(CAPICOM_CURRENT_USER_STORE, 'My', CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
 
  CertsLista := Store.Certificates as ICertificates2;
  CertsSelecionado := CertsLista.Select('Certificado(s) Digital(is) disponível(is)', 'Selecione o Certificado Digital para uso no aplicativo', false);
 
  if not(CertsSelecionado.Count = 0) then
  begin
    CertDados := IInterface(CertsSelecionado.Item[1]) as ICertificate2;
    lSigner             := TSigner.Create(self);
    lSigner.Certificate := CertDados;
    lSignedData         := TSignedData.Create(self);
    lSignedData.Content := vCNPJs;
 
    edtAssinatura.Text := lSignedData.Sign(lSigner.DefaultInterface, false, CAPICOM_ENCODE_BASE64);
    Result := True;
    lSignedData.Free;
    lSigner.Free;
  end;
 
end;
Caso eu consiga gerar posto aqui no post para disponibilizar...

Jorge – Analise / Desenvolvimento de Sistemas

Netstart Informatica - (18)3642-0900

www.netstart.com.br

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Estou fazendo testes com o OpenSSL, seguindo os exemplos disponibilizados na página do Secretaria da Fazenda, e também as dicas desse site:

https://www.madboa.com/geek/openssl/

 

Acredito que tenha conseguido chegar num resultado final da assinatura, usando um arquivo PFX (Certificado A1)

 

1 - É necessário converter o arquivo PFX (pkcs12) no formato PEM, reconhecido pelo OpenSSL

https://www.madboa.com/geek/openssl/#cert-pkcs12

 

O comando abaixo transforma o arquivo CertificadoA1.pfx em Certificado.pem, compatível com o OpenSSL

openssl pkcs12 -in CertificadoA1.pfx -out Certificado.pem -nodes

2 - Assinando digitalmente o arquivo com a Chave

 

Vamos supor que temos o arquivo CNPJs.txt, contendo os dois CNPJs concatenados:

0112312300019902321321000199

https://www.madboa.com/geek/openssl/#digest-sign

 

Gerando o arquivo assinatura.bin, com o conteudo de CNPJs.txt, assinado pelo seu Certificado.pem

openssl dgst -sha256 -sign Certificado.pem -out assinatura.bin CNPJs.txt

3 - Convertendo o arquivo gerado para Base64

Observe que o conteúdo de assinatura.bin não é legível.. o comando abaixo transforma o mesmo para Base64

 

https://www.madboa.com/geek/openssl/#encrypt-base64

openssl enc -base64 -in assinatura.bin -out assinatura.txt

O Resultado final, o conteúdo de assinatura.txt, será algo semelhante a:

QL6el4qfOpWK0tlPVG9uGia1IHTm5rDwR6MHhiOSzi29n73II+teftgf1yXGr8BL
VSeCLF4VjcHbHMcsOQ6tzvyGO1+izRUfUOR/2FOuU3bgY7RkwT7j3gRYAqMKucF0
rm5je+/ae6eRYTIEFUhGpAkyiKqdJWSYEkKyindD0zvNcH5vhU2ieC57MxgItj0K
W3NhOkdICdFauLrjm612fMcz0y7ZEUsdD3Uynz/azKTNJnE03x5od8AZdtza71TS
zTV0KJkxldfsZq6+DlddfW7gq0Qy8hA3oa/Vx9KB/2Vc/g8g5rNHtfJ0Bhr3SK5M
zP62ErseJlLS5GVvlR0dVQ==

 

PS: Estou tentando ajustar o ACBrEAD para que o mesmo seja capaz de realizar esses passos, usando um Certificado A1

  • Curtir 4
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Eu consegui gerar o .pfx, tem a opção na hora de exportar.

Vc pode escolher entre .cer e .pfx

 

Com A3 exportado para um PFX, os comandos do OpenSSL que postei, funcionam ?

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Consegui chegar na assinatura final, usando o A3.
Porém não deu os 344 chars.
Vou pesquisar o que pode ter acontecido e refazer.

 

 

acAymSTj1e5G0rF+rYjDQssxagAlgb/----------------------------------------------------

 

Editado por EMBarbosa
Informação privada
Link para o comentário
Compartilhar em outros sites

  • Consultores

 

Consegui chegar na assinatura final, usando o A3.

Porém não deu os 344 chars.

 

Olá,

 

   Eu editei o post pois ficou parecendo que você anexou um resultado obtido de uma conversão de sua chave. Por segurança, mesmo não dando os 344 caracteres, não devia colocar sua chave privada num fórum público. Mas se você anexou a assinatura, então não teria problema, me desculpe pela edição.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

Olá,

 

   Eu editei o post pois ficou parecendo que você anexou um resultado obtido de uma conversão de sua chave. Por segurança, mesmo não dando os 344 caracteres, não devia colocar sua chave privada num fórum público. Mas se você anexou a assinatura, então não teria problema, me desculpe pela edição.

 

EMBarbosa,

Opá, tudo bom?

Então essa chave é fake, apenas números aleatórios, com a mesma quantidade de chars obtidos, rs

Mas obrigado pela preocupação!

Mas a respeito da assinatura, então não há necessidade de 344 chars?? Pode ser menos???

Obrigado!

Editado por walleg
Link para o comentário
Compartilhar em outros sites

  • Fundadores

Acho que no processo de sign digest usando sha256 e a chave Privada do Certificado, sempre resultará em uma String de 256 caracteres...  que quando transformadas para Base64, ficarão com 344 caracteres, baseado na conta: (Length(Value) + 2) div 3) * 4)

 

No cadastro da Sw.House no SGRSAT você deve subir a chave pública, do mesmo certificado...

 

Provavelmente haverá um processo de verificação da assinatura, no site do Sefaz, quando o contribuinte enviar para o SAT o comando AssociarAssinatura com a chave que você assinou...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Entendi, Daniel.
Mas me diz uma coisa; Vc conseguiu associar o OpenSSL junto ao seu sistema??
Como fez isso? 
Estou quebrando a cabeça para descobrir isso, apesar de programar-mos em linguagens diferentes, mas gostaria de saber qual método vc usa(Parâmetros, dll, PInvoke)

Obrigado!

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

O ACBrEAD já está quase ajustado para efetuar esses comandos usando as DLLs do OpenSSL

 

Mas dá pra usar a aplicação de assinatura efetuando chamadas ao "openssl.exe"... afinal a aplicação que gera a assinatura, nunca será usada pelo usuário final..

 

Porém será muito, muito difícil fazer o OpenSSL usar um certificado A3

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Boa tarde

walleg

caso queira se aprofundar e usar o openssl com A3 segue os links

 

https://projetos.labsec.ufsc.br/libcryptosec

 

https://www.opensc-project.org/

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Eu não tenho um A3 eCNPJ para testar... Se você tiver, tente exportar para PFX, é aplicar os passos descritos no inicio do post...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

OK... Agora o ACBrEAD é capaz de realizar a mesma operação para o calculo de Assinatura, descrita no inicio desse Post...

 

Por favor veja esse post:

 

Exemplo de uso:

post-61-0-38025000-1414604091_thumb.png

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Eu não tenho um A3 eCNPJ para testar... Se você tiver, tente exportar para PFX, é aplicar os passos descritos no inicio do post...

Então, eu fiz o teste exatamente como disse e cheguei a uma chave inferior a chave de 344, estou tentando entender o pq disso.

Quando transformo ele em .pem consigo visualizar as chaves e RSA, e seus conteúdos. 

 

 

Opa Felipe, como vc fez para exportar o pfx do seu certificado A3 ? 

 

Aqui não consigo exportar

O A3, vc tem que exportar usando o internet explore, na parte de certificados e aí vc escolhe o .pfx

Link para o comentário
Compartilhar em outros sites

OK... Agora o ACBrEAD é capaz de realizar a mesma operação para o calculo de Assinatura, descrita no inicio desse Post...

 

Por favor veja esse post:

 

Exemplo de uso:

attachicon.gifDemoEAD.png

Muito bom Daniel! 

Nessa parte da LocalKeyID o meu em A3, fica com alguns números "0" no arquivo .pem

Vou analisar!

Editado por Felipe Walleg
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2037 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.