c# SslException:SSL 握手失败,出现 OpenSSL 错误 - SSL_ERROR_SSL

问题描述 投票:0回答:2

此错误发生在单个端点上。 它试图从 SqlServer 中提取数据。 如果我尝试运行 IIS,一切都会正常。 当我在 linux docker 容器中运行时,它不再工作了。 我有以下错误:

OpenSslCryptographicException:错误:1425F102:SSL 例程:ssl_choose_client_version:不支持的协议

地点未知 SslException:SSL 握手失败,出现 OpenSSL 错误 - SSL_ERROR_SSL。

Interop+OpenSsl.DoSslHandshake(SafeSslHandle上下文,ReadOnlySpan输入,out byte[] sendBuf,out int sendCount) AuthenticationException:身份验证失败,请参阅内部异常。

System.Net.Security.SslStream.ForceAuthenticationAsync(TIOAdapter 适配器,bool receiveFirst,byte[] reAuthenticationData,bool isApm) SqlException:已成功与服务器建立连接,但在登录前握手期间发生错误。 (提供者:TCP 提供者,错误:35 - 捕获内部异常)

Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException异常,布尔breakConnection,操作wrapCloseInAction)

SecurityNegotiationException:无法为具有权限“....”的 SSL/TLS 安全通道建立信任关系。

在此输入图片描述

.net sql-server-2012 sslhandshakeexception sslexception
2个回答
6
投票

如果绝对需要,您可以在运行时 Docker 容器中降低 OpenSSL 所需的最低 TLS 版本。在

Dockerfile
中的 ENTRYPOINT 之前的某个位置添加以下行:

# fix for SQLServer 2008 R2 - reduce minimum protocol to tls v1.0
RUN sed -i -e "s|^MinProtocol = .*|MinProtocol = TLSv1.0|g" "/etc/ssl/openssl.cnf"

但是升级 SQL Server 以使其支持最新的 TLS 版本似乎是一个正确的解决方案。


0
投票

您也可以尝试在连接字符串上添加

Encrypt=false

© www.soinside.com 2019 - 2024. All rights reserved.