使用“localhost”證書的 SQL Server 加密
使用 SQL Server 2014/2016:
我正在嘗試加密從我的應用程序到本地 SQL Server 實例的連接。當我閱讀文件時,SQL Server 似乎更喜歡頒發給完全限定域名的證書(不僅僅是
localhost
. SQL Server 配置管理器似乎只能看到頒發給電腦 FQDN 的證書。我發現這篇文章似乎表明您也可以使用萬用字元證書。
但我正在從本地應用程序連接到未暴露於網路的本地 SQL Server 實例。有沒有辦法將頒發給
localhost
SQL Server 實例的證書關聯起來?這可以通過 IIS 證書(將 HTTP 流量加密到localhost
)來實現。內部安全策略要求任何與數據庫的程序間通信,即使是在本地機器上,也要加密。據我所知,Named Pipes沒有加密選項。我們將禁用所有其他協議並僅允許 TCP/IP,因為它是支持加密的唯一選項,這是我們的安全策略所要求的。
問題是這些是單個工作站上的 300 多個 SQL Express 實例。如果我們不能只使用一個
localhost
證書,那麼證書管理將是一場噩夢。
只是為了好玩,我嘗試使用萬用字元證書來做到這一點。任何人都可以使用自簽名證書來執行此操作,對於本地應用程序,當共享記憶體可以更有效地工作時被迫使用 SSL,這是一種虛假的事實。這不會增加環境的安全性。
創建新證書
New-SelfSignedCertificate -Subject "CN=*,DC=Dublin,DC=local" -KeySpec KeyExchange -KeyFriendlyName "SQLWildcard" -TextExtension "2.5.29.37={text}1.3.6.1.5.5.7.3.1" -CertStoreLocation "Cert:\LocalMachine\My"
請注意,兩者的 FQDN
localhost
和短名稱localhost
似乎也可以正常工作。它仍然沒有使任何事情變得更安全。如果有的話,強制它通過 TCP 堆棧會增加過濾器驅動程序和其他項目檢查和攻擊的更多位置。授予私鑰權限
在這裡,我授予服務帳戶對私鑰的訪問權限。由於大多數情況下 SQL Server Express Edition 以
Local
* 帳戶執行,如果您已將證書放在本地電腦的MY
位置,則可以跳過此步驟。為了完整起見,把它放進去。設置實例以使用 SSL 證書
這不會顯示在證書選擇器中,因為頒發對象和主題實際上與伺服器不匹配。另外,如果您有 3000 多個實例來執行此操作,您很可能不會通過 GUI 執行此操作。
系統資料庫項的位置是:
HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\*InstanceID*\MSSQLServer\SuperSocketNetLib
其值名稱Certificate
取證書的指紋。雙重檢查
如果一切順利,您將看到在下次重新啟動服務時為 SQL Server 成功載入證書指紋。
The certificate [Cert Hash(sha1) "F830C76FDDAC472807AF46A1C44450BBA56443D7"] was successfully loaded for encryption.
如果出現問題,您會看到初始化 SSL 失敗。其後將是錯誤程式碼和狀態程式碼的相當詳細的輸出,這將幫助您確定發生故障的原因。
Unable to load user-specified certificate [Cert Hash(sha1) "ED3D2F4360780AF71ABCE83A1C3A6F3BE13E1B96"]. The server will not accept a connection. You should verify that the certificate is correctly installed. See "Configuring Certificate for Use by SSL" in Books Online.
程序外的備用數據庫技術也將面臨同樣的命運。你可以
localhost
按照我上面解釋的那樣使用。