2021年8月31日 星期二

SSL Certificate Chain Contains RSA Keys Less Than 2048 bits for tcp 1433

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  自創 : 該應用系統主機自建憑證,用於各自應用系統服務(應用系統少量主機)

四、憑證應用 :

隨科技演進迅速,憑證長度(一組亂數組合)從早期64bits512…102420484096bits…,透過演算法將憑證長度一起加密後傳送到目的地。

五、風險分析 :

在近幾年因電腦速提升後有機會被高速運算破解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=Servername

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 certificateregistry:

SQL Server 2014為例:

registry路徑: 電腦\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQLServer\SuperSocketNetLib

 找到Certificate,貼上第2點的Thumbprint

再來重啟SQL Server服務

 

後記1:

 指令有關於主機名稱的部分用字串"Servername"取代。

windowspowershell產生憑證指令會有一下限制

URL: https://docs.microsoft.com/en-us/powershell/module/pki/new-selfsignedcertificate?view=winserver2012r2-ps&redirectedfrom=MSDN

 

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 2016powershell建立憑證指令多了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.分別在2Windows主機自建憑證

主機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

將上面步驟1Thumbprint(指紋)分別貼上各自主機註冊碼,如下圖:

 

啟用強制加密:

 

驗證連線:

用資料庫連線資料庫主機ag201401


 

連線已強制加密:


用資料庫連線資料庫alwayson listener

 

連線已強制加密:

 

驗證憑證過期會不會造成連線問題:

關閉AD主機,調整成以下時間

 

測試alwayson listener連線,可以連線。

確認系統時間已經改變

 

連線還是維持強制加密: