PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Connexion Npgsql avec des certificats ssl dans l'api Web .net core

J'ai trouvé une solution à ce problème et j'ai pensé à la publier ici, ce qui pourrait aider d'autres personnes confrontées au même problème.

Cela n'a pas fonctionné avec les fichiers .pem. Je l'ai converti en un fichier .pfx à l'aide de la commande ci-dessous et il a commencé à fonctionner correctement.

openssl pkcs12 -inkey C:\Certs\client-key.pem -in C:\Certs\client-cert.pem -export -out C:\Certs\client-cert.pfx

Référence :Prise en charge de l'authentification par certificat

MODIFIER

Au lieu de créer le fichier pfx physique, j'ai pu combiner les deux fichiers pem et le faire fonctionner. L'extrait de code est donné ci-dessous pour que quelqu'un puisse s'y référer à l'avenir.

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;
    }