.net Core Docker釋出連線SqlServer遇到的的一些問題
阿新 • • 發佈:2021-07-05
使用Docker釋出.NetCore,後臺使用SqlServer 出現了握手問題。如下
System.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 35 - An internal exception was caught)
原因:允許的 ssl 最低版本是TLSv1.2
,而程式所使用的 SQL Server 資料庫版本比較低不支援TLSv1.2
,修改為TLSv1.0
後問題解決
解決方法: 在DockerFile中新增指令
RUN sed -i 's/TLSv1.2/TLSv1.0/g' /etc/ssl/openssl.cnf
正常報35的問題就會解決,但是加上這一句後會出現新的問題
A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: SSL Provider, error: 31 - Encryption(ssl/tls) handshake failed)
原因:openssl.cnf 配置檔案中有一句
[system_default_sect] MinProtocol = TLSv1.0 CipherString = DEFAULT@SECLEVEL=2
似乎是.Net 5.0不支援 這個值為2,修改成
[system_default_sect]
MinProtocol = TLSv1
CipherString = DEFAULT@SECLEVEL=1
並在CMD中執行 docker cp e:/openssl.cnf festive_rubin:/etc/ssl/openssl.cnf (e:/為openssl.cnf檔案地址estive_rubin為Docker名稱)
執行後問題解決。