Server/Windows Server
IIS Crypto 적용 시 주의? 유의 사항 구버전 MS SQL 연결 - 추천 Cipher Suites
달빛에취하다
2022. 7. 22. 17:58
글 작성일은 2022년 7월 22일 입니다.
시간이 갈 수록 변화하기 때문에 작성 일자를 적어 둡니다.
IIS Crypto로 Windows Server의 TLS 버전 제한 및 cipher suites 제한시 MSSQL 연결에 문제가 생길 수 있습니다.
(구버전 SQL 서버)
System.Data.SqlClient.SqlException (0x80131904): 서버에 연결했지만 로그인하는 동안 오류가 발생했습니다. (provider: SSL Provider, error: 0 - 현재 연결은 원격 호스트에 의해 강제로 끊겼습니다.) ---> System.ComponentModel.Win32Exception (0x80004005): 현재 연결은 원격 호스트에 의해 강제로 끊겼습니다 --- 내부 예외 스택 추적의 끝 --- 위치: System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling, SqlAuthenticationProviderManager sqlAuthProviderManager) 위치: System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) 위치: System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) 위치: System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) 위치: System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) 위치: System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) 위치: System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) 위치: System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) 위치: System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) 위치: System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) 위치: System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) 위치: System.Data.SqlClient.SqlConnection.Open()
MSSQL의 TDS 연결은 TLS 1.0, TLS 1.1 사용하기에 Windows Server의 Client TLS 버전은 1.2로 제한할 경우 위와 같은 오류가 발생할 수 있습니다.
추천하는 방법은 아래와 같습니다.
* 해당 설정은 WAS로 사용되는 IIS 서버에서 설정한 내용입니다.
1. Schannel
Hashes에서 SHA 선택, Client Propocols 에서 TLS 1.0, TLS 1.1 추가 선택
2. Cipher Suites
붉은색 부분 - TLS 1.2 사용
녹색 부분 - TLS 1.2 사용이나 Week 상태의 Cipher Suites 입니다. 하위 브라우저 호환을 위해서 선택,
파란색 부분 - SQL 하위 버전 연결을 위해서 사용하는 Cipher Suites 입니다.