2023年10月15日 星期日

MSSQL 2022 如何創建 自簽署SSL憑證證書 導入並啟用加密連接

MSSQL 2022 如何創建 自簽署SSL憑證證書 導入並啟用加密連接

繼前幾篇


已經是可以用的狀態了,補上最後一偏安全的問題 SSL證書,這個一般是需要花錢購買的,由第三方CA機構簽名才能把自己的域名發布到公共信任清單上。本篇測試用的用自簽署證書來測試整個流程。


以下總共分成下列幾大項目

  1. 創建SSL證書
  2. 在伺服器上安裝私鑰
  3. 設置伺服器端證書權限
  4. 在SQLSERVER中啟用SSL證書
  5. 在客戶端上安裝公鑰
  6. 測試加密狀態

本篇是完全手動最麻煩的教學攻略,要快速建造SSL直接用PowerShell是最快的
詳細請參考這一篇:CHG: MSSQL 2022 快速建構 自簽署SSL證書

快速建構篇是以本篇已經完成後的狀態去做的,不過基本也包含本篇8程的內容了,唯一缺少的是【4. 在SQLSERVER中啟用SSL證書】,如果要偷吃步直接跳記得這個步驟要補上




0. 安裝環境 MSYS2 與 OpenSSL

安裝這個是因為上面有現成的 OpenSSL 可以用,這個要在Windows上官方沒有給編譯好的檔案,除了自行編譯外只能載第三方編譯的。

載點:https://www.msys2.org/#installation



打開之後直接下一步就行了,沒什麼選項



打開之後長這樣輸入該指令安裝 OpenSSL

pacman -S openssl


這樣就安裝好可以用了



1. 創建SSL證書

分以下幾個步驟創建

創建私鑰

openssl genpkey -algorithm RSA -out private_key.pem

這個執行完畢就創好了,私鑰要保存好不能公開



創建憑證請求

openssl req -new -key private_key.pem -out request.csr

這邊會需要輸入很多,唯一要注意的就是域名別亂填要填該伺服器主機的IP或域名
(這個會影響到之後接入的問題,如果IP是浮動會跑的趁現在趕緊固定一下)



簽署該請求 (本來應該是由第三方CA做的)

openssl x509 -req -days 365 -in request.csr -signkey private_key.pem -out certificate.cer

這樣就能拿到公鑰了 (這份私簽的證書不會上公服,要手動發給客戶端才能用)


這裡的私鑰其實應該是在產一個比較好,只是方便直接拿來用了
實際上提交給CA簽署的的時候,不用也不能連請求的私鑰也一起給出去

由CA簽署過的公鑰會被上傳到公共伺服器,實際上也不需要發送給客戶
只要證書還有效,客戶就能能從公共伺服器直接獲取並連上該域名



合成完整的證書

openssl pkcs12 -export -out certificate.pfx -inkey private_key.pem -in certificate.cer

這個可以把私鑰跟公鑰合併起來,合併後才是完整的證書

最小限度可以僅保存這個檔案就好,但公鑰cer建議保存,方便你發布到其他電腦
(不然丟了還要從 pfx 檔案打指令挖出來,或是安裝後按匯出公鑰)



確認檔案

最後 MSYS2 的預設使用者位置在這裡 (直接貼上就好)

C:\msys64\home\%UserName%

確認一下檔案都在這兩個框起來是需要的檔案





2. 在伺服器上安裝私鑰

安裝證書

對著pfx檔案點擊右鍵"安裝pfx"



進入安裝介面選擇"本機電腦"



選擇下一步,密碼跟設置成可匯出根據自己需求選擇



安裝到"個人"(否則在SqlServer中會看不到證書)





3. 設置伺服器端證書權限

再來需要設置權限給 SQLSserver 有權使用他

按下 CTRL+R 打開執行視窗輸入 "certlm.msc" 按下確定打開憑證管理員



然後在個人中找到剛剛安裝的證書右鍵管理私密金鑰



選擇新增



然後輸入 NT Service\MSSQLSERVER 後按下檢查名稱,之後按下確定

這裡 MSSQLSERVER 其實就是預設的實例名,如果忘了實例名
可以像圖中背景那樣從SQL設定管理員那裏抄過來就好


看一下有沒有多出 MSSQLSERVER 然後再按下確定


這樣就完成了SQL已經有權限可以使用他



4. 在SQLSERVER中啟用SSL證書

再來到 SQL 設定管理員中啟用該證書
對著通訊協定按右鍵內容 -> 選擇憑證分頁 -> 選擇你的憑證



前面一頁旗標的分頁打開強制加密



最後再把 SQLServer 重新啟動即可



至此就完成這樣伺服器端的設置了




5. 在客戶端上安裝公鑰

在客戶端上對著cer檔案按右鍵安裝憑證



選擇本機電腦



安裝到"受信任的根憑證授權單位"



這樣就完成了。 (注意這個不能裝到別的地方會無效)




6. 測試加密狀態

要測試的話可以參考這一篇
CHG: SQL Server 如何加密連接 Server/Client 端解說

這邊簡單把內容搬過來快速講一下,就是打入測試指令而已。
記得尾端要移除 -N -C 這樣才能測試伺服器端到底有沒有強制打開。

sqlcmd -S '192.168.3.54,1433' -U 'chg' -P 'chg' -Q 'SET NOCOUNT ON SELECT c.session_id, c.encrypt_option, s.login_name, c.client_net_address, s.program_name FROM sys.dm_exec_connections c JOIN sys.dm_exec_sessions s ON c.session_id = s.session_id WHERE c.session_id = @@SPID' -W


這邊有一點要注意的是連入的伺服器名稱必須跟證書上的一樣,我上面創建證書是用IP就只能用IP登入,原本其實打電腦名稱也可以登入導入後就不行了。



這邊可以看到有個 True 這個就是成功加密了

可能有人有注意到圖中是伺服器端自己連自己,這樣測試還有效嗎?答案是有效的。因為就如同剛剛所提 cer 沒有導入到"受信任的根憑證授權單位"就無法使用,自然就無法依靠安裝在"個人"中的 pfx 證書連上了。

可能會想說那我直接把 pfx 安裝在"受信任的根憑證授權單位"不就可以一舉兩得?想法很完美但 SqlServer 預設只會讀"個人"中的證書,會直接導致看不到證書無法設置定的。





沒有留言:

張貼留言