SQL Server 2008中的证书

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

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

我试图按照关于创build证书的MSDN页面, 这在“Encrpyt为一个特定的客户端”,但我无可救药的困惑。 我需要一些小小的步骤来成功实现encryption

首先,我不明白MMC。 我在那里看到很多证书……这些证书是我应该用于自己的encryption还是被用于已经存在的事情? 另一件事,我假设所有这些证书文件都位于我的本地计算机上,为什么有一个名为“个人”的文件夹?

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

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

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

我不知道我在做什么,所以任何帮助,build议,意见,引用你可以给我非常感激。

先谢谢你。 🙂

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

这种设置提供的是应用程序和服务器之间的encryption通信通道,这个通道不会轻易掉落。 然而,这个频道是对中间人的恶意攻击。 如果攻击者可以欺骗客户端连接到而不是服务器(例如通过控制DNSlogging,更准确地说DNS客户端将使用的DNS服务器IP,这是一个微不足道的DHCP设置来控制),攻击者可以提交任何证书,客户端将接受它,然后可以与客户端进行完整的身份validation,从而获得所使用的SQL用户名和密码,然后可以连接到真实的服务器并来回转发所有的通信,随意查看所有内容。 客户永远不会知道正在被“监控”。 这是“中间人”的攻击。

为防止出现上述情况,客户端必须从连接string中删除 TrustServerCertificate=True 。 一旦完成,服务器使用的证书必须被客户端所信任,这是所有复杂情况出现的时候。 如果您可以使用encryptionstream量的较弱设置,但是您明白自己可能受到中间人攻击,并且可以使用,那么请使用更简单的TrustServerCertificate=True设置。 如果没有,那么不幸的是,你必须真正明白你在做什么,并不是微不足道的。 如果数据如此重要,那么可能将VeriSign,Thawte或GlobalSign(这些是每个Windows客户端信任的3个根)的金额(为了您的服务器价值500美元/年)拿出来并不奇怪。

“个人”是证书商店的误导性名称。 当您在MMC中时,如果您看到可以select的证书,则可能是好的。 我build议使用真正的证书。 这可以是使用Microsoft Certificate Server在内部创build的证书,也可以是从证书提供商购买的证书。 我不会使用自签名证书。 SQL Server实例服务也必须重新启动才能生效。

一些一般的提示:

如果您在客户端上强制执行encryption,则客户端上的所有SQL通信都必须使用传输级别encryption。

如果在服务器上执行encryption,则该实例的所有SQL通信都必须使用传输级别encryption。

无论您select哪种configuration(select性的或强制性的),您的应用程序仍然需要支持各种连接选项。 如encryption连接关键字。

我个人发现SQL Native客户端比内置的SQL客户端提供更多的描述性错误信息,但是你可以使用/强制encryption。

微软的文档有点粗略,但有一些好的文章:

有select地使用安全连接到SQL Server
http://blogs.msdn.com/b/sql_protocols/archive/2009/10/19/selectively-using-secure-connection-to-sql-server.aspx

如何使用Microsoftpipe理控制台为SQL Server实例启用SSLencryption
http://support.microsoft.com/kb/316898

使用SQL Server Native Client连接string关键字
http://msdn.microsoft.com/en-us/library/ms130822.aspx