近期在進行服務器TLS協議安全加固的過程中,發現了MySql.Data對TLS版本的限制。
具體操作是準備取消不安全協議TLS1.0和1.1的支持,於是通過工具將服務器的Server、Client協議的1.0、1.1均取消勾選,結果在測試服務器重啓生效後發現程序啓動失敗了。
失敗原因爲:因爲算法不同,客戶端和服務器無法通信。
相關堆棧如下:
經過附加進程調試,確認了msyql數據庫連接並沒有使用tls,且根據堆棧判斷異常確實是在連接MySQL服務器步驟。
最後反編譯MySql.Data.dll代碼後看到了異常原因:代碼中寫死了TLS1.0版本的協議。
MySql.Data版本=6.9.9.0
看來,服務器的Client協議不能取消TLS1.0版本了,將其修改後重啓驗證故障恢復。
同時,查看了MySql.Data 8.0版本源碼後可以看到已經對其優化,已不存在此限制了:
結論
如果使用的MySql.Data版本爲6.x,則調整服務器的Client TLS版本時必須要保留TLS1.0