.NetCore3.0 docker 中連接 SqlServer 提示 連接成功,但是握手失敗(upsupported protocol)的解決方案

起因

在 Windows 上開發環境運行的好好的一個工程,上到 docker 中就報錯,於是一頓查問題,最終得以解決。

打怪:

可以看到訪問接口報錯:

錯誤
但是這個信息不是很清楚,我們需要更詳細的錯誤信息。

找到 log 下的具體 log 文件

可通過 docker cp 容器ID:目錄/文件 本機路徑來拷貝容器內的日誌或者其他文件到本機,方便進行查看。
詳細錯誤
可以看到,routines:ssl_choose_client_version:unsupported protocol很明確的是不支持的 openssl 協議

確定容器當前使用協議

現在我們需要進入容器,命令docker exec -it 容器ID /bin/bash
進入之後,執行 openssl version,可以看到結果:OpenSSL 1.1.1d 10 Sep 2019
在這裏插入圖片描述

查看默認支持的最低協議

命令docker cp 容器ID:/etc/ssl/openssl.cnf 本機地址
拷貝到本機後,打開搜索system_default_sect,如下:TLSv1.2
在這裏插入圖片描述

查看目標 Server 版本

看了我需要連接的 Sql Server 的版本,微軟官方的版本支持對應列表,發現不支持 TLS 1.2,只支持 TLS 1.1
所以調整版本爲 1.1 即可,修改 Dockerfile,加入如下命令:
RUN sed -i 's/TLSv1.2/TLSv1.0/g' /etc/ssl/openssl.cnf
然後重新構建鏡像,成功連接!

參考連接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章