Отключение TLS 1.0 в Win2008 R2 нарушает работу наших веб-сайтов IIS

Я надеюсь, что это правильный форум; Сначала я разместил это на суперпользователе стека и сразу же получил минусы без каких-либо объяснений. Затем я зашел на сайт сетевой инженерии Stack, но там не было ни одного из моих тегов... так что теперь я пробую здесь. Я буду счастлив переместить это в правильный форум, когда я знаю.

Мы используем Windows Server 2008 R2. TLS 1.0 уже некоторое время не совместим с PCI, и отключить его через реестр Windows несложно. Однако в прошлом отключение TLS 1.0 вызывало у нас 2 проблемы:

  1. Невозможно подключиться к серверу через удаленный рабочий стол.
  2. Наши веб-сайты IIS 6.1 становятся недоступными.

Проблема №1 была устранена с помощью патча MS KB3080079, но наши веб-сайты по-прежнему отключаются из-за как только TLS 1.0 будет отключен. Что мне нужно сделать, чтобы поддерживать IIS и сайты в сети при отключении TLS 1.0?

Вот сообщение об ошибке, которое появляется только при отключении TLS 1.0 в реестре и после перезагрузки сервера:

Server Error in '/' Application.
The system cannot find the file specified
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.ComponentModel.Win32Exception: The system cannot find the file specified

Source Error: An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace: [Win32Exception (0x80004005): The system cannot find the file specified]

[SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)]
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +6749670
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +815
   System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean withFailover) +6775368
   System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) +219
   System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) +6777754
   System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance) +6778255
   System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData) +878
   System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) +1162
   System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) +72
   System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) +6781425
   System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) +103
   System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) +2105
   System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) +116
   System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) +1089
   System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +6785863
   System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) +233
   System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +278
   System.Data.SqlClient.SqlConnection.Open() +239
   System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +292
   System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior) +487
   System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) +296
   FitTrack.Objects.Helper.Utilities.GetDataTableForQuery(String sql, Hashtable paramList, Boolean isStoredProc) +1002
   FitTrack.Objects.Helper.Utilities.GetDataTableForQuery(String sql, Hashtable paramList) +63
   FitTrack.Objects.Base.FitTrackPage.GetFitTrackPage(String pageName) +197
   FitTrack.Objects.Base.FitTrackBase.Authenticate(Boolean redirect, Boolean isloginpage, Boolean checkreg, Boolean isPayrollReport) +659
   FitTrack.Default.Page_PreInit(Object sender, EventArgs e) +68
   System.Web.UI.Page.PerformPreInit() +49
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1844

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.34280

Примечание. TLS 1.1 и 1.2 были вручную включены в реестре.


person HerrimanCoder    schedule 01.09.2016    source источник
comment
Как именно вы отключили TLS 1.0 и включили TLS 1.1/1.2 (я имею в виду какие записи реестра)? Попробуйте явно включить TLS 1.1/1.2, как описано здесь. На каких серверах/рабочих станциях вы используете IIS 6.1?   -  person Oleg    schedule 01.09.2016
comment
Все это я уже делал раньше (Windows Server 2008 R2), но, возможно, я что-то не так понял. Также я использовал инструмент IISCrypto. Я попробую еще раз, но нужно ли мне что-то делать с IIS 6, чтобы мои сайты не зависали после внесения этого изменения? Это должно работать автоматически? И должен ли я отключить оба TLS 1.0 и 1.1?   -  person HerrimanCoder    schedule 01.09.2016
comment
Вы пишете об IIS 6 или IIS 6.1, не публикуя никакой информации об операционной системе (с пакетом обновлений), которую вы используете. На каких серверах/рабочих станциях вы используете IIS 6.1/6.0? Если вы хотите решить проблему, вам не следует использовать какие-либо инструменты (например, IISCrypto) в качестве черного ящика и вносить все изменения вручную. Какие изменения вы внесли в реестр (устанавливали ли вы некоторые значения DisabledByDefault и Enabled в подразделах Client или Server раздела TLS 1.1 или TLS 1.0 раздела HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols)?   -  person Oleg    schedule 01.09.2016
comment
Олег, и в заголовке, и в исходном посте указано Windows Server 2008 R2.   -  person HerrimanCoder    schedule 02.09.2016
comment
Похоже, у вас в настоящее время проблема только с SQL Server. Какую версию SQL Server вы используете? Вы установили исправление, описанное здесь и здесь и здесь?   -  person Oleg    schedule 02.09.2016


Ответы (1)


Я думаю, что обнаружил, что SQL Server на самом деле является причиной проблемы, когда TLS 1.0 отключается. (Что приводит к сбою всех наших веб-сайтов.) Для этого есть решение: https://support.microsoft.com/en-us/kb/3135244

person HerrimanCoder    schedule 02.09.2016