Sql-Server

SQL Server 2008 中的證書

  • June 9, 2010

我需要為我的應用程序和 Sql Server 2008 之間的傳輸實現 SSL。

我使用的是 Windows 7、Sql Server 2008、Sql Server Management Studio,並且我的應用程序是用 c# 編寫的。

我試圖按照 MSDN 頁面創建證書,並“Encrpyt for a specific client”下進行操作,但我感到非常困惑。我需要一些小步驟來進一步成功實施加密。

首先,我不懂MMC。我在那裡看到很多證書……這些證書是我應該用於我自己的加密還是用於已經存在的東西?另一件事,我假設所有這些證書都是位於我本地電腦上的文件,那麼為什麼會有一個名為“個人”的文件夾?

其次,為了避免上述問題,我對自簽名程序集做了一個小實驗。如上面的 MSDN 連結所示,我使用在 SSMS 中執行的 SQL 來創建自簽名證書。然後我使用以下連接字元串進行連接:

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

它連接,工作。然後我刪除了我剛剛創建的證書,它仍然有效。顯然它從來沒有做任何事情,但為什麼不呢?我怎麼知道它是否真的“工作”?我想我可能錯過了(不知何故?)將文件從 SSMS 中取出並放到客戶端的中間步驟?

我一點也不知道我在做什麼,所以非常感謝你能給我的任何幫助、建議、評論和參考。

先感謝您。:)

如果我正確理解 MSDN 規範,您只需在連接字元串中指定即可Encrypt=True;TrustServerCertificate=True。這意味著客戶端請求加密並願意接受伺服器可能使用的任何證書。如果沒有其他可用的,伺服器始終具有在伺服器啟動時生成的自簽名證書以供使用。如果客戶端願意接受任何證書,那麼它將接受該伺服器的臨時自簽名證書,與任何證書一樣好。

這種設置提供的是您的應用程序和伺服器之間的加密通信通道,該通道不能輕易掉線。但是,該通道對惡意中間人攻擊是開放的。如果攻擊者可以欺騙客戶端連接到而不是伺服器(例如,通過控制 DNS 記錄,更準確地說是客戶端將使用的 DNS 伺服器 IP,這是一個微不足道的 DHCP 設置來控制),那麼攻擊者可以提出任何證書和客戶端將接受它,然後它可以與客戶端進行完整的身份驗證往返,從而獲得使用的SQL使用者名和密碼,然後它可以連接到真正的伺服器並來迴轉發所有通信,具有免費查看所有內容。客戶永遠不會知道正在被“監控”。這是“中間人”攻擊。

為防止出現上述情況,客戶端必須TrustServerCertificate=True連接字元串中刪除 。完成此操作後,伺服器使用的證書必須得到客戶端的信任,這就是所有復雜情況出現的時候。如果您可以使用較弱的設置來加密流量,但您知道可能會受到中間人攻擊並且您可以使用它,然後使用更簡單的TrustServerCertificate=True設置。如果不是,那麼不幸的是,您必須真正了解自己在做什麼,而且不是微不足道的。如果數據是這樣重要的是,那麼為您的伺服器(約 500 美元/年)支付 VeriSign、Thawte 或 GlobalSign(這些是每個 Windows 客戶端信任的 3 個根)證書的錢也許並不奇怪。

引用自:https://serverfault.com/questions/149371