.Net SqlConnection, проверка подлинности сервера и закрепление сертификата - PullRequest
6 голосов
/ 01 января 2012

Как закрепить сертификат при использовании s SqlConnection? Из SqlConnection Строка подключения Ключевые слова и значения параметра , я знаю, что могу установить Encrypted в true для принудительного (поощрения?) Использования SSL / TLS.

Однако, чтобы закрепить сертификат, я считаю, что нам нужно использовать ServerCertificateValidationCallback из ServicePointManager (пример кода ниже был предложен Арне Ваджхой для HTTP / HTTPS). Мне не понятно, как подключить PinCertificate (от ServicePointManager) к SqlConnection.

ОБНОВЛЕНИЕ: Разговаривая с Арне Ваджхой на microsoft.public.dotnet.languages.csharp, оказалось, что невозможно установить желаемый контроль над соединением. Ваджхой предложил ссылку на Шифрование соединений с SQL Server .

public static void Main(string[] args)
{
  ServicePointManager.ServerCertificateValidationCallback = PinCertificate;
  WebRequest wr = WebRequest.Create("https://www.google.com/");

  wr.GetResponse();
}

public static bool PinCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
  byte[] chash = certificate.GetCertHash();

  StringBuilder sb = new StringBuilder(chash.Length * 2);
  foreach (byte b in chash)
    sb.AppendFormat("{0:X2}", b);

  // Verify against known SHA1 thumb print of the certificate
  String hash = sb.ToString();
  if (hash != "C1956DC8A7DFB2A5A56934DA09778E3A11023358")
    return false;

  return true;
}

1 Ответ

0 голосов
/ 08 января 2012

как насчет чего-то вроде:

System.Net.ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateCertificate)

Private Function ValidateCertificate(ByVal sender As Object, ByVal certificate As X509Certificate, ByVal chain As X509Chain, ByVal sslPolicyErrors As SslPolicyErrors) As Boolean
    'Return True to force the certificate to be accepted.
    Return True
End Function
...