Erro Assinatura / Metodo de consulta

386 views
Skip to first unread message

Anderson Pavan

unread,
Feb 7, 2025, 6:25:12 AMFeb 7
to wsnfsecampinas
Bom dia Pessoal, estou migrando a aplicativo e iniciei por uma método de consulta, no soapUI, está dando erro de assinatura, alguém consegue me ajudar em o que está errado, segue xml:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:nfse="http://nfse.abrasf.org.br"
                  xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soapenv:Header/>
<soapenv:Body>
<nfse:ConsultarNfseFaixa>
<ConsultarNfseFaixaEnvio Id="123456">
<Prestador>
<CpfCnpj>
<Cnpj>XXXXXXXXXXXXXX</Cnpj>
</CpfCnpj>
<InscricaoMunicipal>XXXXXXX</InscricaoMunicipal>
</Prestador>
<Faixa>
<NumeroNfseInicial>870</NumeroNfseInicial>
<NumeroNfseFinal>871</NumeroNfseFinal>
</Faixa>
<Pagina>1</Pagina>
</ConsultarNfseFaixaEnvio>
</nfse:ConsultarNfseFaixa>
</soapenv:Body>
<nfse:Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<xd:SignedInfo>
<xd:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<xd:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<xd:Reference URI="#123456">
<xd:Transforms>
<xd:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<xd:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
</xd:Transforms>
<xd:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<xd:DigestValue>bv2429aU+rbtV1EHPs3yElsRNo0=</xd:DigestValue>
</xd:Reference>
</xd:SignedInfo>
<xd:SignatureValue>cvkFKCEuvAntBYEkatPyk4aAQQN8W4PYqpTS+P4dpf5ROFSxkx/KvoHAdNA8yEZqyMAFa1sjRoHIz1RKTC4OELZUEBMIMwClbxeFL9afAzUId+a7jE3Voj6yjNdUBOFxjsrMjcBiF8ihq94zX5M3P7tdabXyt5PUnpUDfahVy73XPA8YI7vCVPaWvvA5rQOIu4/hEGnh4lrdM6p1v+ZXskLzp6fWxaJsP+nuNAB+2BERHTe4feoIFJoxomZpYC4fykAOjK1XhO9nvrCGPts4xFUBjShG3/plY5oCHakZY0RQHsYo4YE63SQYez25HHW6JphrplUpll0vktVnxrmaOA==</xd:SignatureValue>
<xd:KeyInfo>
<xd:X509Data>
<xd:X509Certificate>MIIH+DCCBeCgAwIBAgIIacy39vcNYWEwDQYJKoZIhvcNAQELBQAwdjELMAkGA1UEBhMCQlIxEzARBgNVBAoTCklDUC1CcmFzaWwxNjA0BgNVBAsTLVNlY3JldGFyaWEgZGEgUmVjZWl0YSBGZWRlcmFsIGRvIEJyYXNpbCAtIFJGQjEaMBgGA1UEAxMRQUMgU0FGRVdFQiBSRkIgdjUwHhcNMjUwMTI5MTIzNTU4WhcNMjYwMTI5MTIzNTU4WjCCAQYxCzAJBgNVBAYTAkJSMRMwEQYDVQQKEwpJQ1AtQnJhc2lsMQswCQYDVQQIEwJTUDERMA8GA1UEBxMIQ0FNUElOQVMxNjA0BgNVBAsTLVNlY3JldGFyaWEgZGEgUmVjZWl0YSBGZWRlcmFsIGRvIEJyYXNpbCAtIFJGQjEWMBQGA1UECxMNUkZCIGUtQ05QSiBBMTEXMBUGA1UECxMOMTE4MjU4MDIwMDAxNTcxEzARBgNVBAsTCnByZXNlbmNpYWwxRDBCBgNVBAMTO1NPQ0lFREFERSBDQU1QSU5FSVJBIERFIEVEVUNBQ0FPIEUgSU5TVFJVQ0FPOjQ2MDIwMzAxMDAwMTg4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoEZY0BJ9TLqLfQQaZdCjpB615Ug4jtVgRMCsITE/488W+OMJ0LkyZyyWFH/etYG3/kDbli6OVYK/NfuM1Wr1IOLlirAGeJ0+DKBA3Y/N9Qf43+oJs99V2q+vXJkaFS2EeSmXQ3tQnepuLw2Qh1dVhgQKNcWekM0HMe5EwQUmLKfxLbDvcsPGXiYMmrR1r838tAAWAo9K2Svw7g1uyvJ0pt6RY0X7DWI2zq0pCKGk361n94RpFkVoBiGLunL74Ax7TgSUlGCMLO6uUDgrDDyqxJEuogOVWEyV2TFjHeq1h5DfwKUxbDlPQq6AIAQnA5lmTia3suaqVtO3WPx9axhMAQIDAQABo4IC9jCCAvIwHwYDVR0jBBgwFoAUKV5L1UZMu/4Wp2PBHcQm8t3Y8wUwDgYDVR0PAQH/BAQDAgXgMGkGA1UdIARiMGAwXgYGYEwBAgEzMFQwUgYIKwYBBQUHAgEWRmh0dHA6Ly9yZXBvc2l0b3Jpby5hY3NhZmV3ZWIuY29tLmJyL2FjLXNhZmV3ZWJyZmIvZHBjLWFjc2FmZXdlYnJmYi5wZGYwga4GA1UdHwSBpjCBozBPoE2gS4ZJaHR0cDovL3JlcG9zaXRvcmlvLmFjc2FmZXdlYi5jb20uYnIvYWMtc2FmZXdlYnJmYi9sY3ItYWMtc2FmZXdlYnJmYnY1LmNybDBQoE6gTIZKaHR0cDovL3JlcG9zaXRvcmlvMi5hY3NhZmV3ZWIuY29tLmJyL2FjLXNhZmV3ZWJyZmIvbGNyLWFjLXNhZmV3ZWJyZmJ2NS5jcmwwgbcGCCsGAQUFBwEBBIGqMIGnMFEGCCsGAQUFBzAChkVodHRwOi8vcmVwb3NpdG9yaW8uYWNzYWZld2ViLmNvbS5ici9hYy1zYWZld2VicmZiL2FjLXNhZmV3ZWJyZmJ2NS5wN2IwUgYIKwYBBQUHMAKGRmh0dHA6Ly9yZXBvc2l0b3JpbzIuYWNzYWZld2ViLmNvbS5ici9hYy1zYWZld2VicmZiL2FjLXNhZmV3ZWJyZmJ2NS5wN2Iwgb4GA1UdEQSBtjCBs4EfTUFOVEVORURPUkFAUFVDLUNBTVBJTkFTLkVEVS5CUqAiBgVgTAEDAqAZExdKT1NFIEVEVUFSRE8gTUVTQ0hJQVRUSaAZBgVgTAEDA6AQEw40NjAyMDMwMTAwMDE4OKA4BgVgTAEDBKAvEy0wMTAzMTk2MzA0MjQ4MTI2ODE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDCgFwYFYEwBAwegDhMMMDAwMDAwMDAwMDAwMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4ICAQBGvqlqodb6log38imRLxZf3XNzFAqZIFgTONhDFrKCx9+3nA/fushggAIbGOdi64Ke+Z0iwAo399sAWAYRA1aaZtLanSsQWM77nWbccN2f+2vbY9i7EnAmd6JIFIDn+UsrdadFKdgTB8fT/6WNQy+HbkgPjwPATNBBMO6P0JSRv1NDQqBz/RpHgxfPAcFClHO+OVtfUDVKE8x1FdhwznSf2O/mJ27N/p/c7BQjZn/LrgQF1eU0rytg1pcjfXvcGyF5DyHlSguR4qonYqxHBsP3FXg59VWLUWantmjQAsyjJ2wQyGx3uta3ocfxMievxOzSbIjHdgmWh4eGunR92WlS7fVCv+J8KGxsY7/exgmAqU7pTsYSGQ70rLQTjGCZg8pAp9nXwoG6e2Fc4n5QD9hypft3vzbeuX8Wfu7W3d5hqqWdYU+i4Bo4X6ulAOEp6eLZNjPTsYilIOB1tjJ6XtJJP+lZY9wWxlUUFgLuU35aRY6nOaFw/ReFOhrDX8eZ8STrnFaVlWyMPjTT7beYeYDg/UUDPwMRGf4fXfJ9BhJ4t6ZlYShdY6k+dA32vrLauyMgE4V9bCYRyPK018uYzaX/mG8fiZi7DlraMDGEeQHd8YrWn6YaPOipYyZX+QXVM9WfCaeC/73QkX6A534mWlC8xqlz1r5ir8bUVeEbevP3tQ==</xd:X509Certificate>
</xd:X509Data>
</xd:KeyInfo>
</nfse:Signature>
</soapenv:Envelope>

