원래 제품 버전: SQL Server
원래 KB 번호: 2007728
요약
이 문서에서는 클라이언트가 SQL Server 대한 암호화된(TLS) 연결을 만들 때 발생하는 "원격 서버에서 받은 인증서가 신뢰할 수 없는 인증 기관에 의해 발급된 인증서" 오류를 해결하는 데 도움이 됩니다. 이 오류는 일반적으로 발급 CA(인증 기관)가 클라이언트의 신뢰할 수 있는 루트 인증 기관 저장소에 없거나 SQL Server 자체 서명된 인증서를 사용하기 때문에 TLS 핸드셰이크 중에 SQL Server 인스턴스가 제공하는 인증서의 유효성을 검사할 수 없음을 의미합니다.
클라이언트 컴퓨터에 발급 CA 인증서를 설치하거나, 유효성 검사 없이 서버 인증서를 신뢰하거나( 보안 서버 인증서 설정) 클라이언트 또는 서버에서 암호화 구성을 변경하여 오류를 해결합니다. 여러 클라이언트 드라이버 및 도구의 최신 버전에서 암호화가 필요하도록 기본값을 변경했기 때문에 서버에서 아무것도 변경되지 않았더라도 드라이버 또는 도구 업그레이드 후에 이 오류가 표시될 수 있습니다.
증상
SQL Server 연결할 때 다음 오류 메시지가 표시될 수 있습니다.
서버에 연결했지만 로그인하는 동안 오류가 발생했습니다. (공급자: SSL 공급자, 오류: 0 - 신뢰할 수 없는 기관에서 인증서 체인을 발급했습니다.) (.Net SqlClient Data Provider)
또한 다음 오류 메시지가 Windows 시스템 이벤트 로그에 기록됩니다.
Log Name: System
Source: Schannel
Date: 10/13/2020 3:03:31 PM
Event ID: 36882
Task Category: None
Level: Error
Keywords:
User: USERNAME
Computer: COMPUTERNAME
Description:
The certificate received from the remote server was issued by an untrusted certificate authority. Because of this, none of the data contained in the certificate can be validated. The TLS connection request has failed. The attached data contains the server certificate.
원인
이 오류는 클라이언트가 확인할 수 없는 인증서를 사용하여 SQL Server 암호화된 연결을 만들 때 발생합니다. 이 동작은 다음 시나리오에서 발생합니다.
| 시나리오 | 서버 쪽 암호화 | 클라이언트 쪽 암호화 | 인증서 유형 | 신뢰할 수 있는 루트 인증 기관 저장소에 있는 인증서 발급 기관 |
|---|---|---|---|---|
| 1 | 예 | 아니요 | 클라이언트가 신뢰하지 않는 원본의 인증서(발급 기관은 클라이언트 컴퓨터의 신뢰할 수 있는 루트 인증 기관에 나열되지 않음) | 아니요 |
| 2 | 아니요 | 예 | SQL Server 생성하는 자체 서명된 인증서 | 아니요. 자체 서명된 인증서는 이 저장소에 표시되지 않습니다. |
클라이언트가 SQL Server 대한 암호화된 연결을 설정하면 보안 채널(Schannel)은 로컬 컴퓨터에서 신뢰할 수 있는 루트 인증 기관 저장소를 검색하여 신뢰할 수 있는 인증 기관 목록을 작성합니다. TLS 핸드셰이크 중에 서버는 클라이언트에 공개 키 인증서를 보냅니다. 공개 키 인증서의 발급자를 CA(인증 기관)라고 합니다. 클라이언트는 CA를 신뢰하는지 반드시 확인해야 하며, 이를 위해 신뢰할 수 있는 CA들의 공개 키를 미리 알고 있어야 합니다. Schannel이 이전 두 시나리오와 같이 신뢰할 수 없는 인증 기관에서 발급한 인증서를 검색하면 증상 섹션에 오류 메시지가 표시됩니다.
적합한 인증서가 구성되거나 검색되지 않으면 데이터베이스 엔진 시작하는 동안 자체 서명된 대체 인증서를 생성합니다. 이 인증서를 사용하여 로그인 자격 증명을 암호화하고 서버 쪽 또는 클라이언트 쪽 암호화를 사용하는 경우 전체 연결을 사용합니다. 기본적으로 자체 서명된 인증서를 신뢰하는 클라이언트가 없으므로 클라이언트와 서버가 동일한 컴퓨터에서 실행되는 경우에도 SQL Server 기본 설치 시 이 오류가 발생할 수 있습니다. 자세한 내용은 로그인 패킷 암호화와 데이터 패킷 암호화를 참조하세요.
드라이버 또는 도구 업그레이드 후 이 오류가 표시되는 이유
다음 표의 클라이언트 드라이버 및 도구 버전에서 암호화를 요구하도록 기본값을 변경했습니다. 이러한 버전 중 하나로 업그레이드한 후 클라이언트는 연결을 암호화하고 서버 구성이 변경되지 않았더라도 서버 인증서의 유효성을 검사합니다. 이전 버전에서는 기본적으로 암호화가 필요하지 않았으므로 명시적으로 암호화를 요청하지 않는 한 인증서의 유효성이 검사되지 않았습니다.
| 클라이언트 드라이버 또는 도구 | 버전 | 기본 암호화 동작 |
|---|---|---|
Microsoft OLE DB Driver for SQL Server(MSOLEDBSQL19) |
19개 이상 버전 |
Encrypt 기본값: Mandatory |
| Microsoft ODBC 드라이버 - SQL Server용 | 18개 이상 버전 |
Encrypt 기본값: Mandatory |
Microsoft.Data.SqlClient |
4.0 이상 버전 |
Encrypt 기본값: True |
| SQL Server Management Studio(SSMS) | 20개 이상 버전 | 암호화 기본값은 필수입니다. |
애플리케이션을 SQL Server Native Client 11.0(SNAC)에서 Microsoft OLE DB Driver 19 또는 Microsoft ODBC Driver 18로 마이그레이션한 직후 이 오류가 표시되는 경우 드라이버 업그레이드 후 신뢰할 수 없는 인증서 체인을 참조하세요.
SNAC는 SQL Server 2022(16.x) 이상 버전 또는 SSMS 19 이상 버전과 함께 제공되지 않으며 새 개발에는 권장되지 않습니다. Microsoft OLE DB Driver for SQL Server, Microsoft ODBC Driver for SQL Server 사용하거나 Microsoft.Data.SqlClient 대신 사용합니다. 자세한 내용은 SQL Server Native Client에 대한 지원 정책을 참조하세요.
해결 방법
비독점 기관의 인증서 또는 자체 서명된 인증서를 의도적으로 사용하여 SQL Server 연결을 암호화하는 경우 다음 옵션 중 하나를 사용합니다.
- 인증서 유효성 검사를 유지하고 신뢰 문제를 영구적으로 해결하려면 옵션 1: 클라이언트 컴퓨터에 인증 기관을 설치합니다.
- 인증서를 설치하지 않고 즉시 연결하려면 옵션 2: 서버 인증서의 유효성을 검사하지 않고 신뢰합니다. 이 옵션은 가장 빠른 수정이며, 대부분의 사용자가 기본 자체 서명된 인증서를 사용할 때 SQL Server 필요한 옵션입니다.
- 암호화 요구를 중지하거나 신뢰할 수 있는 기관의 인증서로 바꾸려면 옵션 3: 암호화 구성을 변경합니다.
옵션 1: 클라이언트 컴퓨터에 인증 기관 설치
시나리오 1의 경우 암호화된 연결을 시작하는 클라이언트 컴퓨터의 신뢰할 수 있는 루트 인증 기관 저장소에 인증 기관을 추가합니다. 이렇게 하려면 1단계를 완료합니다. 서버 인증서를 파일로 내보내 고 2단계: 해당 순서의 클라이언트 컴퓨터 프로시저 에 루트 CA(인증 기관)를 설치 합니다.
1단계: 파일로 서버 인증서 내보내기
SQL Server 컴퓨터에서 SQL Server 사용하는 인증서를 파일로 내보냅니다. 다음 단계에서는 caCert.cer 예제 파일 이름으로 사용합니다. 이 파일은 이 절차에서 만들 때까지 존재하지 않습니다. 이름과 위치를 선택합니다.
시작을 선택하고 mmc를 입력한 다음 Microsoft Management Console 엽니다.
파일>스냅인 추가/제거를 선택합니다.
사용 가능한 스냅인 목록에서 인증서를 선택한 다음, 추가를 선택합니다.
컴퓨터 계정을 선택하고 다음을 선택하고 로컬 컴퓨터(이 콘솔이 실행 중인 컴퓨터)를 선택한 다음 마침을 선택합니다.
참고
SQL Server 인증서는 로컬 컴퓨터\개인 인증서 저장소에 설치됩니다. 내 사용자 계정을 선택하면 MMC가 다른 인증서 저장소를 열고 SQL Server 인증서가 표시되지 않습니다.
[확인]을 선택하여 스냅인 추가 또는 제거 대화 상자를 닫습니다.
왼쪽 창에서 인증서(로컬 컴퓨터)를 확장하고 개인을 확장한 다음 인증서를 선택합니다.
SQL Server 사용하는 인증서를 마우스 오른쪽 단추로 클릭한 다음 모든 작업내보내기를> 선택합니다.
[다음]을 선택하여 인증서 내보내기 마법사의 시작 페이지를 지나 이동합니다.
아니요, 프라이빗 키를 내보내지 않음이 선택되어 있는지 확인한 다음, 다음을 선택합니다.
DER로 인코딩된 이진 X.509(. CER) 또는 Base-64로 인코딩된 X.509(. CER)을 선택한 다음 다음을 선택합니다.
내보내기 파일 이름(예: caCert.cer)을 입력합니다.
다음을 선택한 다음 마침을 선택하여 인증서를 내보냅니다.
내보낸 .cer 파일을 클라이언트 컴퓨터에 복사합니다.
2단계: 클라이언트 컴퓨터에 루트 CA(인증 기관) 설치
클라이언트 컴퓨터에서 MMC를 열고, 스냅인 파일>추가/제거를 선택하고, 사용 가능한 스냅인 목록에서 인증서를 선택한 다음, 추가를 선택합니다.
인증서 스냅인 대화 상자에서 컴퓨터 계정을 선택한 다음, 다음을 선택합니다.
컴퓨터 선택 창에서 로컬 컴퓨터(이 콘솔이 실행 중인 컴퓨터)를 선택한 다음 마침을 선택합니다.
[확인]을 선택하여 스냅인 추가 또는 제거 대화 상자를 닫습니다.
MMC의 왼쪽 창에서 인증서(로컬 컴퓨터) 노드를 확장합니다.
신뢰할 수 있는 루트 인증 기관 노드를 확장하고, 인증서 하위 폴더를 마우스 오른쪽 단추로 클릭한 다음 모든 작업을 선택하고, 그런 다음 가져오기를 선택합니다.
인증서 가져오기 마법사의 시작 페이지에서 다음을 선택합니다.
가져올 파일 페이지에서 찾아보기를 선택합니다.
caCert.cer 인증서 파일의 위치를 찾아 파일을 선택한 다음 열기를 선택합니다.
가져올 파일 페이지에서 다음을 선택합니다.
인증서 저장소 페이지에서 기본 선택을 적용하고 다음을 선택합니다.
인증서 가져오기 마법사 완료 페이지에서 마침을 선택합니다.
옵션 2: 서버 인증서의 유효성을 검사하지 않고 서버 인증서 신뢰
시나리오 1 및 2의 경우 클라이언트 애플리케이션에서 보안 서버 인증서 설정을 설정합니다. 이 설정은 연결을 암호화된 것으로 유지하지만 인증서 유효성 검사를 건너뜁니다. 키워드 이름 및 허용되는 값은 클라이언트 라이브러리에 따라 달라집니다.
| 클라이언트 라이브러리 | 연결 문자열 키워드 |
|---|---|
Microsoft.Data.SqlClient |
TrustServerCertificate=True |
| Microsoft ODBC 드라이버 - SQL Server용 | TrustServerCertificate=yes |
| Microsoft OLE DB Driver for SQL Server (공급자 문자열) | TrustServerCertificate=yes |
Microsoft OLE DB Driver for SQL Server (ADO 또는 IDataInitialize) |
Trust Server Certificate=true |
| SQL Server용 Microsoft JDBC Driver | trustServerCertificate=true |
SSMS(SQL Server Management Studio) 20 이상 버전을 사용하여 연결하는 경우 서버에 연결 대화 상자의 로그인 페이지에서 서버 인증서 신뢰 확인란을 선택합니다. 이전 버전의 SSMS에서 서버에 연결 창에서 옵션을 선택하고 연결 속성 탭을 선택한 다음, 신뢰 서버 인증서를 선택합니다.
클라이언트 라이브러리에 대해 이 설정을 구성하는 방법에 대한 자세한 내용은 다음 문서를 참조하세요.
- Microsoft의 암호화 및 인증서 검증. Data.SqlClient
- OLE DB Driver for SQL Server 암호화 및 인증서 유효성 검사
- ODBC Driver for SQL Server용 DSN 및 연결 문자열 키워드와 특성
- Microsoft JDBC Driver for SQL Server 사용하여 암호화로 연결
- SQL Server Native Client(레거시 클라이언트)에서 유효성 검사 없이 암호화 사용
참고
보안 서버 인증서 설정은 암호화를 사용하지 않도록 설정하지 않습니다. 연결은 암호화된 상태로 유지되지만 클라이언트는 서버의 ID를 확인하지 않습니다.
Caution
자체 서명된 인증서를 사용하는 암호화된 연결은 강력한 보안을 제공하지 않습니다. 중간자 공격에 취약합니다. 프로덕션 환경 또는 인터넷에 연결된 서버에서 자체 서명된 인증서가 있는 TLS를 사용하지 마세요.
옵션 3: 암호화 구성 변경
이전 섹션에서 설명하는 구성이 의도하지 않은 경우 다음 옵션 중 하나를 사용하여 이 문제를 해결합니다.
신뢰할 수 있는 기관의 인증서를 사용하도록 데이터베이스 엔진 구성합니다. 이 옵션은 클라이언트가 추가 구성 없이 인증서의 유효성을 검사하기 때문에 가장 안전한 장기 수정입니다. 자세한 내용은 데이터베이스 엔진에 대한 암호화된 연결 사용 및 SQL Server의 인증서 요구 사항을(를) 참조하세요.
암호화가 필요하지 않은 경우:
클라이언트 애플리케이션에서 암호화를 해제합니다. OLE DB 공급자 문자열에는
Use Encryption for Data=Optional를, OLE DB ADO 또는IDataInitialize에는Encrypt=no를, ODBC에는Encrypt=False를, 그리고Encrypt=Optional또는 Microsoft JDBC 드라이버에는Microsoft.Data.SqlClient를 설정하세요. SSMS 20 이상 버전에서 서버에 연결 대화 상자의 로그인 페이지에서 암호화를 선택 사항으로 설정합니다.SQL Server 구성 관리자 사용하여 서버 쪽 암호화를 해제합니다. SQL Server 네트워크 구성을 확장하고, 인스턴스 이름>에 대한 <프로토콜을 마우스 오른쪽 단추로 클릭하고, 속성을 선택하고, 플래그 탭을 선택하고, 암호화 강제를 아니요로 설정한 다음, SQL Server 서비스를 다시 시작합니다. 자세한 내용은 MSSQLSERVER 속성에 대한 프로토콜(플래그 탭)을 참조하세요.
Warning
암호화를 해제하면 자격 증명 및 데이터가 보호되지 않은 네트워크를 통해 이동합니다. 신뢰할 수 있는 격리된 네트워크에서만 암호화를 해제합니다.