如何使用SSL来确保与SQL Server 2000安全通信
发表于:2007-07-13来源:作者:点击数:
标签:
安全套接字层 (SSL) 是一套提供身份验证、保密性和数据完整性的加密技术。SSL 最常用来在 Web 浏览器和 Web 服务器之间建立安全通信通道。然而,还可以使用 SSL 来保护客户端应用程序(直接调用方)与 Microsoft SQL Server 2000 之间的通信。 本章介绍如何
安全套接字层 (SSL) 是一套提供身份验证、保密性和数据完整性的加密技术。SSL 最常用来在 Web 浏览器和 Web 服务器之间建立安全通信通道。然而,还可以使用 SSL 来保护客户端应用程序(直接调用方)与 Microsoft® SQL Server™ 2000 之间的通信。
本章介绍如何将 SQL Server 2000 配置为使用 SSL 确保与客户端应用程序进行安全通信。
您必须了解的背景知识
在开始学习本章之前,您应该知道:
• |
SSL 是使用 Internet 协议安全性 (IPSec) 来确保数据库通信安全的替代方法。
有关如何使用 IPSec 确保数据库通信安全的详细信息,请参见本指南中的如何使用 IPSec 在两个服务器之间进行安全通信。 |
• |
当客户端或服务器 IP 地址发生更改时,并不需要更改配置。这一点与 IPSec 不同。 |
• |
必须在数据库服务器计算机上安装服务器证书,SSL 才能运行。客户端计算机上还必须有来自同一机构的根证书颁发机构 (CA) 证书。 |
• |
客户端必须已经安装了 SQL Server 2000 连接库。早期版本或通用库会无法运行。 |
• |
SSL 只适用于 TCP/IP(为 SQL Server 推荐采用的通信协议)和命名管道。 |
• |
您可以将服务器配置为对所有连接强制使用加密。 |
• |
您可以在客户端上执行以下操作:
• |
强制对所有传出连接进行加密。 |
• |
通过使用连接字符串,允许客户端应用程序选择是否按连接进行加密。 | |
安装服务器验证证书
SSL 要求服务器拥有由所连接的客户端信任的证书颁发机构 (CA) 颁发的服务器身份验证证书。
• |
安装服务器证书
1. |
使用管理员帐户登录到数据库服务器计算机。 |
2. |
启动 Internet Explorer 并浏览到 Microsoft 证书服务,例如: http://MyCA/certsrv
|
3. |
单击“申请一个证书”,然后单击“下一步”。 |
4. |
单击“高级申请”,然后单击“下一步”。 |
5. |
单击“使用表格向这个 CA 提交一个证书申请”,然后单击“下一步”。 |
6. |
填写证书申请表,指明以下几点:
1. |
在“名称”字段中,输入运行 SQL Server 的计算机的完全限定域名。例如: sql01.nwtraders.com
|
2. |
在“预期目的”(或“需要的证书类型”)字段中,单击“服务器身份验证证书”。 |
3. |
对于加密服务提供程序 (CSP),单击“Microsoft RSA 通道加密提供程序”。
注意:Microsoft 基本加密提供程序 1.0 版和 Microsoft 增强加密提供程序同样有效。而 Microsoft 强加密提供程序无效。 |
4. |
选择“使用本地机器保存”复选框。
注意:不要选择“启用强私钥保护”。 | |
7. |
单击“提交”提交申请。
如果证书服务器自动颁发证书,则可以立即安装证书。否则,可以浏览到 Microsoft 证书服务并选择“检查挂起的证书”,在 CA 管理员颁发证书之后安装证书。 | |
验证证书是否已安装
此过程验证是否已成功安装服务器证书。
• |
验证证书是否已安装
1. |
单击任务栏上的“开始”按钮,然后单击“运行”。 |
2. |
键入“mmc”,然后单击“确定”。 |
3. |
在“控制台”菜单上,单击“添加/删除管理单元”。 |
4. |
单击“添加”。 |
5. |
单击“证书”,然后单击“添加”。 |
6. |
单击“计算机帐户”,然后单击“下一步”。 |
7. |
确保选中了“本地计算机:(运行本控制台的计算机)”,然后单击“完成”。 |
8. |
单击“关闭”,然后单击“确定”。 |
9. |
在左窗格的树视图中,展开“证书(本地计算机)”,展开“个人”,然后选择“证书”。 |
10. |
验证是否确实有一个证书具有您在前一个过程中指定的完全限定域名。
可以双击证书查看它的详细信息。 | |
在客户端安装 CA 颁发的证书
安装证书并重新启动 SQL Server 服务后,SQL Server 就可以与客户端协商 SSL。使用 SSL 连接到 SQL Server 的客户端必须:
• |
已安装 MDAC 2.6 或 SQL Server 2000 连接库。 |
• |
信任 SQL Server 的证书颁发者。 |
• |
在客户端计算机上安装 CA 颁发的证书
1. |
以管理员身份登录到客户端计算机。 |
2. |
启动 Internet Explorer 并浏览到 Microsoft 证书服务,例如: http://MyCA/certsrv
|
3. |
单击“检索 CA 证书或证书吊销列表”,然后单击“下一步”。 |
4. |
单击“安装此 CA 证书路径”,然后在确认对话框中单击“是”以安装根证书。 | |
强制所有客户端使用 SSL
可以将服务器配置为强制所有客户端使用 SSL(如此过程所述),或者可以让客户端选择是否按连接使用 SSL(如下一过程所述)。配置服务器强制客户端使用 SSL 的优点是:
• |
保证了所有通信的安全。 |
• |
拒绝任何不安全的连接。 |
缺点是:
• |
所有客户端必须安装了 MDAC 2.6 或 SQL Server 2000 连接库;早期版本或通用库将无法连接。 |
• |
不需要保护的连接由于额外的加密,性能开销会有所增加。 |
• |
强制所有客户端使用 SSL
1. |
在运行 SQL Server 的计算机上,单击“Microsoft SQL Server”程序组中的“服务器网络实用工具”。 |
2. |
单击选择“强制协议加密”。 |
3. |
验证是否启用了 TCP/IP 和/或命名管道。
其他协议不支持 SSL。 |
4. |
单击“确定”关闭 SQL Server 网络实用工具,然后在“SQL Server 网络实用工具”消息框中单击“确定”。 |
5. |
重新启动 SQL Server 服务。
所有后续客户端连接都会被要求使用 SSL,无论它们是否指定安全连接。 | |
允许客户端决定是否使用 SSL
此过程说明如何配置 SSL 以允许客户端选择是否使用 SSL。可以将客户端库配置为对于所有连接强制使用 SSL,或者可以让各应用程序在每个连接的基础上进行选择。配置客户端的优点在于:
• |
只有确实需要 SSL 的连接才会产生 SSL 系统开销。 |
• |
不支持在 SQL Server 中使用 SSL 的客户端仍然可以连接。 |
如果采用此方法,应确保您允许存在不安全的连接。
• |
重新配置服务器
1. |
在运行 SQL Server 的计算机上,运行“服务器网络实用工具”。 |
2. |
清除“强制协议加密”复选框。 |
3. |
重新启动 SQL Server 服务。 |
4. |
返回到客户端计算机。 | |
使用这一方法,您可以将客户端库配置为对所有连接都使用 SSL。这意味着将不能访问不支持加密的 SQL Server 和 SQL Server 2000 之前的 SQL Server 版本。
1. |
在“Microsoft SQL Server”程序组中,单击“客户端网络实用工具”。 |
2. |
确保启用了 TCP/IP 和/或命名管道。 |
3. |
选择“强制协议加密”。 |
在此方法中,应用程序使用连接字符串来决定是否使用加密。这允许每个应用程序仅在需要时才使用加密。
1. |
如果使用 OLE-DB 数据提供程序连接到 SQL Server,请将“对数据使用加密”设置为“true”,如下面的 OLE-DB 连接字符串示例所示。 "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security
Info=False;Initial Catalog=Northwind;Data Source=sql01;Use Encryption for
Data=True"
|
2. |
如果使用 SQL Server .NET 数据提供程序连接到 SQL Server,请将“加密”设置为“true”,如下例所示。 "Server=sql01;Integrated Security=SSPI;Persist Security
Info=False;Database=Northwind;Encrypt=True"
|
验证通信是否已加密
在此过程中,将使用网络监视器来验证在应用程序服务器与数据库服务器之间传送的数据是否已加密。首先以明文形式发送数据,然后通过先配置服务器,再配置客户端来启用加密。
• |
验证通信是否已加密
1. |
在客户端计算机上,使用 Visual Studio.NET 创建一个名为 SQLSecureClient 的新 C# 控制台应用程序。 |
2. |
将下面的代码复制到 class1.cs,替换所有现有的代码。
注意:用数据库服务器的名称替换连接字符串中的服务器名。 using System;
using System.Data;
using System.Data.SqlClient;
namespace SQLSecureClient
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
// 使用您的数据库服务器的名称替换
以下连接
// 字符串中的服务器名称
SqlConnection conn = new SqlConnection(
"server='sql01';database=NorthWind;Integrated Security='SSPI'");
SqlCommand cmd = new SqlCommand("SELECT * FROM
Products"); try
{
conn.Open();
cmd.Connection = conn;
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
Console.WriteLine("{0} {1}",
reader.GetInt32(0).ToString(),
reader.GetString(1) );
}
reader.Close();
}
catch( Exception ex)
{
}
finally
{
conn.Close();
}
}
}
}
|
3. |
在“生成”菜单上,单击“生成解决方案”。 |
4. |
为了使两台计算机之间的 Windows 身份验证取得成功,必须在数据库服务器计算机上复制当前以交互方式登录到客户端计算机所用的帐户。确保用户名和密码都匹配。另一种方法是使用两台计算机都可识别的域帐户。
还必须使用 SQL Server 企业级管理器为新创建的帐户创建一个数据库登录,并在 Northwind 数据库中为此登录添加一个新的数据库用户。 |
5. |
在数据库服务器计算机上,使用 SQL Server 网络实用工具禁用加密(确保未选择“强制协议加密”选项)。 |
6. |
在数据库服务器计算机上,单击“管理工具”程序组中的“网络监视器”。
注意:Windows 2000 Server 提供网络监视器的限制版。Microsoft SMS 提供网络监视器的完全版。
如果您没有安装网络监视器,请转到控制面板中的“添加或删除程序”,单击“添加/删除 Windows 组件”,从“Windows 组件”列表中选择“管理和监视工具”,单击“详细信息”,然后单击“网络监视工具”。单击“确定”,然后单击“下一步”安装网络监视器的限制版。可能会提示您插入 Windows 2000 Server CD。 |
7. |
在“捕获”菜单上,单击“筛选”创建新的筛选器,配置它以查看在应用程序服务器与数据库服务器之间发送的 TCP/IP 网络通信。 |
8. |
单击“开始捕获”按纽。 |
9. |
返回到客户端计算机,然后运行测试控制台应用程序。Northwind 数据库的产品列表应显示在控制台窗口中。 |
10. |
返回到数据库服务器,然后单击网络监视器中的“停止并查看捕获”按钮。 |
11. |
双击第一个捕获的帧以查看捕获的数据。 |
12. |
向下滚动以查看捕获的帧。您应该能看到明文形式的 SELECT 语句,后面带有从该数据库检索到的产品列表。 |
13. |
现在,使用 SQL Server 网络实用工具配置服务器,强制所有连接使用加密:
1. |
使用 SQL Server 网络实用工具选择“强制协议加密”。 |
2. |
停止并重新启动 SQL Server 服务。 | |
14. |
返回网络监视器并单击“开始捕获”按钮。在“保存文件”对话框中,单击“否”。 |
15. |
返回到客户端计算机,然后再次运行测试控制台应用程序。 |
16. |
返回到数据库服务器计算机,然后单击网络监视器中的“停止并查看捕获”。 |
17. |
确认数据现在已变得难以看懂(因为已加密)。 |
18. |
重新配置服务器,取消强制加密:
1. |
使用 SQL Server 网络实用工具并清除“强制协议加密”复选框。 |
2. |
停止并重新启动 SQL Server 服务。 | |
19. |
在网络监视器中开始新的捕获并重新运行客户端应用程序。确认数据再次成为明文。 |
20. |
返回到客户端计算机,从“Microsoft SQL Server”程序组中选择“客户端网络实用工具”。 |
21. |
选择“强制协议加密”,然后单击“确定”关闭客户端网络实用工具。 |
22. |
返回网络监视器并单击“开始捕获”按钮。在“保存文件”对话框中,单击“否”。 |
23. |
返回到客户端计算机,然后再次运行测试控制台应用程序。 |
24. |
返回到数据库服务器计算机,然后单击网络监视器中的“停止并查看捕获”。 |
25. |
确认数据现在已经难以看懂(因为已加密)。
请注意,在所有情况下,SQL Server 在通信序列开始时都将其服务器身份验证证书以明文形式发送到客户端。这是 SSL 协议的一部分。还要注意,即使服务器和客户端都不需要加密,这也会发生。 | |
原文转自:http://www.ltesting.net