이 문서에서는 SQL Server에서 TLS 1.2로 업그레이드한 후 발생할 수 있는 SSL(Secure Sockets Layer) 오류에 대한 정보를 제공합니다. 또한 데이터를 수동으로 검색할 수 있는 메서드도 나열합니다. SQLCHECK 도구를 실행하고 SQLCHECK 로그 파일의 정보를 검토할 수도 있습니다.
증상
TLS 프로토콜을 TLS 1.2로 업그레이드한 후 다음 문제가 표시될 수 있는 다음 시나리오를 고려합니다.
Microsoft SQL Server는 약한 해시 알고리즘으로 서명된 인증서를 사용합니다. 이러한 인증서에는 MD5, SHA224 및 SHA512가 포함됩니다.
TLS 1.2 업그레이드는 클라이언트 또는 서버에만 적용되었지만 둘 다 적용되지는 않았습니다.
TLS 1.0을 사용할 수 없습니다.
클라이언트와 서버 간에 일치하는 암호화 알고리즘이 없습니다.
이 시나리오에서는 업그레이드가 완료된 후 다음과 같은 문제가 발생합니다.
서버 인증서에 영향을 주는 문제는 클라이언트 컴퓨터의 로컬 연결 및 연결에도 영향을 줍니다. 자세한 내용은 SQL Server에 대한 연결 암호화를 참조 하세요.
애플리케이션에서 다음 오류 메시지 중 하나를 생성할 수 있습니다.
명명된 파이프
서버에 연결했지만 로그인하는 동안 오류가 발생했습니다. (공급자: SSL 공급자, 오류: 0 - 파이프의 다른 쪽 끝에 프로세스가 없음) Microsoft SQL Server, 오류: 233.
TCP
서버에 연결했지만 로그인하는 동안 오류가 발생했습니다. (공급자: SSL 공급자, 오류: 0 - 원격 호스트 10054에 의해 연결이 강제로 닫혔습니다.) Microsoft SQL Server, 오류: 233.
네트워크 캡처가 있는 경우 서버가 연결을 닫아 패킷에 응답하는 것을 보여 주는 다음 스크린샷과 유사할 Client Hello
수 있습니다.
해결
이러한 오류를 해결하려면 다음 단계를 따릅니다.
SQL Server 구성 관리자 열고 InstanceName에 대한 프로토콜을 <마우스 오른쪽 단추>로 클릭한 다음 속성을 선택합니다.
인증서 탭을 선택하고 사용 중인 인증서를 확인합니다.
인증서가 있는 경우 보기를 선택하여 검사한 다음 지우기를 선택합니다. 그런 다음, 4단계로 이동합니다.
인증서가 없는 경우 SQL Server 오류 로그 파일을 검사하여 해시 코드를 가져옵니다. 다음 항목 중 하나가 표시될 수 있습니다.
2023-05-30 14:59:30.89 spid15s The certificate [Cert Hash(sha1) "B3029394BB92AA8EDA0B8E37BAD09345B4992E3D"] was successfully loaded for encryption.
또는2023-05-19 04:58:56.42 spid11s A self-generated certificate was successfully loaded for encryption.
인증서가 자체 생성되면 2단계로 건너뜁니다.
MMC(Microsoft Management Console)에서 컴퓨터 인증서 저장소를 엽니다.
개인 인증서로 이동합니다.
의도된 목적 열을 확장하고 서버 인증에 사용할 수 있는 인증서를 두 번 클릭합니다.
지문이 오류 로그 파일의 지문과 일치하는지 확인합니다. 그렇지 않은 경우 다른 인증서를 시도합니다.
서명 해시 알고리즘을 확인합니다. MD5, SHA224 또는 SHA512인 경우 TLS 1.2를 지원하지 않습니다. 약한 알고리즘 중 하나인 경우 SQL Server에서 사용할 수 없도록 서버 인증을 사용하지 않도록 설정합니다.
인증서가 SQL Server 구성 관리자 명시적으로 지정된 경우 지우기를 선택하여 제거합니다.
MMC에서 인증서를 찾습니다.
MMC에서 인증서를 마우스 오른쪽 단추로 클릭한 다음 속성을 선택합니다.
일반 탭에서 인증서를 완전히 사용하지 않도록 설정하거나 선택적으로 서버 인증을 사용하지 않도록 설정합니다.
변경 내용을 저장합니다.
SQL Server를 다시 시작하십시오.
이제 오류 로그는 자체 생성된 인증서가 사용됨을 나타내야 합니다. 문제가 해결되면 자체 서명된 인증서를 사용하여 SQL Server를 성공적으로 실행할 수 있습니다. Verisign 또는 다른 인증서를 원하는 경우 TLS 1.2에 적합한 강력한 해시가 사용되는지 확인하도록 인증서 공급자에게 요청해야 합니다. 문제가 해결되지 않으면 2단계로 돌아갑니다.
사용 및 사용 안 함 TLS 프로토콜 확인
사용 및 비활성화된 TLS 프로토콜을 확인하려면 다음 단계를 수행합니다.
아직 수행하지 않은 경우 백그라운드 및 기본 업그레이드 워크플로를 확인합니다.
TLS 1.2를 적용하려면 클라이언트와 서버를 모두 업그레이드해야 합니다. 필요한 경우 서버를 업그레이드할 수 있지만 업그레이드되지 않은 클라이언트가 연결할 수 있도록 TLS 1.0을 사용하도록 설정할 수 있습니다.
REGEDIT를 사용하여 SSL 또는 TLS 레지스트리를 확인합니다.
다음 레지스트리 하위 키에서 사용 및 사용 안 함 SSL 또는 TLS 버전을 찾을 수 있습니다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
SSL 또는 TLS의 각 버전에 대한 클라이언트 및 서버 하위 키가 있으며 둘 다 사용 및 사용 안 함 값이 있습니다.
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001
참고 항목
0이 아닌 값은 TRUE로 처리됩니다. 그러나 1은 일반적으로 FFFFFFFF(또는 -1) 대신 선호됩니다.
호환되지 않는 설정이 없는지 확인합니다.
예를 들어 서버에서 TLS 1.0을 사용하지 않도록 설정하고 TLS 1.2를 사용하도록 설정합니다. 이러한 설정이 클라이언트의 설정과 일치하지 않거나 클라이언트 드라이버가 업데이트되지 않을 수 있기 때문입니다.
TLS 1.2를 설정
Enabled=0
하여 이 상황을 테스트할 수 있습니다(사용하지 않도록 설정된 경우 TLS 1.0을 다시 사용하도록 설정).SQL Server를 다시 시작하여 문제가 TLS 1.2와 관련이 있는지 또는 일반적인 문제인지 확인합니다.
일치하는 암호 그룹 없음
클라이언트 및 서버 TLS 버전 및 암호 그룹 및 Server Hello
패킷을 검사할 Client Hello
수 있습니다. 패킷은 Client Hello
모든 클라이언트 암호 그룹을 보급하고 패킷은 Server Hello
하나의 암호 그룹을 지정합니다. 일치하는 제품군이 없으면 서버는 패킷을 전송 Server Hello
하여 응답하는 대신 연결을 닫습니다.
네트워크 추적을 사용할 수 없는 경우 다음 레지스트리 하위 키에서 함수 값을 확인할 수 있습니다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002
일치하는 알고리즘이 표시되지 않으면 Microsoft 지원 문의하세요. 지원 엔지니어를 지원하려면 고급 SSL 데이터 캡처에 지정된 대로 네트워크 추적 또는 BID 추적을 캡처합니다.