Sql-Server

使用“localhost”證書的 SQL Server 加密

  • September 7, 2019

使用 SQL Server 2014/2016:

我正在嘗試加密從我的應用程序到本地 SQL Server 實例的連接。當我閱讀文件時,SQL Server 似乎更喜歡頒發給完全限定域名的證書(不僅僅是localhost. SQL Server 配置管理器似乎只能看到頒發給電腦 FQDN 的證書。

我發現這篇文章似乎表明您也可以使用萬用字元證書。

但我正在從本地應用程序連接到未暴露於網路的本地 SQL Server 實例。有沒有辦法將頒發給localhostSQL 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"

請注意,兩者的 FQDNlocalhost和短名稱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按照我上面解釋的那樣使用。

引用自:https://dba.stackexchange.com/questions/247078