Clipper On Line • Ver Tópico - eSocial - Assinatura Inválida - URGENTE

eSocial - Assinatura Inválida - URGENTE

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

eSocial - Assinatura Inválida - URGENTE

Mensagempor Henrique Victory » 02 Jul 2018 17:05

Boa tarde a todos do Grupo.
Estou implementando o eSocial no meu sistema e meu prazo já está esgotado.
Preciso enviar o evento S1000 (Inicial). Já estruturei todo o xml mas quando envio, recebo a mensagem :
Codigo = 142
Descricao = Assinatura do evento inválida. Ações Sugeridas: Verificar se houve alteração do evento após a assinatura. Verificar a validade da assinatura.
Localizacao = /eSocial/Signature
Com muitas pesquisas para assinar com SHA256 (diferente da NFe que é SHA1), cheguei ao código abaixo.
Pergunto:
1) Tem algo errado no código ?
2) A base da assinatura (pedaço do xml) está correta ? (O manual diz que a assinatura tem que ser sobre o Evento)
3) Tem como eu checar se a assinatura está correta antes de enviar ? (Pela string da assinatura achar a base que foi assinada ?)

Alguém já passou por esse erro ?
Pode dar uma dica ?
Desde já, agradeço, lembrando: é URGENTE.
------------------------------------------------------------------código
xml :=
<?xml version="1.0"?>
<eSocial xmlns="http://www.esocial.gov.br/schema/evt/evtInfoEmpregador/v02_04_02">
   <evtInfoEmpregador Id="ID1290588510000002018070122564800001">
      <ideEvento>
         <tpAmb>2</tpAmb>
         <procEmi>0</procEmi>
         <verProc>1.0</verProc>
      </ideEvento>
      <ideEmpregador>
         <tpInsc>1</tpInsc>
         <nrInsc>19052251</nrInsc>
      </ideEmpregador>
      <infoEmpregador>
         <inclusao>
            <idePeriodo>
               <iniValid>2018-05</iniValid>
            </idePeriodo>
            <infoCadastro>
               <nmRazao>LOJA DO COMERCIO LTDA</nmRazao>
               <classTrib>01</classTrib>
               <natJurid>2305</natJurid>
               <indCoop>0</indCoop>
               <indConstr>0</indConstr>
               <indDesFolha>0</indDesFolha>
               <indOptRegEletron>0</indOptRegEletron>
               <indEntEd>N</indEntEd>
               <indEtt>N</indEtt>
               <contato>
                  <nmCtt>JOAO DA SILVA</nmCtt>
                  <cpfCtt>02223323232</cpfCtt>
                  <foneFixo>6239412233</foneFixo>
                  <foneCel>62999999999</foneCel>
                  <email>joaoorganizacao@yahoo.com.br</email>
               </contato>
               <softwareHouse>
                  <cnpjSoftHouse>22332323232357</cnpjSoftHouse>
                  <nmRazao>Sistemas Informatica Ltda</nmRazao>
                  <nmCont>Joao Mensdes Mendonca</nmCont>
                  <telefone>6232559090</telefone>
                  <email>suporte@sistemasgestaox.com.br</email>
               </softwareHouse>
               <infoComplementares>
                  <situacaoPJ>
                     <indSitPJ>0</indSitPJ>
                  </situacaoPJ>
               </infoComplementares>
            </infoCadastro>
         </inclusao>
      </infoEmpregador>
   </evtInfoEmpregador>
</eSocial>

sig :=
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
   <SignedInfo>
         <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
       <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
         <Reference URI="">
         <Transforms>
       <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
       <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
       </Transforms>
       <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
         <DigestValue></DigestValue>'
       </Reference>
    </SignedInfo>
    <SignatureValue></SignatureValue>
         <KeyInfo>  ;
             <X509Data>
                <X509Certificate></X509Certificate>
             </X509Data>
         </KeyInfo>
</Signature>'


xmlassinado := Minha_Assina( Xml , Sig )

*************************************************************
Function Minha_Assina(Veio_Xml , Veio_Sig )
   LOCAL DigestValue,aAss,SignatureValue, X509

   cXML  := PegaTag( Veio_XML  , "evtInfoEmpregador")
   // Alernativa 1
       DigestValue    := _HashCapicom( cXml )
   // Alernativa 2 (Nativa do Harbour)
   DigestValue    :=  hb_sha256( cXml )
       aAss           := _SignatureCapicom( DigestValue )

   If aAss[1]==NIL
      Return NIL
   Endif
       SignatureValue := aAss[1] 
       X509           := aAss[2]

      cXmlSig := _InsereDadosTag( cXmlSig, "DigestValue"     , DigestValue  )
      cXmlSig := _InsereDadosTag( cXmlSig, "SignatureValue"  , SignatureValue  )
      cXmlSig := _InsereDadosTag( cXmlSig, "X509Certificate" , x509  )

      cTexto := SUBS( ccXML ,1,AT('</eSocial>', ccXML )-1)
      cTexto += cXMLSig
      cTexto := cTexto + '</eSocial>'

