env: Windows Server 2012R2
SQL Server 2014
感謝同事的幫忙才得以完成此篇文章。
一、弱掃掃描 : (Low) SSL Certificate
Chain Contains RSA Keys Less Than 2048 bits for tcp 1433 (SQL Server)
二、修復弱點 : (必讀)
應用系統服務是否支援拋sql server安裝憑證,修復弱點,應用系統一定要全盤測試。
三、憑證說明 : (外部工具僅提供更換憑證解決,未達水平說明及處理方式)
1.
憑證之應用,應評估該系統服務有無不可否認之傳遞資料,導致爭議
2.
憑證之應用,應評估使用認證(須費用)、自簽、自建,已符合必要傳遞資料
u 認證 : 第三方合法提供憑證,定期購買使用,提供憑證不可變造之舉證
u 自簽 : 內部建立CA server,自簽憑證使用,用於內部各自應用系統服務(應用系統多台主機)
u 自創 : 該應用系統主機自建憑證,用於各自應用系統服務(應用系統少量主機)
四、憑證應用 :
隨科技演進迅速,憑證長度(一組亂數組合)從早期64bits、512…1024、2048、4096bits…,透過演算法將憑證長度一起加密後傳送到目的地。
五、風險分析 :
在近幾年因電腦速提升後有機會被高速運算破解1024bits亂數內容,進而解出傳輸封包的內容加以組合後,有機會取得想要的資訊。
需要的條件有
1.
取得網路連線 (有管制性,無風險)
2.
複製收集網路封包 (有管制性,無風險)
3.
高速運算破解憑證
4.
組裝有效封包
5.
分解內容資訊
一、修復方式 :
1.利用powershell建立自建憑證:
DNSName要用FQDN
PS C:\Windows\system32> New-SelfSignedCertificate -DnsName "Servername",'localhost.' -CertStore
Location
Cert:\Localmachine\my
目錄: Microsoft.PowerShell.Security\Certificate::LocalMachine\my
Thumbprint Subject
---------- -------
62AD50067FDFEA2C71909EAB0D8C2D5243058615 CN=Servername
2.檢查自建憑證資訊:
用powershell檢查
PS C:\Windows\system32> get-childitem -path cert:\* -Recurse |where {$_.Subject -like '*VM*'}
目錄: Microsoft.PowerShell.Security\Certificate::CurrentUser\CA
Thumbprint Subject
---------- -------
C834EC8699AFF0BCE4A1933F3EF3EBD74BA09934 CN=Servername
62AD50067FDFEA2C71909EAB0D8C2D5243058615 CN=Servername
目錄: Microsoft.PowerShell.Security\Certificate::LocalMachine\Remote
Desktop
Thumbprint Subject
---------- -------
62865A86C0C57C5651FAD4D74B7AADCFC73F3272 CN=Servername
目錄: Microsoft.PowerShell.Security\Certificate::LocalMachine\CA
Thumbprint Subject
---------- -------
C834EC8699AFF0BCE4A1933F3EF3EBD74BA09934 CN=
62AD50067FDFEA2C71909EAB0D8C2D5243058615 CN=Servername
目錄: Microsoft.PowerShell.Security\Certificate::LocalMachine\My
Thumbprint Subject
---------- -------
62AD50067FDFEA2C71909EAB0D8C2D5243058615 CN=Servername
PS C:\Windows\system32>
3.設定自建憑證的私密金鑰權限給SQL Server服務帳號:
重要,一定要設定,否則SQL Server重啟會失敗。
4.設定SQL Server certificate的registry:
以SQL Server 2014為例:
registry路徑: 電腦\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL
Server\MSSQL12.MSSQLSERVER\MSSQLServer\SuperSocketNetLib
找到Certificate,貼上第2點的Thumbprint。
再來重啟SQL Server服務
後記1:
指令有關於主機名稱的部分用字串"Servername"取代。
用windows的powershell產生憑證指令會有一下限制
Description
The New-SelfSignedCertificate cmdlet
creates a self-signed certificate for testing purposes. Using the CloneCert
parameter, a test certificate can be created based on an existing certificate
with all settings copied from the original certificate except for the public
key. A new key of the same algorithm and length will be created.
If an existing certificate is not being
cloned, then an SSL server certificate with the following default settings is
created:
-- Subject: Empty
-- Key: RSA 2048
-- EKUs: Client Authentication and Server
Authentication
-- Key Usage: Digital Signature, Key
Encipherment (a0)
-- Validity Period: One year
Delegation may be required when using this
cmdlet with Windows PowerShell remoting and changing user configuration.
所以測試在windows 2016自建憑證,在windows 2016的powershell建立憑證指令多了NotAfter的選項,可以自訂憑證的期限。
開始驗證:
1.在windows 2016主機建立憑證
Windows PowerShell
著作權 (C) 2016 Microsoft Corporation. 著作權所有,並保留一切權利。
PS C:\Windows\system32> New-SelfSignedCertificate -DnsName
"Servername",'localhost.' -CertStoreLocation
Cert:\Localmachine\my -NotAfter (Get-Date).AddMonths(60)
PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\my
Thumbprint Subject
---------- -------
A02AB79D7E35D04103AA59BEEDEFDA5BDC75D4E7 CN=Servername
PS C:\Windows\system32>
2.匯出憑證與金鑰
在MMC的個人\憑證下,在右邊的憑證點滑鼠右鍵,選擇所有工作,再選擇匯出
將私密金鑰一併匯出,下一步。
點選以下資訊,下一步。
輸入密碼,下一步。
點選瀏覽。
輸入檔案名稱,點選存檔。
3.將檔案複製到windows 2012主機。
4匯入憑證(檔案win2016testcert)
在MMC的個人\憑證下,在右邊的憑證點滑鼠右鍵,選擇所有工作,再選擇匯入
5.檢查憑證
PS C:\Windows\system32> get-childitem -path cert:\* -Recurse |where {$_.Subject -like '*VM*'}
目錄: Microsoft.PowerShell.Security\Certificate::LocalMachine\My
Thumbprint Subject
---------- -------
A02AB79D7E35D04103AA59BEEDEFDA5BDC75D4E7 CN=Servername
6.設定私密金要權限給SQL Server服務帳號
7.在SQL Server的註冊碼certificate設定thumbprint
8.重啟SQL Server服務,正常
後記2:
自建憑證會有不受信任的狀況,因此要再次匯入跟憑證的目錄下,才不回有此訊息。
後記3:
驗證Windows 2012R2 + SQL Server 2014 SP3
alwayson綁定SSL憑證的影響?
若憑證過期對於alwayson的影響?
Windows 2012 R2:
1.
ag201401.dba.com
2.
ah201402.dba.com
1.分別在2台Windows主機自建憑證
主機1指令: New-SelfSignedCertificate -DnsName
"ag201401.dba.com",'localhost.' -CertStoreLocation
Cert:\Localmachine\my
主機2指令: New-SelfSignedCertificate -DnsName "ag201402.dba.com",'localhost.' -CertStoreLocation Cert:\Localmachine\my
主機1:
PS C:\Windows\system32> New-SelfSignedCertificate -DnsName
"ag201401.dba.com",'localhost.' -CertStoreLocation
Cert:\Localmachine\my
目錄: Microsoft.PowerShell.Security\Certificate::LocalMachine\my
Thumbprint Subject
---------- -------
52D4A2F7B03303687F0E9A4101B70FCA3FE3D5F7 CN=ag201401.dba.com
PS C:\Windows\system32>
主機2:
PS C:\Windows\system32> New-SelfSignedCertificate -DnsName
"ag201402.dba.com",'localhost.' -CertStoreLocationlmachine\my
目錄: Microsoft.PowerShell.Security\Certificate::LocalMachine\my
Thumbprint Subject
---------- -------
822587B16885A78164378655C34566AE74116625 CN=ag201402.dba.com
PS C:\Windows\system32>
MMC結果畫面:
2.將憑證的私密金鑰授權給SQL Server服務帳號(dba\dbadmin),2台都要設定
以主機1為例。
3.在Windows主機上設定SQL Server憑證的註冊碼。
registry路徑: 電腦\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL
Server\MSSQL12.MSSQLSERVER\MSSQLServer\SuperSocketNetLib
將上面步驟1的Thumbprint(指紋)分別貼上各自主機註冊碼,如下圖:
啟用強制加密:
驗證連線:
用資料庫連線資料庫主機ag201401
連線已強制加密:
用資料庫連線資料庫alwayson listener
連線已強制加密:
驗證憑證過期會不會造成連線問題:
關閉AD主機,調整成以下時間
測試alwayson listener連線,可以連線。
確認系統時間已經改變
連線還是維持強制加密: