У меня возникли проблемы с установкой подключения к базе данных PostgreSQL, которая настроена только для принятия действительного сертификата SSL. Я могу подключиться с помощью pgAdmin III с соответствующим сертификатом и ключом, но я не могу заставить его работать с Npgsql. Когда я пытаюсь открыть соединение с базой данных, я получаю System.IO.IOException: The authentication or decryption has failed
. Вот мой код:Ошибки SSL при использовании проверки подлинности Npgsql и SSL
NpgsqlConnectionStringBuilder csb = new NpgsqlConnectionStringBuilder();
csb.Database = "database";
csb.Host = "psql-server";
csb.UserName = "dreamlax"; // must match Common Name of client certificate
csb.SSL = true;
csb.SslMode = SslMode.Require;
NpgsqlConnection conn = new NpgsqlConnection(csb.ConnectionString);
conn.ProvideClientCertificatesCallback += new ProvideClientCertificatesCallback(Database_ProvideClientCertificatesCallback);
conn.CertificateSelectionCallback += new CertificateSelectionCallback(Database_CertificateSelectionCallback);
conn.CertificateValidationCallback += new CertificateValidationCallback(Database_CertificateValidationCallback);
conn.PrivateKeySelectionCallback += new PrivateKeySelectionCallback(Database_PrivateKeySelectionCallback);
conn.Open(); //System.IO.IOException: The authentication or decryption has failed
Обратные вызовы определяются следующим образом:
static void Database_ProvideClientCertificates(X509CertificateCollection clienteCertis)
{
X509Certificate2 cert = new X509Certificate2("mycert.pfx", "passphrase");
clienteCertis.Add(cert);
}
static X509Certificate Database_CertificateSelectionCallback(X509CertificateCollection clientCerts, X509Certificate serverCert, string host, X509CertificateCollection serverRequestedCerts)
{
return clienteCertis[0];
}
static AsymmetricAlgorithm Database_PrivateKeySelectionCallback(X509Certificate cert, string host)
{
X509Cerficate2 thisCert = cert as X509Certificate2;
if (cert != null)
return cert.PrivateKey;
else
return null;
}
static bool MyCertificateValidationCallback(X509Certificate certificate, int[] certificateErrors)
{
// forego server validation for now
return true;
}
Я установить контрольные точки, подтверждающие, что каждый обратный вызов был что-то действительное возвращение, но все-таки IOException брошен.
Благодарим вас за отзыв! Не могли бы вы создать запрос на растяжение с вашим патчем? http://git.npgsql.org Это было бы очень полезно для тех, кто получает ошибки при использовании Npgsql и SSL. Заранее спасибо. –
@FranciscoJunior: Привет, я создал запрос на pull. Я новичок в git, поэтому не уверен, правильно ли я это сделал. – dreamlax