在以下情形中:
带有服务器/客户端身份验证证书的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
并检查其中使用的证书是否包含我需要的密钥使用扩展名吗?