2012-01-01 3 views
6

Как подключить сертификат при использовании s SqlConnection? От SqlConnection Connection String Parameter Keywords & Values, я знаю, что могу установить Encrypted на true, чтобы заставить (поощрять?) Использование SSL/TLS..Net SqlConnection, аутентификация сервера и привязка сертификата

Однако, чтобы соединить сертификат, я считаю, что нам нужно использовать ServerCertificateValidationCallback от ServicePointManager (образец кода, предложенный Arne Vajhøj для HTTP/HTTPS, был предложен ниже). Я не знаю, как провести проводку в PinCertificate (от ServicePointManager) до SqlConnection.

ОБНОВЛЕНИЕ: Говоря с Арне Ваджхой на microsoft.public.dotnet.languages.csharp, кажется, что у него не может быть необходимого контроля над соединением. Vajhøj предложил ссылку на Encrypting Connections to 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; 
} 
+0

Пример валидации сертификата в VB.NET: http://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/ 5f5af31c-74f2-4147-8b70-e9e8ec03c76a. Должно быть достаточно легко конвертировать. –

+0

В примере MSDN используются 'ServicePointManager' и' ServerCertificateValidationCallback' (вызывается 'MyCertValidationCb'). Его не отличается от образца, который я разместил. Я до сих пор не понимаю, как один из проводов 'ServerCertificateValidationCallback' в' SqlConnection'. – jww

+0

http://support.microsoft.com/default.aspx?scid=276553 помогает ли это? – King

ответ

0

, как о чем-то вроде:

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 
Смежные вопросы