SQL Server 2008中的证书

Modified on: Fri, 08 Nov 2019 17:20:02 +0800

我需要为我的应用程序和Sql Server 2008之间的传输实现SSL。

我使用的是Windows 7,Sql Server 2008,Sql Server Management Studio,我的应用程序是用c#编写的。

我正在尝试按照MSDN页面创建证书和对于特定客户的'Encrpyt'下的这个,但我无可奈何地感到困惑。我需要一些小步骤才能成功实现加密。

首先,我不了解MMC。我在那里看到很多证书......这些证书是我应该用于我自己的加密还是用于已经存在的东西?另外,我认为所有这些证书都是我本地计算机上的文件,为什么还有一个名为“个人”的文件夹?

其次,为了避免上述问题,我做了一个自签名程序集的小实验。如上面的MSDN链接所示,我使用SSMS中执行的SQL来创建自签名证书。然后我使用以下连接字符串进行连接:

 Data Source=myServer;Initial Catalog=myDatabase;User ID=myUser;Password=myPassword;Encrypt=True;TrustServerCertificate=True

它连接,工作。然后我删除了我刚刚创建的证书,它仍然有效。显然它从来没有做过任何事情,但为什么不呢?我怎么知道它是否真的“有效”?我想我可能错过了一个中间步骤(某种程度上?)将文件从SSMS上移到客户端上?

我不知道我在做什么,所以任何帮助,建议,评论,你可以给我的参考资料都非常感谢。

提前谢谢你。 :)

作者:Brandi

最佳答案

如果我正确理解MSDN规范,您只需在连接字符串Encrypt=True;TrustServerCertificate=True中指定。这意味着客户端请求加密,愿意接受服务器可能使用的任何证书。服务器始终具有在服务器启动时生成的自签名证书,如果没有其他可用的话。如果客户端愿意接受任何证书,那么它将接受该服务器的临时自签名证书,就像任何证书一样好。

这样的设置提供的是应用程序和服务器之间的加密通信通道,这是一个无法轻松删除的通道。但是,该频道对恶意的中间人攻击持开放态度。如果攻击者可以欺骗客户端连接到而不是服务器(例如,通过控制DNS记录,更确切地说是客户端将使用的DNS服务器IP,这是一个简单的DHCP设置控制)然后攻击者可以提供任何证书,客户端将接受它,然后它可以与客户端进行完整的身份验证往返,从而获得使用的SQL用户名和密码,然后它可以连接到真正的服务器并来回转发所有通信,免费查看所有内容。客户永远不会知道被“监控”。这就是“中间人”攻击。

为防止出现上述情况,客户端必须从连接字符串中删除 TrustServerCertificate=True。完成此操作后,服务器使用的证书将被客户端信任,这就是出现所有复杂情况的时候。如果您对设置较弱的设置感到满意,但您了解 可能会受到中间人攻击,那么您就是好吧,然后使用更简单的TrustServerCertificate=True设置。如果没有,那么不幸的是,你必须真正理解你在做什么,而不是微不足道。如果数据如此重要,那么可能为您的服务器(〜$ 500 /年)支付VeriSign,Thawte或GlobalSign(这些是每个Windows客户端信任的3个根)证书的金额。不那么古怪。


相关问答

添加新评论