Return( cTexto )

FUNCTION _SignatureCapicom( DigestValue, Cert, Encode )   
LOCAL SignedData, CertBase64, Signer, sRet, TimeAttrib 
 
   Signer := win_oleCreateObject("CAPICOM.Signer.2")  //versao 2

       IF Cert = NIL 
             Cert :=  _SelecionaCertificadoCapicom()
             IF Cert = NIL 
                RETURN{ NIL,NIL}
             ENDIF 
            Signer:Certificate := cert 
   ELSE 
             Signer:Certificate := cert:DefaultInterface 
       ENDIF 
 
       IF !(Signer:Certificate:HasPrivateKey ; 
       .and. DToS(Signer:Certificate:ValidFromDate) <= DToS(Date()) ; 
       .and. DToS(Signer:Certificate:ValidToDate) >= DToS(Date()) ) 
             RETURN NIL 
       ENDIF 
 
       Signer:Options := CAPICOM_CERTIFICATE_INCLUDE_CHAIN_EXCEPT_ROOT 
 
       CertBase64 := Signer:Certificate:Export(CAPICOM_ENCODE_BASE64) 
       CertBase64 := Trim(StrTran(certBase64, Chr(13) + Chr(10), '')) 
       TimeAttrib :=  win_oleCreateObject("CAPICOM.Attribute")

       TimeAttrib:Name := CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME 
       TimeAttrib:Value = DateTime() 
 
       Signer:AuthenticatedAttributes:Add(TimeAttrib) 
       SignedData := win_oleCreateObject("CAPICOM.SignedData.1")

       SignedData:Content := DigestValue 
 
       sRet := SignedData:Sign(Signer, .F., Encode)
 
RETURN{ sRet, CertBase64 } 

FUNCTION _HashCapicom( sTexto, AlgoritimoHash  ) 
LOCAL objHash 
 
    IF sTexto = NIL 
       sTexto := DToS(Date()) + Time() 
    ENDIF 
 
    IF AlgoritimoHash = NIL 
       AlgoritimoHash := CAPICOM_HASH_ALGORITHM_SHA_256 
    ENDIF 

    objHash := win_oleCreateObject("CAPICOM.HashedData.1")
    objHash:Algorithm := AlgoritimoHash
    objHash:Hash( sTexto )

RETURN objHash:Value 

FUNCTION _SelecionaCertificadoCapicom() 
    LOCAL MyStore, Certificates , oError 
 
    MyStore := CreateObject("CAPICOM.Store")
    MyStore := win_oleCreateObject("CAPICOM.Store")

    MyStore:Open( CAPICOM_CURRENT_USER_STORE, "My", CAPICOM_STORE_OPEN_READ_ONLY ) 
 
    TRY 
       Certificates := MyStore:Certificates:Select("Selecione um certificado digital","Algoritimo de Assinatura SHA256RSA") 
    CATCH oError 
 
       MsgStop('Não foi possível carregar objeto XMLHTTPServer', 'Erro') 
       RETURN NIL 
    END 
 
    IF MyStore:certificates:Count = 0 
       RETURN NIL 
    ENDIF 

RETURN( certificates:Item(1) ) 

FUNCTION _InsereDadosTag( cXml, cTag, cDados  ) 
    LOCAL nPosIni, nPosFim, cPart1, cPart2 
    LOCAL cRetorno 
 
    cRetorno := cXml 
 
    nPosIni    := At( "<"+cTag,cXml ) 
    IF nPosIni == 0 
        RETURN( cRetorno ) 
    ENDIF 
    nPosIni     := nPosIni + Len( cTag ) + 1 
    cPart1      := SubStr( cXml,1,nPosIni ) 
 
    nPosFim     := At( "</"+cTag+">",cXml ) 
    cPart2      := SubStr( cXml,nPosFim, Len( cXml ) ) 
    cRetorno    := cPart1 + cDados + cPart2 
 
RETURN( cRetorno )

