2012-01-01 38 views
6

Làm cách nào để ghim chứng chỉ khi sử dụng s SqlConnection? Từ SqlConnection Connection String Parameter Keywords & Values, tôi biết tôi có thể đặt Encrypted thành true để buộc (khuyến khích?) Sử dụng SSL/TLS..Net SqlConnection, Xác thực Máy chủ và Ghim Chứng chỉ

Tuy nhiên, để ghim chứng chỉ, tôi tin rằng chúng tôi cần sử dụng ServerCertificateValidationCallback từ ServicePointManager (mã mẫu bên dưới được cung cấp bởi Arne Vajhøj cho HTTP/HTTPS). Tôi không rõ cách liên kết theo số điện thoại PinCertificate (từ ServicePointManager) đến SqlConnection.

CẬP NHẬT: Nói chuyện với Arne Vajhøj trên microsoft.public.dotnet.languages.csharp, có vẻ như không thể kiểm soát kết nối mong muốn. Vajhøj cung cấp liên kết đến 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

Một ví dụ về xác nhận chứng chỉ trong VB.NET: http://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/ 5f5af31c-74f2-4147-8b70-e9e8ec03c76a. Nên đủ dễ dàng để chuyển đổi. –

+0

Ví dụ MSDN sử dụng 'ServicePointManager' và' ServerCertificateValidationCallback' (gọi 'MyCertValidationCb'). Nó không khác với mẫu tôi đã đăng. Tôi vẫn chưa rõ ràng về cách một dây 'ServerCertificateValidationCallback' thành một' SqlConnection'. – jww

+0

http://support.microsoft.com/default.aspx?scid=276553 sự trợ giúp này có hữu ích không? – King

Trả lời

0

thế nào về một cái gì đó như:

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 
Các vấn đề liên quan