OLE DB의 암호화 및 인증서 유효성 검사
적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
SQL Server에서는 로그인과 관련한 네트워크 패킷이 항상 암호화됩니다. 서버를 시작할 때 프로비저닝된 인증서가 없으면 SQL Server가 로그인 패킷을 암호화하는 데 사용할 자체 서명된 인증서를 생성합니다.
자체 서명된 인증서는 보안이 보장되지 않습니다. 암호화된 핸드셰이크는 NTLM(NT LAN Manager)을 기반으로 합니다. 보안 연결을 위해 SQL Server에 확인할 수 있는 인증서를 프로비저닝하는 것이 좋습니다. TLS(Transport Security Layer)는 인증서 유효성 검사를 통해서만 안전하게 만들 수 있습니다.
애플리케이션에 따라 연결 문자열 키워드나 연결 속성을 사용하여 모든 네트워크 트래픽을 암호화해야 할 수도 있습니다. IDbInitialize::Initialize
에 공급자 문자열을 사용하는 경우 OLE DB에 대한 키워드는 “Encrypt”이고, IDataInitialize
에 초기화 문자열을 사용하는 경우 ADO 및 OLE DB에 대한 키워드는 “Use Encryption for Data”입니다. 암호화는 강제 프로토콜 암호화 옵션을 사용하여 레지스트리의 클라이언트 머신에서 구성할 수도 있습니다. 자세한 내용은 레지스트리 설정을 참조 하세요. 기본적으로 연결의 모든 네트워크 트래픽을 암호화하려면 서버에 인증서를 프로비전해야 합니다. 서버에서 인증서를 신뢰하도록 클라이언트를 설정하면 메시지 가로채기(man-in-the-middle) 공격에 취약해질 수 있습니다. 서버에 확인할 수 있는 인증서를 배포하는 경우 인증서를 신뢰하는 방법에 대한 클라이언트 설정을 FALSE로 변경해야 합니다.
연결 문자열 키워드에 대한 내용은 OLE DB Driver for SQL Server에서 연결 문자열 키워드 사용을 참조하세요.
인증서가 서버에 프로비저닝되지 않은 경우에 암호화를 사용하도록 설정하려면 Force Protocol Encryption
및 Trust Server Certificate
클라이언트 레지스트리 설정을 지정하면 됩니다. 이 경우 암호화는 서버에서 검증 가능한 인증서가 프로비전되지 않은 경우 유효성 검사 없이 자체 서명된 서버 인증서를 사용합니다.
암호화 및 인증서 유효성 검사 동작
애플리케이션 설정은 레지스트리에 설정된 보안 수준을 줄이지 않지만 강화시킬 수 있습니다. 자세한 내용은 레지스트리 설정을 참조 하세요. 예를 들어 Force Protocol Encryption
이 클라이언트에 설정되지 않은 경우 애플리케이션 자체에서 암호화를 요청할 수 있습니다. 서버 인증서가 프로비전되지 않은 경우에도 암호화를 보장할 수 있도록 애플리케이션에서 암호화 및 TrustServerCertificate
설정을 요청할 수도 있습니다. 그러나 TrustServerCertificate
이 클라이언트 구성에서 사용하도록 설정되지 않은 경우 프로비저닝된 서버 인증서가 여전히 필요합니다.
OLE DB Driver for SQL Server 버전 19에서는 암호화 관련 API의 호환성이 손상되는 변경이 도입되었습니다. 자세한 내용은 암호화 속성 변경 내용을 참조하세요.
주 버전 19
다음 표에서는 암호화 설정의 평가에 대해 설명합니다.
프로토콜 암호화 강제 사용 클라이언트 설정 | 연결 문자열/연결 특성 Encrypt/Use Encryption for Data | 결과 암호화 |
---|---|---|
0 | 아니요/선택 사항 | 선택 사항 |
0 | 예/필수(기본값) | 필수 |
0 | Strict | Strict |
1 | 아니요/선택 사항 | 필수 |
1 | 예/필수(기본값) | 필수 |
1 | Strict | Strict |
2 | 무시됨 | Strict |
다음 표에서는 결과 암호화 및 유효성 검사에 대해 설명합니다.
암호화 | 서버 인증서 신뢰 클라이언트 설정 | 연결 문자열/연결 특성 서버 인증서 신뢰 | 결과 |
---|---|---|---|
선택 사항 | 해당 없음 | 해당 없음 | 암호화가 LOGIN 패킷에 대해서만 발생합니다. |
필수 | 0 | 무시됨 | 확인할 수 있는 서버 인증서가 있는 경우에만 암호화가 수행되고 그렇지 않으면 연결 시도가 실패합니다. |
필수 | 1 | 아니요(기본값) | 확인할 수 있는 서버 인증서가 있는 경우에만 암호화가 수행되고 그렇지 않으면 연결 시도가 실패합니다. |
필수 | 1 | 예 | 항상 암호화가 수행되지만 자체 서명된 서버 인증서가 사용될 수 있습니다. |
Strict | 해당 없음 | 해당 없음 | 확인할 수 있는 서버 인증서가 있는 경우에만 암호화가 수행되고 그렇지 않으면 연결 시도가 실패합니다. |
주의
위의 표에서는 다양한 구성에서 시스템 동작에 대한 지침만 제공합니다. 보안 연결의 경우 클라이언트와 서버 모두 암호화가 필요한지 확인합니다(서버 쪽 구성의 경우 에서 암호화 설정 구성 참조). 또한 서버에 확인할 수 있는 인증서가 있고 클라이언트의 TrustServerCertificate
설정이 FALSE로 설정되어 있어야 합니다.
참고
OLE DB 드라이버 버전 19.2부터 TLS 1.3을 사용하도록 TDS 8.0 연결을 구성할 수 있습니다. 자세한 내용은 TLS 1.3 지원을 참조하세요.
새 인증 방법을 사용하는 주 버전 18
버전 18.x.x의 경우 보안을 개선하기 위해 새 Authentication 또는 Access Token 연결 문자열 키워드(또는 해당 속성)를 사용하는 경우 드라이버가 기본 암호화 값을 yes
로 설정하여 재정의합니다. 재정의는 데이터 원본 개체 초기화 시 이루어집니다. 어떤 방법을 통해 초기화하기 전에 암호화가 설정되면 값이 존중되고 재정의되지 않습니다.
참고 항목
ADO 애플리케이션 및 IDataInitialize::GetDataSource
를 통해 IDBInitialize
인터페이스를 가져오는 애플리케이션에서는 인터페이스를 구현하는 핵심 구성 요소가 명시적으로 암호화를 기본값 no
로 설정합니다. 따라서 새 인증 속성/키워드가 이 설정을 준수하고 암호화 값이 재정의되지 않습니다. 따라서 이러한 애플리케이션이 명시적으로 Use Encryption for Data=true
를 설정하여 기본값을 재정의할 것을 권장합니다.
보안을 개선하기 위해 새 인증 방법은 클라이언트 암호화 설정과 관계없이TrustServerCertificate
설정(및 해당 연결 문자열 키워드/속성)을 준수합니다. 따라서 서버 인증서는 기본적으로 유효성이 검사됩니다. 드라이버는 다음과 같이 서버 인증서의 유효성을 검사할지 여부를 결정합니다.
서버 인증서 신뢰 클라이언트 설정 | 연결 문자열/연결 특성 서버 인증서 신뢰 | 인증서의 유효성 검사 |
---|---|---|
0 | 아니요(기본값) | 예 |
0 | 네 | 예 |
1 | 아니요(기본값) | 예 |
1 | 예 | 아니요 |
다음 표에서는 암호화 설정의 평가에 대해 설명합니다.
프로토콜 암호화 강제 사용 클라이언트 설정 | 연결 문자열/연결 특성 Encrypt/Use Encryption for Data | 결과 암호화 |
---|---|---|
0 | 아니요(기본값) | 예 |
0 | 네 | 예 |
1 | 아니요(기본값) | 예 |
1 | 예 | 예 |
다음 표에서는 결과 암호화 및 유효성 검사에 대해 설명합니다.
결과 암호화 | 인증서의 유효성 검사 | 결과 |
---|---|---|
아니요 | 예 | 암호화가 LOGIN 패킷에 대해서만 발생합니다. |
예 | 예 | 확인할 수 있는 서버 인증서가 있는 경우에만 LOGIN 패킷에 대해 암호화가 수행되고 그렇지 않으면 연결 시도가 실패합니다. |
예 | 아니요 | 모든 네트워크 트래픽의 암호화가 항상 수행되지만 자체 서명된 서버 인증서가 사용될 수 있습니다. |
예 | 예 | 확인할 수 있는 서버 인증서가 있는 경우에만 모든 네트워크 트래픽의 암호화가 수행되고 그렇지 않으면 연결 시도가 실패합니다. |
레거시 인증 방법을 사용하는 주 버전 18
다음 표에서는 레거시 인증 방법의 암호화 및 유효성 검사 결과를 설명합니다.
프로토콜 암호화 강제 사용 클라이언트 설정 | 서버 인증서 신뢰 클라이언트 설정 | 연결 문자열/연결 특성 Encrypt/Use Encryption for Data | 연결 문자열/연결 특성 서버 인증서 신뢰 | 결과 |
---|---|---|---|---|
0 | 해당 없음 | 아니요(기본값) | 해당 없음 | 암호화가 LOGIN 패킷에 대해서만 발생합니다. |
0 | 해당 없음 | 예 | 아니요(기본값) | 확인할 수 있는 서버 인증서가 있는 경우에만 모든 네트워크 트래픽의 암호화가 수행되고 그렇지 않으면 연결 시도가 실패합니다. |
0 | 해당 없음 | 예 | 예 | 모든 네트워크 트래픽의 암호화가 항상 수행되지만 자체 서명된 서버 인증서가 사용될 수 있습니다. |
1 | 0 | 무시됨 | 무시됨 | 확인할 수 있는 서버 인증서가 있는 경우에만 모든 네트워크 트래픽의 암호화가 수행되고 그렇지 않으면 연결 시도가 실패합니다. |
1 | 1 | 아니요(기본값) | 해당 없음 | 모든 네트워크 트래픽의 암호화가 항상 수행되지만 자체 서명된 서버 인증서가 사용될 수 있습니다. |
1 | 1 | 예 | 아니요(기본값) | 확인할 수 있는 서버 인증서가 있는 경우에만 모든 네트워크 트래픽의 암호화가 수행되고 그렇지 않으면 연결 시도가 실패합니다. |
1 | 1 | 예 | 예 | 모든 네트워크 트래픽의 암호화가 항상 수행되지만 자체 서명된 서버 인증서가 사용될 수 있습니다. |
참고 항목
SQL Server 기능용 OLE DB 드라이버
초기화 및 권한 부여 속성
연결 문자열 키워드
주 버전 차이점
레지스트리 설정