[C#] 透過 ClickOnce 發布 WPF 程式,安裝後程式發送 HTTPS Request 時會有 Exception

最近碰到一個很弔詭的問題,透過 VS 直接對 WPF 程式跑 Debug mode,可以正常發送 HTTPS Request,但只要將此 WPF 透過 ClickOnce 發布後,發送 HTTPS Request 就會有 Exception。

Exception 的內容為 The request was aborted: Could not create SSL/TLS secure channel

不論將 .Net Framework 版本切換至 4.6.1 4.6.2 4.7 4.7.1 4.7.2 都無法解決此問題。

上網 Google 了一下,找到兩種可能的解法

  1. 透過設定 ServicePointManager.ServerCertificateValidationCallback,避開程式在發出 HTTPS Request 時,因簽章問題而導致發送失敗。嘗試此解法過後,確定無法解決。
    ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
  2. 將 ServicePointManager.SecurityProtocol 設定為 Tls, Tls11, Tls12, Ssl3,此方法可用!!!
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
            | SecurityProtocolType.Tls11
            | SecurityProtocolType.Tls12
            | SecurityProtocolType.Ssl3;

 

事後追查,跑 Debug Mode 時的 ServicePointManager.SecurityProtocol 為 SystemDefault;透過 ClickOnce 安裝後的 ServicePointManager.SecurityProtocol 卻變成 Ssl3, Tls,但目前還不知道是什麼原因導致這個差異...。