从SQL连接验证证书

时间:2015-01-23 13:47:19

标签: c# sql-server encryption x509certificate sqlconnection

在以下情形中:

  • 带有服务器/客户端身份验证证书的SQL Server 2012。此证书用于强制加密连接。这似乎有效,因为当我启用/禁用强制加密选项时,我通过运行SQL语句select * from sys.dm_exec_connections看到加密选项设置为true / false。

  • 客户端计算机必须验证SqlConnection是否在使用服务器身份验证密钥的有效证书下完成。

我找到了一些关于ServicePointManager的信息,但我无法使其与SqlConnection一起使用。

ServicePointManager.ServerCertificateValidationCallback = PinCertificate;
WebRequest wr = WebRequest.Create("https://www.google.com/");
wr.GetResponse();

.....

private bool PinCertificate(object sender, X509Certificate cert,
                                      X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    byte[] chash = certificate.GetCertHash();
    //.... this certificate contains the info ...
    var enhancedKeyExtensions = cert.Extensions.OfType<X509EnhancedKeyUsageExtension>().FirstOrDefault();
    bool valid = false;

    if (enhancedKeyExtensions != null)
    {
        X509EnhancedKeyUsageExtension ext = (X509EnhancedKeyUsageExtension)enhancedKeyExtensions;
        OidCollection oids = ext.EnhancedKeyUsages;

        foreach (Oid oid in oids)
        {
            valid = oid.Value.Equals("1.3.6.1.5.5.7.3.1");

            if (valid)
            {
                MessageBox.Show("OK!");
                break;
            }
        }
    }

    if (!valid)
        MessageBox.Show("No server authentification found!");
}

知道如何建立SqlConnection并检查其中使用的证书是否包含我需要的密钥使用扩展名吗?

0 个答案:

没有答案