Function pegaTag(cXML, cTag)
LOCAL cRetorno, cTagInicio,cTagFim
   cTagInicio := "<"+cTag //+">"
   cTagFim := "</"+cTag+">"
   cRetorno := SUBS( cXML, AT(cTagInicio,cXML)+LEN(cTagInicio)+1, AT(cTagFim,cXML)-(AT(cTagInicio,cXML)+LEN(cTagInicio)+1) )
RETURN(cRetorno)

***************************
Nota de Moderação:
Toledo: Mensagem editada para colocar a tag [ code ]
Veja como utilizar esta tag: Clique aqui
Henrique Victory
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 11
Data de registro: 02 Jul 2018 09:52
Cidade/Estado: Goiania-Go
Curtiu: 0 vez
Mens.Curtidas: 0 vez

eSocial - Assinatura Inválida - URGENTE

Mensagempor fladimir » 02 Jul 2018 21:48

Não, passei, mas o ACBr vi q tem o e-Social, como uso o ACBr pra vários documentos eletronicos quem sabe a funcionalidade q tem do e-social no ACBr te ajude em algo. Da uma pesquisada.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

eSocial - Assinatura Inválida - URGENTE

Mensagempor jairfab » 03 Jul 2018 08:38

O capicom não serve para assinatura do esocial, antes servia, depois de algum tempo passou a não servir, fiquei tres meses alterando a forma de assinatura ate chegar a conclusão de que a assinatura do capicom não tem nenhum jeito de funcionar.

Assinatura mais fácil seria com java ou c#.
Delpji 7, harbour 3.2, xharbour 1.2.3, Bcc7, Minigw, Minigui 19.11, hwgui 2.20, FiveWin 19.05 Gtwvw, Gtwvg, C# VS 2017
Avatar de usuário

jairfab
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 242
Data de registro: 21 Mai 2007 09:43
Cidade/Estado: São Paulo, Região Leste - Suzano
Curtiu: 0 vez
Mens.Curtidas: 13 vezes

eSocial - Assinatura Inválida - URGENTE

Mensagempor Henrique Victory » 03 Jul 2018 09:51

Ok Jairfab
Já vi algumas rotinas em Java e C#.
Mas como não domino o Java e nem o C#, pergunto :
Como converter essas rotinas pra colocar na minha aplicação (Minigui + Harbour) ??
Henrique Victory
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 11
Data de registro: 02 Jul 2018 09:52
Cidade/Estado: Goiania-Go
Curtiu: 0 vez
Mens.Curtidas: 0 vez

eSocial - Assinatura Inválida - URGENTE

Mensagempor jairfab » 03 Jul 2018 10:15

Não sei converter, sem que tem opção pra fazer ele ser acessado por quaisquer linguagem mas eu utilizo como serviço, depois gravo o xml em uma pasta e o serviço faz a validação, assinatura, envio e retorno
Delpji 7, harbour 3.2, xharbour 1.2.3, Bcc7, Minigw, Minigui 19.11, hwgui 2.20, FiveWin 19.05 Gtwvw, Gtwvg, C# VS 2017
Avatar de usuário

jairfab
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 242
Data de registro: 21 Mai 2007 09:43
Cidade/Estado: São Paulo, Região Leste - Suzano
Curtiu: 0 vez
Mens.Curtidas: 13 vezes

eSocial - Assinatura Inválida - URGENTE

Mensagempor JoséQuintas » 03 Jul 2018 10:28

jairfab escreveu:O capicom não serve para assinatura do esocial


Não sei não....
A SefazClass tem rotina de assinatura, basta acrescentar na lista o começo/término das tags do documento.
Acho que não adianta usar só Capicom, infelizmente precisa de MSXML5, a única versão da Microsoft que trabalha com assinatura, e que fez (não sei se ainda faz) parte do Office - acho que ela faz a parte de ajustar codepage.

Repare também no seguinte:
A assinatura usa uma identificação do bloco a ser assinado, que vai pra assinatura.
Verifique se está no mesmo padrão, acho que é "ID" ou "#ID", só olhar no fonte e identificar aonde pega essa identificação.

Não custa tentar...
Ainda mais que assinatura vai ser cada vez mais necessária.

Em todo caso, vou alterar a rotina com base nesse XML... acrescentar o início/final de bloco na lista do array.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

eSocial - Assinatura Inválida - URGENTE

Mensagempor JoséQuintas » 03 Jul 2018 10:32

Pronto.
Fiz uma alteração complicada na Sefazclass pra isso....

acrescentei esta linha... rs
      { "<evtInfoEmpregador",     "</eSocial>" }, ;


Agora é só testar.

Nota. É sério, basta conferir aqui.

https://github.com/JoseQuintas/sefazclass/commit/5d6e8d800f23bd08e97eb6c8870b6c8e5c24c6d3

