Assinar XML utilizando SHA-1

Rodrigo Cristiano Lara Junior 0 Pontos de reputação
2024-11-25T17:16:47.6466667+00:00

É possível assinar um XML com um certificado A1 utilizando o algoritmo SHA-1 no ASP.NET Core?

ASP.NET
ASP.NET
Um conjunto de tecnologias no .NET Framework para criar aplicativos Web e serviços Web XML.
9 perguntas
C#
C#
Uma linguagem de programação fortemente tipada e orientada a objetos com raízes na família C de linguagens e que inclui suporte para programação orientada a componentes.
26 perguntas
0 comentários Sem comentários
{count} votos

3 respostas

Classificar por: Mais útil
  1. Jonathan Pereira Castillo 13,735 Pontos de reputação Fornecedor da Microsoft
    2024-11-26T21:33:26.4766667+00:00

    Oi Rodrigo Cristiano Lara Junior!

    Bem-vindo ao Microsoft Q&A!

    Sim, é possível assinar um XML com um certificado A1 utilizando o algoritmo SHA-1 no ASP.NET Core. Você pode usar as classes do namespace System.Security.Cryptography.Xml para realizar essa tarefa. Aqui está um exemplo básico de como fazer isso:

    Instale o pacote NuGet:

    • Adicione o pacote System.Security.Cryptography.Xml ao seu projeto ASP.NET Core.

    Código para assinar o XML:

    using System.Security.Cryptography;
    using System.Security.Cryptography.Xml;
    using System.Xml;
    public void SignXml(XmlDocument xmlDoc, RSA rsaKey)
    {
        // Verifique os argumentos.
        if (xmlDoc == null)
            throw new ArgumentException(nameof(xmlDoc));
        if (rsaKey == null)
            throw new ArgumentException(nameof(rsaKey));
        // Crie um objeto SignedXml.
        SignedXml signedXml = new SignedXml(xmlDoc)
        {
            SigningKey = rsaKey
        };
        // Crie uma referência para ser assinada.
        Reference reference = new Reference
        {
            Uri = ""
        };
        // Adicione uma transformação envelopada à referência.
        XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
        reference.AddTransform(env);
        // Adicione a referência ao objeto SignedXml.
        signedXml.AddReference(reference);
        // Compute the signature.
        signedXml.ComputeSignature();
        // Obtenha a representação XML da assinatura e salve-a em um objeto XmlElement.
        XmlElement xmlDigitalSignature = signedXml.GetXml();
        // Acrescente o elemento ao documento XML.
        xmlDoc.DocumentElement.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, true));
    }
    

    Uso do código:

    // Carregue o documento XML.
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load("caminho/para/seu/documento.xml");
    // Carregue o certificado A1.
    X509Certificate2 cert = new X509Certificate2("caminho/para/seu/certificado.pfx", "senha");
    // Obtenha a chave privada do certificado.
    RSA rsaKey = cert.GetRSAPrivateKey();
    // Assine o documento XML.
    SignXml(xmlDoc, rsaKey);
    // Salve o documento assinado.
    xmlDoc.Save("caminho/para/seu/documento_assinado.xml");
    

    Este exemplo mostra como carregar um documento XML, assinar digitalmente usando um certificado A1 e salvar o documento assinado. Certifique-se de ajustar os caminhos e senhas conforme necessário.

    Espero que essas dicas ajudem a resolver o problema! Se precisar de mais assistência, estou à disposição.

    Saudações

    Jonathan.

    -----------

    Sua opinião é muito importante para nós! Se esta resposta resolveu sua consulta, por favor clique em ‘YES‘. Isso nos ajuda a melhorar continuamente a qualidade e relevância de nossas soluções. Obrigado pela sua colaboração!


  2. Jonathan Pereira Castillo 13,735 Pontos de reputação Fornecedor da Microsoft
    2024-11-28T17:00:50.8166667+00:00

    Oi Rodrigo Cristiano Lara Junior!,

    O objetivo desta mensagem é verificar as informações fornecidas. Se tiver mais atualizações sobre este assunto, por favor, não hesite em responder neste mesmo tópico.

    Cuidadosamente                 

    Jonathan

    -----------

    Sua opinião é muito importante para nós! Se esta resposta resolveu sua consulta, por favor clique em ‘YES‘. Isso nos ajuda a melhorar continuamente a qualidade e relevância de nossas soluções. Obrigado pela sua colaboração!

    0 comentários Sem comentários

  3. Jonathan Pereira Castillo 13,735 Pontos de reputação Fornecedor da Microsoft
    2024-12-24T17:24:09.4933333+00:00

    Bom dia Rodrigo Cristiano Lara Junior!,

    Conforme as informações anteriormente fornecidas, o objetivo desta mensagem é realizar uma verificação das mesmas. Caso possua novas atualizações referentes a este assunto, por favor, sinta-se à vontade para responder neste mesmo tópico.

    Atenciosamente,

    Jonathan

    -----------

    Sua opinião é muito importante para nós! Se esta resposta resolveu sua consulta, por favor clique em ‘YES‘. Isso nos ajuda a melhorar continuamente a qualidade e relevância de nossas soluções. Obrigado pela sua colaboração!

    0 comentários Sem comentários

Sua resposta

As respostas podem ser marcadas como Respostas Aceitas pelo autor da pergunta, o que ajuda os usuários a saber a resposta que resolveu o problema do autor.