今天在Windows Admin Center裡試圖安裝擴充套件外掛的時候遇到一個問題。在可用外掛裡沒有任何顯示,包括各種微軟自己開發的外掛。
在Feeds裡刪除預設的連結,重新新增的時候也會遇到報錯。說這不是一個有效的NuGet Feed。
經過檢查,在其它WAC的設定中,這裡也是同樣的預設設定,是可以列出可用的擴充套件的。接著,就是要驗證一下是否這個地址真的有問題,無法存取。在安裝WAC的伺服器上,存取一下這個地址https://aka.ms/sme-extension-catalog-feed 結果遇到一個TLS的報錯。
這個好解決。啟用這個伺服器上對TLS1.2的支援就可以了。就是一些登入檔鍵值。這個網上有很多文章。具體就是在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client
下面新建兩個RED_DWORD的鍵值DisabledByDefault和Enabled。https://www.cnblogs.com/qishine/p/16700672.html
另外,IE選項裡的高階設定裡需要把TLS1.2也啟用。重啟系統後可以再試一下存取。因為TLS協定設定必須重啟生效。
同時,也順便增加Powershell使用TLS 1.2的存取,因為預設是不帶的。 以前的文章裡提到過,用一條命令就可以了。
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
重啟後,發現問題依舊。這時候,再用Firefox試了一下,發現這個地址是可以開啟的。
那麼,現在問題就很明確了,問題出在IE這裡。系統本身無法存取肯定和IE的表現一樣。既然都按照要求設定了TLS1.2,那麼到底哪裡出問題了呢?這時候用之前文章裡提到過的ssllabs網站,檢測一下這個網站支援的協定。
可以看到,支援TLS 1.2和1.3。不過我的Windows 2016伺服器,不支援TLS 1.3的。所以現在問題來了,TLS 1.2究竟啟用成功了嗎?這個需要驗證一下。於是,只能先抓包看一下了。
可以看到,確實是用到了TLS 1.2但是,隨後這個連結就被伺服器reset了,導致無法連線。接下去需要比對一下正常情況時的包。
可以看到正常的情況下,在Client Hello之後,會有Server Hello的回包。這裡首先確定也是TLS 1.2協定。但是為什麼同樣的協定IE和Firefox表現會不同呢?再仔細看Server Hello的回包,裡面顯示了使用的加密演演算法TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384。這個對比前面IE的Client Hello裡提到的20種加密演演算法,仔細檢視是確實沒有的。所以,思路來到怎麼增加這種加密演演算法呢?
經過查詢,微軟在Windows 2016的時候引入了TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384。具體可以看這篇官方文章https://docs.microsoft.com/en-us/windows-server/security/tls/tls-schannel-ssp-changes-in-windows-10-and-windows-server
也就是說不可能是因為系統版本過低導致的問題。而且Firefox也確實使用了這個加密演演算法。要啟用這種演演算法,或者說調整演演算法的優先順序,可以通過組策略。具體位置是Computer Settings--Administrative Templates--Network--SSL Configuration Settings中的SSL Cipher Suite Order。這個策略預設是不啟用的。
找打它,啟用後會發現我們需要TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384是包含在裡面的。然後gpupdate /force,我這裡又重啟了一下伺服器。
重新啟動後,問題解決。
其實仔細看之前的IE報錯,它提到了是使用了不支援的協定或者加密演演算法比如RC4。今天的問題就是加密演演算法不支援,伺服器和使用者端沒有協商通過。
但是仔細看了一下ssllabs的檢查也包含了加密演演算法。
仔細看,這裡TLS 1.2支援的強加密演演算法只有3種。IE試圖使用的20種演演算法裡有不少是受支援的弱加密演演算法,比如0x28, 0x27, 0x14等。但是很奇怪不知道為什麼伺服器不使用就直接重置了連結,或許是微軟伺服器的安全性特別高吧。還有就是儘量用最新的系統,比如Windows server 2022,就能支援TLS 1.3更安全也能避免很多問題了。