Luiz Henrique Felix

unread,
Feb 10, 2025, 6:24:22 AMFeb 10
to wsnfsecampinas
Bom dia.
Ainda não desenvolvi esse método de consultas, mas me parece que a assinatura está fora do body, e o correto é estar dentro. Como o Id fica na tag ConsultarNfseFaixaEnvio, provavelmente a assinatura deve ficar entre as tags "</ConsultarNfseFaixaEnvio>" e "</nfse:ConsultarNfseFaixa>". 

Tente dessa forma e veja se vai parar de dar o erro.

Leo Zagatto

unread,
Feb 11, 2025, 9:34:16 AMFeb 11
to wsnfsecampinas
Bom dia a todos,

Estou com o mesmo problema de erro de assinatura enviando pelo soapui nesse formato:
  <soapenv:Body>
    <nfse:ConsultarLoteRps>
      <ConsultarLoteRpsEnvio>
        <Prestador>
          <CpfCnpj>
            <Cnpj>xxxxxxxx</Cnpj>
          </CpfCnpj>
          <InscricaoMunicipal>xxxxx</InscricaoMunicipal>
        </Prestador>
        <Protocolo>xxxxxx</Protocolo>
        <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/2000/09/xmldsig#rsa-sha1" />
            <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/2000/09/xmldsig#sha1" />
              <DigestValue>xxxxxxxxxx</DigestValue>
            </Reference>
          </SignedInfo>
          <SignatureValue>xxxxx</SignatureValue>
          <KeyInfo>
            <X509Data>
              <X509Certificate>xxxxxxxxxxxxx</X509Certificate>
            </X509Data>
          </KeyInfo>
        </Signature>
      </ConsultarLoteRpsEnvio>
    </nfse:ConsultarLoteRps>
  </soapenv:Body>
</soapenv:Envelope>

Segui o modelo que haviam passado onde a tag <Signature> teria que estar logo depois da tag  <Protocolo>, porém ainda me retorna o problema de assinatura.

Alguém que ja tenha passado com sucesso a consulta pelo wsdl poderia me ajudar?

Obrigado pela atenção.

Att. Leonardo Zagatto

Leo Vieira

unread,
Feb 12, 2025, 8:52:25 AMFeb 12
to wsnfsecampinas
Bom dia,

Estou usando esse método em C# para fazer a assinatura dos xml, consegui fazer as requisições via SOAP UI, veja se te ajuda.

public static void AssinarXML(XmlDocument xmlDoc, X509Certificate2 certificado, string tag, string id = "")
{
    // Verifica se a tag existe no XML
    XmlElement elemento = xmlDoc.GetElementsByTagName(tag)[0] as XmlElement;
    if (elemento == null)
    {
        throw new Exception($"Tag {tag} não encontrada no XML.");
    }

    // Inicializa o SignedXml
    SignedXml signedXml = new SignedXml(xmlDoc);

    // Obtém a chave privada do certificado
    RSACryptoServiceProvider rsaProvider = certificado.PrivateKey as RSACryptoServiceProvider;
    if (rsaProvider == null)
    {
        throw new Exception("Certificado não contém chave privada.");
    }

    // Definindo a chave de assinatura
    signedXml.SigningKey = certificado.PrivateKey;

    // Criando o SignedInfo
    SignedInfo signedInfo = new SignedInfo
    {
        CanonicalizationMethod = SignedXml.XmlDsigCanonicalizationUrl, // Canonicalização do XML
        SignatureMethod = SignedXml.XmlDsigRSASHA1Url // Método de assinatura SHA1
    };

    // Se o id não for informado, iremos assinar o próprio elemento diretamente
    string uri = string.IsNullOrEmpty(id) ? "" : $"#{id}";

    // Criando a referência para o elemento a ser assinado
    Reference reference = new Reference
    {
        Uri = uri  // Se id vazio, será aplicada à tag inteira
    };

    // Adicionando a transformação (enveloped e canonicalização)
    reference.AddTransform(new XmlDsigEnvelopedSignatureTransform()); // Transformação para assinatura envelopada
    reference.AddTransform(new XmlDsigC14NTransform()); // Canonicalização

    // Adiciona a referência ao SignedInfo
    signedInfo.AddReference(reference);

    // Agora, adicionamos a SignedInfo ao SignedXml corretamente
    signedXml.AddReference(reference);

    // Adicionando a informação da chave (somente o certificado x509, sem outras tags)
    KeyInfo keyInfo = new KeyInfo();
    keyInfo.AddClause(new KeyInfoX509Data(certificado, X509IncludeOption.EndCertOnly));

    signedXml.KeyInfo = keyInfo;

    // Calculando a assinatura
    signedXml.ComputeSignature();

    // Obtendo a assinatura XML gerada
    XmlElement xmlDigitalSignature = signedXml.GetXml();

    // Verifica se deve adicionar ao nó pai ou ao próprio elemento
    if (tag == "ConsultarLoteRpsEnvio")
    {
        elemento.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, true));
    }
    else
    {
        elemento.ParentNode.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, true));
    }
}

As chamadas ficam assim

// EnviarLoteRpsSincronoEnvio
XmlSigner.AssinarXML(xmlLote, certificado, "InfDeclaracaoPrestacaoServico", "inf7");

// ConsultarLoteRpsEnvio
XmlSigner.AssinarXML(xmlLote, certificado, "ConsultarLoteRpsEnvio");

// CancelarNfseEnvio
XmlSigner.AssinarXML(xmlLote, certificado, "InfPedidoCancelamento");

Leo Zagatto

unread,
Feb 12, 2025, 9:14:33 AMFeb 12
to wsnfsecampinas
Bom dia Leo, tudo bem?

Vendo seu código eu percebi meu erro, eu estava assinado junto com a tag <consultarloteRps>, o que na verdade deveria assinar somente a partir da tag  ConsultarLoteRpsEnvio... Agora deu certo, muito obrigado pela ajuda, salvou aqui.

Obrigado pela atenção

Leo Vieira

unread,
Feb 12, 2025, 9:20:10 AMFeb 12
to Leo Zagatto, wsnfsecampinas

Ótima notícia, eu também cometi esse mesmo erro, ai depois de bater bastante a cabeça consegui resolver 👊🏻


--
You received this message because you are subscribed to a topic in the Google Groups "wsnfsecampinas" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/wsnfsecampinas/yGmwwHw8sw8/unsubscribe.
To unsubscribe from this group and all its topics, send an email to wsnfsecampina...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/wsnfsecampinas/85267483-2203-4d10-adb0-c57ab045ec91n%40googlegroups.com.

Anderson Pavan

unread,
Feb 20, 2025, 7:02:53 AMFeb 20
to wsnfsecampinas
Mesmo implementando a assinatura como indicado tanto na aplicação como no postman estou recebendo retorno 500 com a mensagem de erro de assinatura, segue em anexo xml enviado  e print do postman.


Alguém consegue ver o que posso estar cometendo de erro, por favor.
novo 7.xml
Captura de tela 2025-02-20 090149.png

Anderson Pavan

unread,
Feb 25, 2025, 7:05:37 AMFeb 25
to wsnfsecampinas
Bom dia Pessoal, consegui enviar o metodo ConsultarNfseporFaixa.

Estou tentando fazer a assinatura do método RecepcionarLoteRpsSincrono, mas quando vou assinar passando a o campo id de referencia a função de assinatura adiciona o reference.uri, mas ao tentar calcular a assinatura da um erro: Elemento Reference mal formado, alguém ja viu isso e conseguiu resolver?

Muito Obrigado por enqunato 
Reply all
Reply to author
Forward
0 new messages