Skip to content

Conversation

@lucasmoraes804
Copy link
Contributor

O processo de assinatura foi atualizado para usar a chave RSA do certificado digital. Alterar para forma "moderna", compatível com provedores CNG e CSP

O processo de assinatura foi atualizado para usar a chave RSA do certificado digital.
@lucasmoraes804
Copy link
Contributor Author

@danilobreda se poder analisar. Esse é um problema que está ocorrendo com certificados novos A3 principalmente. Como o provedores são os mais novos, não compatível com certificadoDigital.PrivateKey e ocasionava o erro System.Security.Cryptography.CryptographicException: Tipo de provedor inválido especificado.

@marcosgerene
Copy link
Collaborator

marcosgerene commented Dec 3, 2025

@lucasmoraes804 tive este mesmo problema que você relatou com A3

System.Security.Cryptography.CryptographicException: Tipo de provedor inválido especificado.

Meu medo nesse tipo de mudança é quebrar o legado. Neste tipo de cenário tendo a ser mais "defensivo". Analise, por favor, esta solução:

SignedXml docXml = new SignedXml(documento);

// Pega a chave RSA de forma "moderna", compatível com CNG e CSP
RSA rsa = certificadoDigital.GetRSAPrivateKey();

if (rsa == null)
{
    // Fallback para o método legado
    if (certificadoDigital.PrivateKey is RSA rsaLegacy)
    {
        rsa = rsaLegacy;
    }
    else
    {
        throw new Exception("O certificado não possui chave privada RSA compatível.");
    }
}

docXml.SigningKey = rsa;
docXml.SignedInfo.SignatureMethod = signatureMethod;

Copilot finished reviewing on behalf of marcosgerene December 3, 2025 01:46

This comment was marked as resolved.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants