Me encuentro desarrollando una aplicación (Winform en C#) la cual se conecta con PostgreSQL utilizando la librería Npgsql, actualmente requiero una conexión SSL y he implementado el ejemplo como se muestra acá [URL="http://fxjr.blogspot.com/2010/04/using-ssl-client-certificates-with.html"]http://fxjr.blogspot.com/2010/04/using-ssl-client-certificates-with.html[/URL] (El código también lo coloco más abajo) pero recibo un error al momento de abrir la conexión el cual dice:
authentication or decryption failed
Aunque la conexión ya la he probado por línea de comandos (desde windows utilizando el comando psql.exe) con los certificados y funciona bien no logro determinar en donde se encuentra mi fallo..
Código:
Muchas gracias por la atención. String nueva_cadena = "server=192.168.194.219;" + "USER ID=usuario1;" + "PASSWORD=password1;" + "PROTOCOL=3;" + "DATABASE=qlocal;" + "SSL=true;" + "SSLMODE=Require;"; NpgsqlConnection nueva_conexion = new NpgsqlConnection(nueva_cadena); nueva_conexion.ProvideClientCertificatesCallback += new ProvideClientCertificatesCallback(MyProvideClientCertificates); nueva_conexion.CertificateSelectionCallback += new CertificateSelectionCallback(MyCertificateSelectionCallback); nueva_conexion.CertificateValidationCallback += new CertificateValidationCallback(MyCertificateValidationCallback); nueva_conexion.PrivateKeySelectionCallback += new PrivateKeySelectionCallback(MyPrivateKeySelectionCallback); nueva_conexion.Open(); static void MyProvideClientCertificates(X509CertificateCollection clienteCertis) { X509Certificate cert = new X509Certificate(@"D:\postgresql.crt"); clienteCertis.Add(cert); } static X509Certificate MyCertificateSelectionCallback(X509CertificateCollection clienteCertis, X509Certificate serverCerti, string hostDestino, X509CertificateCollection serverRequestedCertificates) { return clienteCertis[0]; } static AsymmetricAlgorithm MyPrivateKeySelectionCallback(X509Certificate certificate, string targetHost) { PrivateKey key = null; try { key = PrivateKey.CreateFromFile(@"D:\postgresql.key"); } catch (CryptographicException ex) { Console.WriteLine(); Console.WriteLine(); Console.WriteLine(ex); Console.WriteLine(); Console.WriteLine(); } if (key == null) return null; return key.RSA; } #endregion static bool MyCertificateValidationCallback(X509Certificate certificate, int[] certificateErrors) { System.Console.WriteLine(certificateErrors[0]); return true; }