為 SSL 加密配置 SQL Server
我是 DBA 角色的新手,我的任務是為客戶端配置 SQL Server 安裝,並要求數據庫將分佈在兩個實例中。與其中一個實例的連接需要在 SSL 證書下進行加密,因此我希望我可以就如何最好地實施和測試加密收集一些建議。
我從證書頒發機構獲得了一個受信任的證書並將其安裝在伺服器上,並在 INS1 協議上設置屬性以使用新證書強制加密。
當我查詢 Exec Connection DMV 時
encrypt_option
,所有活動 SPIDS 的值都顯示為 True。但是,我可以在本地電腦上通過 SSMS 在加密連接下查詢實例,並且我沒有本地安裝的證書副本。我的印像是,如果沒有證書客戶端的相應副本,我的連接將被拒絕,因為我需要訪問公鑰/私鑰才能解密/加密通過連接交換的任何數據。問題
- 如果客戶端沒有
ForceEncryption=True
在伺服器上安裝證書副本,預期的行為是什麼?- 是否應該拒絕與實例的連接,或者假設客戶端具有訪問實例所需的憑據,是否應該允許未加密的連接?
- 是否允許我在沒有安裝客戶端證書副本的情況下建立加密連接,因為頒發 CA 是作為我們組安全策略的一部分推出的受信任的根 CA?
注意事項
此外; 外部客戶端將通過我們 DMZ 中的 Web 伺服器連接到實例,然後路由到與數據庫伺服器通信的內部應用伺服器。在此範例中,鏈中的每個設備是否都需要安裝證書的副本(客戶端電腦、Web 伺服器、應用程序伺服器、數據庫伺服器)?
不幸的是,作為一個沒有經驗的 DBA,我可能還沒有考慮過很多事情,所以任何可以提供的建議都將不勝感激。如果可能的話,最好從已經實施類似解決方案的人那裡獲得意見。
對評論的回應
您能否詳細說明“數據庫將分佈在兩個實例中”?
客戶端已請求將託管在此伺服器上的數據庫拆分為兩個實例,第一個實例託管需要加密連接的數據庫,第二個實例託管允許未加密連接的數據庫。
非常感謝
當客戶端連接到伺服器時,伺服器會提供其證書。如果客戶端未明確配置為信任伺服器返回的任何證書,它將檢查客戶端密鑰庫以查看它是否可以信任該證書。如果客戶端密鑰庫信任頒發證書的證書頒發機構鏈,則它不必包含伺服器證書的副本。
這與瀏覽器如何與 Web 伺服器建立 HTTPS 連接的原理完全相同。儘管您可能不知道,瀏覽器的密鑰庫被配置為信任許多證書頒發機構,因此只要站點返回的證書是由其中一個證書頒發機構創建的,它就會信任它。這使您可以建立與銀行網站的 HTTPS 連接,例如,無需安裝銀行的證書。該銀行使用 GoDaddy 或 DigiCert 或類似的公共證書公司,瀏覽器預設配置為信任這些“已知良好”的證書生成器。
例如,組織通常在其網路上每個 Windows 系統的密鑰庫中安裝根證書和基礎結構證書。然後,當 SQL Server(或 Web 伺服器或其他)安裝了由該組織的密鑰基礎結構生成的證書時,大多數本地 Windows 程序將信任該證書,因為它們將使用 Microsoft SQL 客戶端驅動程序,該驅動程序引用 Windows 密鑰庫以確定要信任的證書。
Java SQL 客戶端,例如 Microsoft JDBC 和 jTDS,不會使用 Windows 密鑰庫,因此需要將根證書和基礎結構證書安裝到相關 Java 程序正在使用的密鑰庫中(通常是一個名為“cacerts”的文件,但 JDBC 允許指定密鑰庫文件)。另一個選項是配置連接字元串,以便伺服器返回的任何證書都是可信的。但是,這會帶來連接到惡意伺服器的風險,並且它會信任其證書。
還有一些其他的 SQL 客戶端,例如 DataDirect Wire Protocol,可以選擇指定某個密鑰庫、信任伺服器證書等。
是否允許我在沒有安裝客戶端證書副本的情況下建立加密連接,因為頒發 CA 是作為我們組安全策略的一部分推出的受信任的根 CA?
是的,如上所述。
如果客戶端沒有安裝證書的副本並且伺服器上的 ForceEncryption=True,那麼預期的行為是什麼?是否應該拒絕與實例的連接?
我可能會將這個問題修改為“如果客戶端不信任證書,預期的行為是什麼……”因為只要它信任生成它的鏈,它就不必擁有證書的副本。ForceEncryption 正是它聽起來的樣子——它不允許未加密的連接。客戶端必須信任返回的證書並建立 SSL 連接才能連接和登錄 SQL Server。如果客戶端不信任證書,客戶端將無法登錄,並且您將在 SQL Server 錯誤日誌中看到錯誤。
此外; 外部客戶端將通過我們 DMZ 中的 Web 伺服器連接到實例,然後路由到與數據庫伺服器通信的內部應用伺服器。在此範例中,鏈中的每個設備都需要證書的副本
不,唯一需要信任 SQL Server 返回的證書的系統是與 SQL Server 有連接的系統。例如,對於 Web 應用程序,連接到 SQL Server 的 Web 伺服器需要信任從 SQL Server 返回的證書或生成證書的鏈。連接到 Web 應用程序的瀏覽器需要信任 Web 伺服器返回的證書。瀏覽器未連接到 SQL Server,並且 Web 伺服器不會將 SQL Server 的證書轉發到瀏覽器。瀏覽器沒有建立到 SQL Server 的連接,因此它們不需要信任 SQL Server 的證書。