問題
最近朋友詢問一個從 Visual Studio 2022
透過 Web Deploy 發佈到 Windows 2019
IIS 上的問題。
主要是因為他將 IIS Server 上的 RC4
及 Triple DES
Cipher Disable 掉,
1 | [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 128/128] |
結果導致發佈發生錯誤,訊息如下,
Microsoft.NET.Sdk.Publish.MSDeploy.targets(140,5): 錯誤 : Web 部署工作失敗。(無法完成對遠端代理程式 URL ‘https://win2019-test:8172/msdeploy.axd?’ 的要求)
錯誤詳細資料:
無法完成對遠端代理程式 URL ‘https://win2019-test:8172/msdeploy.axd?’ 的要求。
基礎連接已關閉: 傳送時發生未預期的錯誤。
無法從專輸連接讀取資料: 遠端主機已強制關閉一個現存的連線。。
遠端主機已強制關閉一個現存的連線。
發佈無法部署。
從 Wireshark
發現,Client 發出 Client Hello
後,就被 Server RST, ACK
掉了。
研究與解法
從網路上有查到 Microsoft.Web.Deployment : An existing connection was forcibly closed by the remote host. 似乎是一樣的錯誤,
但設定了 Client 與 Server 的機碼後,還是一樣的錯誤。
於是在 PowerShell
中透過 curl
來測試看看curl https://win2019-test
會發生 基礎連接已關閉: 無法為SSL/TLS 安全通道建立信任關係
curl https://win2019的FQDN
會正常給出頁面資料curl https://win2019-test:8172
會發生 基礎連接已關閉: 傳送時發生未預期的錯誤
/ 客戶端與伺服器無法溝通,因為它們沒有公用的演算法 | The client and server cannot communicate, because they do not possess a common algorithm
猜想有可能是憑證的問題,與朋友討論是用 FQDN 的憑證或是 自簽憑證,
後來朋友將原本使用 自簽憑證 改成 FQDN 的憑證後,
就可以正常部署了。
猜想或許 Client 端給出的演算法不在 Server 端 自簽憑證所支援的演算法範圍中, 或許再建立一個新的自簽憑證也可以 Pass
最後,感謝 聖德 一起研究
參考資源
Microsoft.Web.Deployment : An existing connection was forcibly closed by the remote host.
Visual Studio 2019 的 WebDeploy 到 IIS 發生憑證無效
再遇 C# 與 PowerShell 「基礎連接已關閉」錯誤