PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Conexão Npgsql com certificados SSL no .net core web api


Eu tenho uma solução para isso e pensei em publicá-la aqui, o que pode ajudar outras pessoas que estão enfrentando o problema semelhante.

Não funcionou com arquivos .pem. Eu o converti para um arquivo .pfx usando o comando abaixo e ele começou a funcionar bem.
openssl pkcs12 -inkey C:\Certs\client-key.pem -in C:\Certs\client-cert.pem -export -out C:\Certs\client-cert.pfx

Referência:Suporte de autenticação de certificado

EDITAR

Em vez de criar o arquivo pfx físico, consegui combinar os dois arquivos pem e funcionou. O trecho de código é fornecido abaixo para referência futura.
public X509Certificate2 GetCombinedCertificateAndKey(string certificatePath, string privateKeyPath)
    {
        using var publicKey = new X509Certificate2(certificatePath);

        var privateKeyText = System.IO.File.ReadAllText(privateKeyPath);
        var privateKeyBlocks = privateKeyText.Split("-", StringSplitOptions.RemoveEmptyEntries);
        var privateKeyBytes = Convert.FromBase64String(privateKeyBlocks[1]);
        using var rsa = RSA.Create();

        if (privateKeyBlocks[0] == "BEGIN PRIVATE KEY")
        {
            rsa.ImportPkcs8PrivateKey(privateKeyBytes, out _);
        }
        else if (privateKeyBlocks[0] == "BEGIN RSA PRIVATE KEY")
        {
            rsa.ImportRSAPrivateKey(privateKeyBytes, out _);
        }

        var keyPair = publicKey.CopyWithPrivateKey(rsa);
        var Certificate = new X509Certificate2(keyPair.Export(X509ContentType.Pfx));
        return Certificate;
    }