之前寫了乙個桌面程式,程式會間歇性訪問某個https介面,一直用的好好的,今天突然報錯了,異常就發生在訪問介面的地方,曰「請求被中止,未能建立 ssl/tls 安全通道。」,另外有台電腦也有跑該程式,也是同樣的報錯,看來是介面方改動過什麼了。
搜尋一番,原因應該是,介面方變更了安全協議,而客戶端並未啟用該協議。解決辦法自然就是:讓客戶端啟用該協議。具體就是在發起網路請求之前確保servicepointmanager.securityprotocol中含有服務端所用的安全協議,如果不知道或希望客戶端健壯一點,當然最簡單的方式就是把所有可用的協議都啟用,隨你服務端將來怎麼換。**如下:
servicepointmanager.securityprotocol = securityprotocoltype.ssl3但如果客戶端是基於.net framework 4.0,securityprotocoltype列舉中並沒有tls11和tls12,這就需要直接填值:| securityprotocoltype.tls
| securityprotocoltype.tls11
| securityprotocoltype.tls12;
servicepointmanager.securityprotocol = securityprotocoltype.ssl3如此即可。| securityprotocoltype.tls
| (securityprotocoltype)0x300 //tls11
| (securityprotocoltype)0xc00; //tls12
事實上,這個問題正是因為我的客戶端是基於.net 4.0的,而4.0的servicepointmanager.securityprotocol預設就不含tls11和tls12,所以當服務端改用這兩種安全協議時,自然訪問不了。
201903081051更新:
然而事情並沒有這麼簡單,按上述方法改好程式後,在有些電腦是能正常工作了,但在有臺電腦仍然報錯,只不過報錯變成了「the requested security protocol is not supported」,中文應該是「不支援請求的安全協議」。搜尋得知,需要在電腦上安裝.net 4.5或更高版本的框架才行,對,即便程式專案框架只是4.0。
也就是說,如果作業系統是nt5.x(xp/2003),沒戲,因為xp最高只能安裝到.net 4.0,只能公升級系統;而如果程式是基於4.0以下的版本,如2.0、3.5,那安裝4.5+也不行,能不能解決和怎麼解決我不知道,這篇文章看似相關,但我沒實踐,讀者有需要的話可自行嘗試。
相信隨著越來越多服務端採用新協議,老邁的nt5.x以後會連上網都成問題,這是乙個活生生的因發展而造成老產品被實質淘汰的案例。
以上是網上找到的解決方案,然而我參照修改之後仍然無法訪問,還是報 未能建立 ssl/tls 安全通道 ,
此時又想到乙個問題,有可能是通道被關閉了,
用工具iiscrypto檢查後發現確實如此,
解決「未能建立 SSL TLS 安全通道」異常
引用 之前寫了乙個桌面程式,程式會間歇性訪問某個https介面,一直用的好好的,今天突然報錯了,異常就發生在訪問介面的地方,曰 請求被中止,未能建立 ssl tls 安全通道。另外有台電腦也有跑該程式,也是同樣的報錯,看來是介面方改動過什麼了。搜尋一番,原因應該是,介面方變更了安全協議,而客戶端並未...
未能建立輸出目錄 release 遊戲廣場
環境 1.win7 專業版 2.vs2003 用vs2003編譯,但是報錯,提示 未能建立輸出目錄 首先想到,設定的編譯目錄,右擊工程 屬性 生成事件 生成後事件 命令列有執行的語句 檢視後沒發現問題,鬱悶了乙個下午。後來看報錯日誌無意發現錯誤 買個關子,上圖讓大家自己看看 下圖,任務列表欄報錯 下...
解決 lifelines anaconda安裝失敗
先說明一下 我的anaconda安裝路徑設定的是國內映象,不是官方預設的路徑 在anaconda安裝lifelines,1 首先用的命令是 conda install lifelines,結果 不成功。2 接著用從lifelines說明書上寫的命令 conda install c conda for...