安全套接字層 (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??梢詫⒖蛻舳藥炫渲脼閷τ谒羞B接強制使用 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 協議的一部分。還要注意,即使服務器和客戶端都不需要加密,這也會發生。 | |