esocial.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

eSocial - Assinatura Inválida - URGENTE

Mensagempor JoséQuintas » 03 Jul 2018 10:41

Aproveitando....
No programa de teste tem um XML mínimo pra teste de assinatura de NFE, só ajustar pro ESocial.
Opcionalmente, só usar o ze_spedassinatura.prg e arquivos relacionados, sem passar pela sefazclass.

         oSefaz:cXmlDocumento := [<NFe><infNFe Id="Nfe0001"></infNFe></NFe>]
         oSefaz:AssinaXml()
         ? oSefaz:cXmlRetorno
         ? oSefaz:cXmlDocumento
         Inkey(0)
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

eSocial - Assinatura Inválida - URGENTE

Mensagempor JoséQuintas » 03 Jul 2018 10:44

Tem a criação, que no caso do ESocial vai precisar do certificado - O NOME DO CERTIFICADO não o serial.
O resto não precisa pra assinar.

      oSefaz              := SefazClass():New()
      oSefaz:cUF          := cUF
      oSefaz:cVersao      := cVersao
      oSefaz:cCertificado := cCertificado
      oSefaz:cAmbiente    := cAmbiente
      oSefaz:cNFCe        := cNFCe
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

eSocial - Assinatura Inválida - URGENTE

Mensagempor JoséQuintas » 03 Jul 2018 10:54

Uma alteração rápida, pra qualquer documento, assim nem vai ter trabalho pra testar. (se tiver capicom e msxml5 instalados)

esocial1.png


O programa faz parte da Sefazclass (os fontes).
Aqui compilado com Harbour 3.4

test.zip
(750.03 KiB) Baixado 105 vezes


      CASE nOpc == nOpcTemp++
         oSefaz:cXmlDocumento := MemoRead( win_GetOpenFileName(, "Arquivo a assinar", "importa\", "XML", "*.XML", 1 ) )
         oSefaz:AssinaXml()
         ? oSefaz:cXmlRetorno
         ? oSefaz:cXmlDocumento
         hb_MemoWrit( "testassina.xml", oSefaz:cXmlDocumento )
         Inkey(0)
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

eSocial - Assinatura Inválida - URGENTE

Mensagempor Henrique Victory » 03 Jul 2018 11:17

Obrigado José Quintas pelo interesse e orientação.
Vou providenciar os testes conforme indicado imediatamente e posto aqui o resultado.
Abraço.
Henrique Victory
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 11
Data de registro: 02 Jul 2018 09:52
Cidade/Estado: Goiania-Go
Curtiu: 0 vez
Mens.Curtidas: 0 vez

eSocial - Assinatura Inválida - URGENTE

Mensagempor Henrique Victory » 03 Jul 2018 11:32

José Quintas,
Usei o Test.exe e o xml foi assinado.
Anexei ao Envelope (cuja rotina esta OK) e enviei ao eSocial.
O Lote foi recebido com sucesso, porem, a consulta do processamento retornou :
Assinatura do evento inválida. Elemento 'SignatureMethod' inválido.
É porque foi assinado com método SHA1 e o eSocial exige o SHA256.
Alguns colegas dizem que pelo SHA256 não dá certo.
Alguma alternativa ??
Henrique Victory
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 11
Data de registro: 02 Jul 2018 09:52
Cidade/Estado: Goiania-Go
Curtiu: 0 vez
Mens.Curtidas: 0 vez

eSocial - Assinatura Inválida - URGENTE

Mensagempor JoséQuintas » 03 Jul 2018 12:52

Nesse caso vai ser criar uma variação pra esocial.
O teste se o suporte é automático seria alterar as informações no bloco signature.
Se não for automático....

Segundo este site, dá pra trocar manualmente, via programação:

https://stackoverflow.com/questions/10673146/signature-with-sha256
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

eSocial - Assinatura Inválida - URGENTE

Mensagempor fladimir » 03 Jul 2018 13:37

Verifiquei aki, pra quem usar o eSocial pelo ACBrMonitor, o mesmo já cria o XML e Assina

Imagem
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

eSocial - Assinatura Inválida - URGENTE

Mensagempor JoséQuintas » 03 Jul 2018 13:51

Achei uma página com informação interessante....

https://knowledge.digicert.com/generalinformation/INFO2274.html

sha256.png


"O Windows 7 aceita assinatura SHA256, mas precisa atualizações da Microsoft...."

Sei lá....
É TLS 1.2, é assinatura SHA256....
Parece que Windows 10 vai acabar sendo obrigatório....
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18013
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Google [Bot] e 3 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro