none
eSocial Erro - Assinatura do evento inválida. RRS feed

  • Pergunta

  • Olá pessoal bom dia estou tentando assinar um lote de eventos Esocial com o evento "evtInfoEmpregador".
    Crio o Envelope SOAP, envio e o servidor de envio de eventos aceita numa boa.
    Mas quando vou olhar no servidor de consulta de lotes enviados, eis que me deparo com o seguinte erro:

                          <evento Id="ID1077944930000002018121223112505568">
                            <retornoEvento>
                               <eSocial xmlns="http://www.esocial.gov.br/schema/evt/retornoEvento/v1_2_0">
                                  <retornoEvento Id="ID1077944930000002018121223112505568">
                                     <ideEmpregador>
                                        <tpInsc>1</tpInsc>
                                        <nrInsc>07794493</nrInsc>
                                     </ideEmpregador>
                                     <recepcao>
                                        <tpAmb>2</tpAmb>
                                        <dhRecepcao>2018-12-17T10:04:22.08</dhRecepcao>
                                        <versaoAppRecepcao>0.1.0-A0350</versaoAppRecepcao>
                                        <protocoloEnvioLote>1.2.201812.0000000000047679519</protocoloEnvioLote>
                                     </recepcao>
                                     <processamento>
                                        <cdResposta>405</cdResposta>
                                        <descResposta>Assinatura inválida.</descResposta>
                                        <versaoAppProcessamento>10.0.2-A3792</versaoAppProcessamento>
                                        <dhProcessamento>2018-12-17T10:04:22.13</dhProcessamento>
                                        <ocorrencias>
                                           <ocorrencia>
                                              <tipo>1</tipo>
                                              <codigo>142</codigo>
                                              <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.</descricao>
                                              <localizacao>/eSocial/Signature</localizacao>
                                           </ocorrencia>
                                        </ocorrencias>
                                     </processamento>
                                  </retornoEvento>
                               </eSocial>
                            </retornoEvento>
                         </evento>
    


    Eu já procurei em todos os fórums e penso que estou a fazer a coisa certa mas o erro persiste. Já estou ficando triste kkkkk. Se alguém puder, me fala se estou fazendo a procedimento e a assinatura corretamente:

    Passo 1: Chega de um servidor na web para meu aplicativo em desktop em .NET o seguinte arquivo xml:

    <EnviarLoteEventos>
    	<loteEventos>
    		<eSocial
    			xmlns="http://www.esocial.gov.br/schema/lote/eventos/envio/v1_1_1"
    			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    			<envioLoteEventos grupo="1">
    				<ideEmpregador>
    					<tpInsc>1</tpInsc>
    					<nrInsc>07794493</nrInsc>
    				</ideEmpregador>
    				<ideTransmissor>
    					<tpInsc>1</tpInsc>
    					<nrInsc>07794493000128</nrInsc>
    				</ideTransmissor>
    				<eventos>
    					<evento Id="ID1077944930000002018121223112505568">
    						<eSocial
    							xmlns="http://www.esocial.gov.br/schema/evt/evtInfoEmpregador/v02_04_02">
    							<evtInfoEmpregador Id="ID1077944930000002018121223112505568">
    								<ideEvento>
    									<tpAmb>3</tpAmb>
    									<procEmi>1</procEmi>
    									<verProc>2_4_02</verProc>
    								</ideEvento>
    								<ideEmpregador>
    									<tpInsc>1</tpInsc>
    									<nrInsc>07794493</nrInsc>
    								</ideEmpregador>
    								<infoEmpregador>
    									<alteracao>
    										<idePeriodo>
    											<iniValid>2018-07</iniValid>
    										</idePeriodo>
    										<infoCadastro>
    											<nmRazao>U E AREOLINO LEONCIO DA SILVA</nmRazao>
    											<classTrib>99</classTrib>
    											<natJurid>3999</natJurid>
    											<indCoop>0</indCoop>
    											<indConstr>0</indConstr>
    											<indDesFolha>0</indDesFolha>
    											<indOptRegEletron>0</indOptRegEletron>
    											<indEntEd>S</indEntEd>
    											<indEtt>N</indEtt>
    											<contato>
    												<nmCtt>CARMINA FERNANDES DE SOUSA SOARES</nmCtt>
    												<cpfCtt>53665490359</cpfCtt>
    												<foneCel>86988290004</foneCel>
    												<email>CLENILDESFSILVA@GMAIL.COM</email>
    											</contato>
    											<softwareHouse>
    												<cnpjSoftHouse>10956042000154</cnpjSoftHouse>
    												<nmRazao>CONTANDO - SOFTWARES EMPRESARIAIS LTDA</nmRazao>
    												<nmCont>Helenaldo Soares de Carvalho</nmCont>
    												<telefone>1135224810</telefone>
    												<email>contador@helenaldo.com.br</email>
    											</softwareHouse>
    											<infoComplementares>
    												<situacaoPJ>
    													<indSitPJ>0</indSitPJ>
    												</situacaoPJ>
    											</infoComplementares>
    										</infoCadastro>
    									</alteracao>
    								</infoEmpregador>
    							</evtInfoEmpregador>
    						</eSocial>
    					</evento>
    					<evento Id="ID1077944930000002018121223112505636">
    						<eSocial
    							xmlns="http://www.esocial.gov.br/schema/evt/evtTabEstab/v02_04_02">
    							<evtTabEstab Id="ID1077944930000002018121223112505636">
    								<ideEvento>
    									<tpAmb>3</tpAmb>
    									<procEmi>1</procEmi>
    									<verProc>2_4_02</verProc>
    								</ideEvento>
    								<ideEmpregador>
    									<tpInsc>1</tpInsc>
    									<nrInsc>07794493</nrInsc>
    								</ideEmpregador>
    								<infoEstab>
    									<alteracao>
    										<ideEstab>
    											<tpInsc>1</tpInsc>
    											<nrInsc>07794493000128</nrInsc>
    											<iniValid>2018-07</iniValid>
    										</ideEstab>
    										<dadosEstab>
    											<cnaePrep>9430800</cnaePrep>
    											<aliqGilrat>
    												<aliqRat>2</aliqRat>
    												<fap>1.0000</fap>
    												<aliqRatAjust>2.0000</aliqRatAjust>
    											</aliqGilrat>
    											<infoTrab>
    												<regPt>0</regPt>
    												<infoApr>
    													<contApr>0</contApr>
    												</infoApr>
    												<infoPCD>
    													<contPCD>0</contPCD>
    												</infoPCD>
    											</infoTrab>
    										</dadosEstab>
    									</alteracao>
    								</infoEstab>
    							</evtTabEstab>
    						</eSocial>
    					</evento>
    				</eventos>
    			</envioLoteEventos>
    		</eSocial>
    	</loteEventos>
    </EnviarLoteEventos>


    Passo 2: Extraio as tags "evento" e as separo em um array;

    Passo 3: passo assinando cada tag "eSocial" dos eventos com o seguinte código:

    //código para extrair eventos e assinar um por um
    List<XmlDocument> eventos = getEventosFromXml(xml_str);
    List<XmlDocument> eventos_assinados = new List<XmlDocument>();
    
    foreach (XmlDocument evento in eventos)
    {
    	eventos_assinados.Add(assinarEsocial(certificado, evento));
    }
    
    
    // Utiliza o certificado digital do cliente para assinar as tags "eSocial" do xml passado como parametro
    private static XmlDocument assinarEsocial(X509Certificate2 certificado, XmlDocument evento)
    {
    	XmlDocument xml = new XmlDocument();
    	XmlDocument eSocial = new XmlDocument();
    	//pego somente a tag "eSocial" do evento o assino
    	eSocial.LoadXml(xml.GetElementsByTagName("eSocial").Item(0).OuterXml);
    	SignXmlDoc(eSocial, certificado);
    	//limpo o código antigo dentro da tag "evento" e coloco o novo código assinado como string 
    	xml.GetElementsByTagName("evento")[0].InnerXml = "";
    	xml.GetElementsByTagName("evento")[0].InnerXml = eSocial.OuterXml;
    	//retorno a tag evento com o xml assinado
    	return xml;
    }
    
    //assina o documento xml com o padrão SHA-256
    private static void SignXmlDoc(XmlDocument xmlDoc, X509Certificate2 certificate)
    {
    	SignedXml signedXml = new SignedXml(xmlDoc);
    
    	signedXml.SigningKey = certificate.GetRSAPrivateKey();
    	signedXml.SignedInfo.SignatureMethod = SignedXml.XmlDsigRSASHA256Url; //"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"
    
    	Reference reference = new Reference(string.Empty);
    
    	reference.AddTransform(new XmlDsigEnvelopedSignatureTransform());
    	reference.AddTransform(new XmlDsigC14NTransform());
    	reference.DigestMethod = SignedXml.XmlDsigSHA256Url; //""http://www.w3.org/2001/04/xmlenc#sha256"
    	signedXml.AddReference(reference);
    
    	signedXml.KeyInfo = new KeyInfo();
    	signedXml.KeyInfo.AddClause(new KeyInfoX509Data(certificate));
    	signedXml.ComputeSignature();
    	XmlElement xmlDigitalSignature = signedXml.GetXml();
    
    	xmlDoc.DocumentElement.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, true));
    	
    	if (xmlDoc.FirstChild is XmlDeclaration)
    		xmlDoc.RemoveChild(xmlDoc.FirstChild);
    }
    

    Passo 4: com os eventos assinados em mãos, removo todos as tags "evento" antigas que estava no xml que peguei do servidor inicialmente e insiro as novas tags já assinadas no lugar. Uso o seguinte código:

    XmlDocument xmlAssinado = montaEnvelopeComEventosAssiandos(eventos_assinados, xml_str);
    
    private static XmlDocument montaEnvelopeComEventosAssiandos(List<XmlDocument> eventos_assinados, string str_xml_antigo)
    {
    	XmlDocument xml = new XmlDocument();
    	xml.LoadXml(str_xml_antigo);
    	//removo todas as tags da tag "eventos" (ou seja todas as tags "evento")
    	xml.GetElementsByTagName("eventos")[0].RemoveAll();
    	
    	//concateno as tags "evento" com as tags filhas "eSocial" devidamente assinadas
    	string xmls_assinados = "";
    	foreach (XmlDocument evento in eventos_assinados)
    		xmls_assinados += evento.OuterXml;
    	
    	//adiciono as tags assinadas concatenadas na tag "eventos"
    	xml.GetElementsByTagName("eventos")[0].InnerXml = xmls_assinados;
    
    	return xml;
    }

    Ao final tenho o seguinte xml:

    <EnviarLoteEventos>
    	<loteEventos>
    		<eSocial
    			xmlns="http://www.esocial.gov.br/schema/lote/eventos/envio/v1_1_1"
    			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    			<envioLoteEventos grupo="1">
    				<ideEmpregador>
    					<tpInsc>1</tpInsc>
    					<nrInsc>07794493</nrInsc>
    				</ideEmpregador>
    				<ideTransmissor>
    					<tpInsc>1</tpInsc>
    					<nrInsc>07794493000128</nrInsc>
    				</ideTransmissor>
    				<eventos>
    					<evento Id="ID1077944930000002018121223112505568">
    						<eSocial
    							xmlns="http://www.esocial.gov.br/schema/evt/evtInfoEmpregador/v02_04_02">
    							<evtInfoEmpregador Id="ID1077944930000002018121223112505568">
    								<ideEvento>
    									<tpAmb>3</tpAmb>
    									<procEmi>1</procEmi>
    									<verProc>2_4_02</verProc>
    								</ideEvento>
    								<ideEmpregador>
    									<tpInsc>1</tpInsc>
    									<nrInsc>07794493</nrInsc>
    								</ideEmpregador>
    								<infoEmpregador>
    									<alteracao>
    										<idePeriodo>
    											<iniValid>2018-07</iniValid>
    										</idePeriodo>
    										<infoCadastro>
    											<nmRazao>U E AREOLINO LEONCIO DA SILVA</nmRazao>
    											<classTrib>99</classTrib>
    											<natJurid>3999</natJurid>
    											<indCoop>0</indCoop>
    											<indConstr>0</indConstr>
    											<indDesFolha>0</indDesFolha>
    											<indOptRegEletron>0</indOptRegEletron>
    											<indEntEd>S</indEntEd>
    											<indEtt>N</indEtt>
    											<contato>
    												<nmCtt>CARMINA FERNANDES DE SOUSA SOARES</nmCtt>
    												<cpfCtt>53665490359</cpfCtt>
    												<foneCel>86988290004</foneCel>
    												<email>CLENILDESFSILVA@GMAIL.COM</email>
    											</contato>
    											<softwareHouse>
    												<cnpjSoftHouse>10956042000154</cnpjSoftHouse>
    												<nmRazao>CONTANDO - SOFTWARES EMPRESARIAIS LTDA</nmRazao>
    												<nmCont>Helenaldo Soares de Carvalho</nmCont>
    												<telefone>1135224810</telefone>
    												<email>contador@helenaldo.com.br</email>
    											</softwareHouse>
    											<infoComplementares>
    												<situacaoPJ>
    													<indSitPJ>0</indSitPJ>
    												</situacaoPJ>
    											</infoComplementares>
    										</infoCadastro>
    									</alteracao>
    								</infoEmpregador>
    							</evtInfoEmpregador>
    							<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>[hash assinatura]</DigestValue>
    									</Reference>
    								</SignedInfo>
    								<SignatureValue>[hash assinatura]</SignatureValue>
    								<KeyInfo>
    									<X509Data>
    										<X509Certificate>[hash assinatura]</X509Certificate>
    									</X509Data>
    								</KeyInfo>
    							</Signature>
    						</eSocial>
    					</evento>
    					<evento Id="ID1077944930000002018121223112505636">
    						<eSocial
    							xmlns="http://www.esocial.gov.br/schema/evt/evtTabEstab/v02_04_02">
    							<evtTabEstab Id="ID1077944930000002018121223112505636">
    								<ideEvento>
    									<tpAmb>3</tpAmb>
    									<procEmi>1</procEmi>
    									<verProc>2_4_02</verProc>
    								</ideEvento>
    								<ideEmpregador>
    									<tpInsc>1</tpInsc>
    									<nrInsc>07794493</nrInsc>
    								</ideEmpregador>
    								<infoEstab>
    									<alteracao>
    										<ideEstab>
    											<tpInsc>1</tpInsc>
    											<nrInsc>07794493000128</nrInsc>
    											<iniValid>2018-07</iniValid>
    										</ideEstab>
    										<dadosEstab>
    											<cnaePrep>9430800</cnaePrep>
    											<aliqGilrat>
    												<aliqRat>2</aliqRat>
    												<fap>1.0000</fap>
    												<aliqRatAjust>2.0000</aliqRatAjust>
    											</aliqGilrat>
    											<infoTrab>
    												<regPt>0</regPt>
    												<infoApr>
    													<contApr>0</contApr>
    												</infoApr>
    												<infoPCD>
    													<contPCD>0</contPCD>
    												</infoPCD>
    											</infoTrab>
    										</dadosEstab>
    									</alteracao>
    								</infoEstab>
    							</evtTabEstab>
    							<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>[hash assinatura]</DigestValue>
    									</Reference>
    								</SignedInfo>
    								<SignatureValue>[hash assinatura]</SignatureValue>
    								<KeyInfo>
    									<X509Data>
    										<X509Certificate>[hash assinatura]</X509Certificate>
    									</X509Data>
    								</KeyInfo>
    							</Signature>
    						</eSocial>
    					</evento>
    				</eventos>
    			</envioLoteEventos>
    		</eSocial>
    	</loteEventos>
    </EnviarLoteEventos>

    Passo 5: coloco no envelope e envio para o servidor:

    xml do evelope:

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://www.esocial.gov.br/servicos/empregador/lote/eventos/envio/v2_4_02">
       <soapenv:Header/>
       <soapenv:Body>
          <EnviarLoteEventos>
             <loteEventos>
                <eSocial xmlns="http://www.esocial.gov.br/schema/lote/eventos/envio/v1_1_1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                	->código do xml [</envioLoteEventos>]
                </eSocial>
             </loteEventos>
          </EnviarLoteEventos>
       </soapenv:Body>
    </soapenv:Envelope>

    Alguém pode me dizer onde estou errando? Eu já tentei de tudo... :/

    segunda-feira, 17 de dezembro de 2018 13:32