2016-05-11 149 views
0

我们想要加密所有到SQL Server的通信。所以我们有SSL证书并将其安装到我们的SQL Server。使用SSL加密连接到SQL Server

我们的.NET网络应用程序可以使用encrypt=true功能连接到SQL服务器以在SQL Server和Web Server之间具有加密通信。
我们还有一个Delphi 2007桌面应用程序,我们希望在SQL Server和应用程序用户之间也有加密通信。

尽管应用程序用户可以通过SQL管理工作室连接到SQL Server并检查了"encrypt connection"功能,但我们无法通过我们的Delphi应用程序进行连接。我们在OLEDB连接字符串中添加"encrypt=true",但没有任何更改。

我们应该做些什么来获得所有流量加密?

+0

*我们无法连接*是什么意思?你有错误信息吗?如果是这样,什么是*确切*错误信息?你用什么组件连接?你的ConnectionString是什么? –

+0

https://www.connectionstrings.com/all-sql-server-connection-string-keywords/(for ADO)also:当encrypt属性设置为true并且trustServerCertificate属性设置为true时,驱动程序不会验证SSL证书。这通常是允许在测试环境中进行连接所必需的,例如实例只有自签名证书的情况。 字符串connectionUrl = “jdbc:sqlserver:// localhost:1433;” + “databaseName = AdventureWorks; integratedSecurity = true;” + “encrypt = true; ** trustServerCertificate = true **” – Johan

+0

我们使用的连接字符串: 'Provider = SQLOLEDB。1; Encrypt = True; Integrated Security = SSPI; Persist Security Info = False; Initial Catalog = OurDatabaseName; Data Source = OurServer \ OurInstance; Use Prepare = 1; Auto Translate = True; Packet Size = 4096; Tag column with column collat​​ion何时可能=假# 我的意思是'无法连接'我们可以连接我们的sql服务器,但无法建立连接加密。 – Aktas

回答

0

SSL连接加密可以从客户端启动,客户端可以是IIS网站或桌面应用程序,也可以在服务器端强制执行。无论采用哪种方式,都需要安装一个证书并将其提供给用户或建立另一个系统可以验证的连接的进程。客户端加密是使用“encrypt = true”或在SQL Server Management Studio上选择复选框选项配置的。 SQL Server的服务器端加密通过将证书和私钥添加到运行数据库引擎的服务帐户的证书存储中,并使用SQL Server配置管理器指定用于加密的证书并将“强制加密”属性设置为true来配置。建议使用由您的域名证书颁发机构生成的证书或从公共CA中购买的证书,因为自签名证书容易受到中间人攻击。

您的yur Delphi 2007应用程序的主要问题是服务器无法验证应用程序提供的证书并拒绝信任该证书,或者客户端上没有任何证书可供使用。证书验证问题并不罕见。当我将服务器配置为所有连接上的服务器端加密时,我还必须将相同的域CA证书添加到管理其自己的证书验证的任何虚拟机(如Java虚拟机)。有趣的是,当我阅读trustServerCertificate = true时,文档状态为“当encrypt属性设置为true并且trustServerCertificate属性设置为true时,SQL Server的Microsoft JDBC驱动程序不会验证SQL Server SSL证书。”我没有使用这个属性,但它可以工作,而不是将证书添加到虚拟机。另外,如果你有复制,如果一台服务器强制加密,另一台服务器不加密,你将遇到挑战。

您还可以通过研究证书的“走信任链”和数字签名来了解关于如何验证证书的更多信息。这将有助于你理解为什么会发生这种情况。