情境
最近踩到 dotnet core 3 contaienr + ms sql 2016 的問題,問題的現象是,程式只要跑到建 sql connection 那行就會 hang 在那邊,沒有 timeout 也沒有 Exception … 追查之下後發現,原來 MS SQL 2016 如果沒有調整更新,預設 TLS 好像只支援 1.0、1.1 (待確認),而我用的 base image : mcr.microsoft.com/dotnet/core/runtime:3.1
的 TLS 設定要求最低版本是 1.2,這也就引發了上述的狀況
1 | cat /etc/ssl/openssl.cnf |
解法
一般來說,基於安全性會建議至少停用 TLS 1.0 並支援 1.2 才是比較好的做法,但如果你跟我一樣只是在測試,那可以採用以下比較 workaround 的做法,在 dockerfile 加上以下幾行來調整 container tls 最低支援版本
1 | RUN sed -i 's/DEFAULT@SECLEVEL=2/DEFAULT@SECLEVEL=1/g' /etc/ssl/openssl.cnf |
這樣重新啟動也就會正常了