學新東西時最怕有其他系統問題來亂,你通常先檢討自己程式沒寫好或漏掉什麼關鍵,查又查試了又試,依然連簡單到靠北的範例都做不出來,沮喪到懷疑人生...

這幾天在練習寫 Azure AI 程式,便遇上了這種狀況。

照著 PowerShell 跟 C# 範例初步測試成功,陸續加了邏輯也順利執行,但改一改 C# Azure Speech SDK 程式忽然噴出錯誤,訊息像是連線不通,但有時又會成功(原因最後再解釋):

RuntimeError
[Internal error: HttpAPI failed - Failed with error: HTTPAPI_OPEN_REQUEST_FAILED [0x3]  

ServiceTimeout
USP error: timeout waiting for the first audio chunk]

經過一番調查,大致推測是連線方面有問題,但 PowerShell 範例直接呼叫 REST Api 又始終正常。射茶包射到萬念俱灰了無生趣,回頭專心爬文,查到關鍵討論,原來這是個熱騰騰的茶包,微軟在 10/12 釋出了 Windows 10 安全更新 KB5018410 (Windows 11 KB5018418 / Windows Server 2019 KB5018419 似乎也有災情) 修改了作業系統層的 TLS 行為,造成許多 TLS 相關程式發生異常:

Windows 10/11 patch on Tuesday that changed the behavior of TLS in the operating system. Speech SDK is not the only ones impacted and a wide variety of TLS-dependent service use started failing with the latest patches.

查了我的電腦,果然有 KB5018410,中!

再找到相關報導,這次更新停用了 TLS 1.0/1.1 應是所有問題根源。(想起兩年前停用 TLS 1.0/1.1 後雞飛狗跳的場景,沒想到會再次回味)

找到一些其他災情相關討論:

停用 TLS 1.0/1.1 是趨勢,若軟體或程式庫沒跟上,一停用馬上掛的狀況因為之前體驗過了,這回心情倒是異常平靜 😄 就看看怎麼處理吧?

微軟的這篇 KB KB5017811- 在 2022 年 9 月 20 日預設行為變更之後,管理 TLS 1.0 和 1.1 的傳輸層安全性 有一些相關說明跟因應方式,但我嘗試加了 Registry 都沒成功,最後決定回歸最無腦最快的解法 - 解除安裝:

重開機再測,問題便消失了。後續就等 Azure Speech SDK 更新或 Windows 有另外修補更新再把 KB5018410 裝回去吧。

最後,揭曉「為何明明有 TLS 問題,PowerShell 沒問題,C# 測試時好時壞?」

PowerShell 是用 Invoke-RestMethod 呼叫 API,背後是 .NET HttpWebRequset;而 C# 用的 Azure Speech SDK,依賴原生 dll 連線 API,由錯誤訊息推測是用 openssl 程式庫,走的路不同,故只有 SDK 受影響。而時好時壞則因為我有幾次開了 Wireshark/Fiddler 偵察,意外影響底層網路傳輸行為,繞開了 Bug,測試就成功了,因此留下時好時壞的印象。

【2022/10/18 更新】微軟已釋出 KB5020435 修正,實測可修正 Speech SDK 問題。延伸閱讀:掌握 Windows 更新第一手消息


Comments

# by pplovebobo

然後我這邊的是Exchange Server 2010只有 TLS 1.0 ...上KB5018410之後就會出現 Outlook無法連線至Proxy伺服器 錯誤代碼80000000...改登錄檔也是沒用www只好移除啦!!

# by 樂透無名

感謝大德提供測試過程

Post a comment


31 + 10 =