【发布时间】:2012-10-19 12:15:29
【问题描述】:
我的应用程序需要与 SQL Server 2008 建立安全连接。在服务器端启用“强制加密”后,以下是我的 C# 应用程序的连接字符串。
Initial Catalog=emp_test;Persist Security Info=True;User ID=sa;Password=***;Data Source=172.21.70.94;Provider=SQLOLEDB;Use Encryption for Data=True;Trust Server Certificate=True;
我没有在服务器中提供任何证书 - 因此我给了 Trust Server Certificate=True,因此自签名服务器证书不会被验证。
但未建立连接并出现以下错误。
数据库错误:[DBNETLIB][ConnectionOpen (SECDoClientHandshake()).]SSL 安全错误。
没有与安全相关的两个属性,它可以正常工作。
我需要进行哪些更改才能使其正常工作?
【问题讨论】:
-
你能帮我试试这个吗?
Initial Catalog=emp_test;Persist Security Info=True;User ID=sa;Password=***;Data Source=172.21.70.94;Provider=SQLOLEDB;Encrypt=yes; -
嘿 BigM,如果我给 Encrypt=yes,则建立连接,我认为如果不给 TrustServerCertificate 就不会发生这种情况。因此,它从未考虑过该属性。
-
请参考这篇文章(stackoverflow.com/questions/3674160/…),它清楚地表明
Encrypt = yes使用了证书。 -
根据该帖子上的答案,您还可以将
TrustServerCertificate=True添加到连接字符串中,以便无论证书如何都能够连接。 -
根据这个 MSDN 帖子 - link,我正在使用带有 IDataInitialize 的初始化字符串,我可能需要使用属性 Use Data for Encryption而不是 加密。同样,我需要使用 Trust Server Certificate 而不是 TrustServerCertificate。
标签: c# .net sql-server sql-server-2008 oledb