在 SQL Server 上禁用 SSL,现在连接失败

Mik*_*e_G 7 sql-server connectivity ssl

我有一个客户担心最新的 SSL 漏洞POODLE。他们有一个实用程序 ( IIS Crypto 1.4 ),可以在运行它的服务器上禁用 SSL 2.0-3.0。他们在我的服务运行的服务器和远程 SQL Server 上都禁用了 SSL。SQL 连接字符串非常标准:

Server=myServerIPAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;
Run Code Online (Sandbox Code Playgroud)

当我的服务启动时,它尝试执行 Linq to SQL 查询并收到错误:

已成功与服务器建立连接,但在登录前握手期间发生错误。(提供者:TCP 提供者,错误:0 - 远程主机强行关闭了现有连接。)

如果他们在 SQL Server 上重新启用 SSL,它就可以正常工作。我的程序是基于 .NET 3.5 构建的 Windows 服务。此错误的原因是什么,我可以在哪里进行调整以运行我的服务?

编辑:下面是我的程序在尝试加载时吐出的堆栈跟踪

System.Data.SqlClient.SqlException: A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) 
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) 
at System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean encrypt, Boolean trustServerCert, Boolean& marsCapable) 
at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnection owningObject) 
at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject) 
at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart) 
at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) 
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) 
at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) 
at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) 
at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) 
at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) 
at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) 
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 
at System.Data.SqlClient.SqlConnection.Open() 
at System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser user) 
at System.Data.Linq.SqlClient.SqlProvider.get_IsSqlCe() 
at System.Data.Linq.SqlClient.SqlProvider.InitializeProviderMode() 
at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) 
at System.Data.Linq.DataQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() 
at System.Linq.Buffer`1..ctor(IEnumerable`1 source) 
at System.Linq.Enumerable.ToArrayTSource(IEnumerable`1 source) 
Run Code Online (Sandbox Code Playgroud)

小智 1

只是一个大胆的猜测,但我首先会查看 Sql Server 配置管理器,看看该实例的“强制加密”标志是否打开。仅仅因为他们“禁用了 SSL”,并不意味着他们已经告诉 SQL Server 非 SSL 连接是可以的。

否则请参阅上面有关 SQL Server 错误日志的注释。