Share via


Microsoft.Data.SqlClient의 암호화 및 인증서 유효성 검사

ADO.NET 다운로드

SQL Server에서는 로그인과 관련한 네트워크 패킷이 항상 암호화됩니다. 서버를 시작할 때 프로비저닝된 인증서가 없으면 SQL Server가 로그인 패킷을 암호화하는 데 사용할 자체 서명된 인증서를 생성합니다.

개략적으로 클라이언트와 서버 간의 암호화는 클라이언트와 서버만 데이터를 읽을 수 있도록 합니다. 암호화 프로세스의 중요한 부분은 서버 인증서 유효성 검사입니다. 서버 인증서 유효성 검사를 통해 클라이언트는 서버가 누구인지 확인할 수 있습니다. 인증서는 만료, 신뢰 체인 및 인증서의 이름이 클라이언트가 연결하는 서버의 이름과 일치하는지와 같은 항목에 대해 유효성을 검사합니다. 자세한 내용은 전송 계층 보안 및 디지털 인증서를 참조하세요.

보안 연결을 위해 SQL Server에 확인할 수 있는 인증서를 프로비저닝하는 것이 좋습니다. TLS(Transport Security Layer)는 인증서 유효성 검사를 통해서만 안전하게 만들 수 있습니다.

애플리케이션이 Encrypt 연결 문자열 키워드나 연결 속성을 사용하여 모든 네트워크 트래픽의 암호화를 요청할 수도 있습니다. 기본적으로 연결의 모든 네트워크 트래픽을 암호화하려면 서버에 인증서를 프로비전해야 합니다. 서버에서 인증서를 신뢰하도록 클라이언트를 설정하면 메시지 가로채기(man-in-the-middle) 공격에 취약해질 수 있습니다. 서버에 확인할 수 있는 인증서를 배포하는 경우 클라이언트 Encrypt 설정이 True이고 Trust Server Certificate 설정이 False인지 확인하세요.

인증서가 서버에 프로비전되지 않은 경우에 암호화를 사용하도록 설정하려면 EncryptTrust Server Certificate 클라이언트 설정을 사용할 수 있습니다. 이 경우 암호화는 클라이언트의 유효성 검사 없이 자체 서명된 서버 인증서를 사용합니다. 이 구성은 연결을 암호화하지만 클라이언트와 서버 사이의 디바이스가 연결을 가로채고 암호화를 프록시하는 것을 방지하지는 않습니다.

암호화 및 인증서 유효성 검사 동작 변경 내용

Microsoft.Data.SqlClient 버전 4.0에서는 암호화 설정에 호환성이 손상되는 변경이 도입되었습니다. 이제 Encrypt의 기본값은 True입니다.

Microsoft.Data.SqlClient 버전 2.0에서는 Trust Server Certificate 설정의 동작에 호환성이 손상되는 변경이 도입되었습니다. 이전에는 EncryptFalse로 설정된 경우 Trust Server Certificate 설정에 관계없이 서버 인증서의 유효성이 검사되지 않았습니다. 이제 서버가 암호화를 강제하는 경우 서버 인증서는 EncryptFalse로 설정된 경우에도 Trust Server Certificate 설정에 따라 유효성이 검사됩니다.

버전 4.0

다음 표는 암호화 및 인증서 설정에 대한 암호화 및 유효성 검사 결과를 설명합니다.

Encrypt 클라이언트 설정 Trust Server Certificate 클라이언트 설정 Force encryption 서버 설정 결과
False False(기본값) 아니요 암호화가 LOGIN 패킷에 대해서만 발생합니다. 인증서의 유효성이 검사되지 않습니다.
False False(기본값) (버전 1.0에서 2.0으로 동작 변경) 확인할 수 있는 서버 인증서가 있는 경우에만 모든 네트워크 트래픽의 암호화가 수행되고 그렇지 않으면 연결 시도가 실패합니다.
False True 모든 네트워크 트래픽의 암호화가 수행되고 인증서의 유효성이 검사되지 않습니다.
True(새 기본값) False(기본값) 해당 없음 확인할 수 있는 서버 인증서가 있는 경우에만 모든 네트워크 트래픽의 암호화가 수행되고 그렇지 않으면 연결 시도가 실패합니다.
True(새 기본값) True 해당 없음 모든 네트워크 트래픽의 암호화가 수행되지만 인증서의 유효성은 검사되지 않습니다.
Strict(버전 5.0에서 추가됨) 해당 없음 해당 없음 확인할 수 있는 서버 인증서가 있는 경우에만 TDS 8을 사용하여 모든 네트워크 트래픽의 암호화가 수행되고 그렇지 않으면 연결 시도가 실패합니다.

주의

위의 표에서는 다양한 구성에서 시스템 동작에 대한 지침만 제공합니다. 보안 연결을 위해 클라이언트와 서버 모두 암호화가 필요한지 확인하세요. 또한 서버에 확인할 수 있는 인증서가 있고 클라이언트의 TrustServerCertificate 설정이 False로 설정되어 있는지 확인하세요.

Microsoft.Data.SqlClient 버전 5.0부터 HostNameInCertificate는 새로운 연결 옵션입니다. 서버 인증서 유효성 검사는 인증서의 CN(일반 이름) 또는 SAN(주체 대체 이름)이 연결되는 서버 이름과 일치하는지 확인합니다. DNS 별칭과 같은 경우에 서버 이름이 CN 또는 SAN과 일치하지 않을 수 있습니다. HostNameInCertificate 값을 사용하여 서버 인증서에서 다른 예상 CN 또는 SAN을 지정할 수 있습니다.

버전 2.0

버전 2.0부터 서버가 암호화를 강제하면 클라이언트는 Encrypt 설정에 관계없이 Trust Server Certificate 설정에 따라 서버 인증서의 유효성을 검사합니다.

다음 표는 암호화 및 인증서 설정에 대한 암호화 및 유효성 검사 결과를 설명합니다.

Encrypt 클라이언트 설정 Trust Server Certificate 클라이언트 설정 Force encryption 서버 설정 결과
False(기본값) False(기본값) 아니요 암호화가 LOGIN 패킷에 대해서만 발생합니다. 인증서의 유효성이 검사되지 않습니다.
False(기본값) False(기본값) (동작 변경) 확인할 수 있는 서버 인증서가 있는 경우에만 모든 네트워크 트래픽의 암호화가 수행되고 그렇지 않으면 연결 시도가 실패합니다.
False(기본값) True 모든 네트워크 트래픽의 암호화가 수행되고 인증서의 유효성이 검사되지 않습니다.
True False(기본값) 해당 없음 확인할 수 있는 서버 인증서가 있는 경우에만 모든 네트워크 트래픽의 암호화가 수행되고 그렇지 않으면 연결 시도가 실패합니다.
True True 해당 없음 모든 네트워크 트래픽의 암호화가 수행되지만 인증서의 유효성은 검사되지 않습니다.

주의

위의 표에서는 다양한 구성에서 시스템 동작에 대한 지침만 제공합니다. 보안 연결을 위해 클라이언트와 서버 모두 암호화가 필요한지 확인하세요. 또한 서버에 확인할 수 있는 인증서가 있고 클라이언트의 TrustServerCertificate 설정이 False로 설정되어 있는지 확인하세요.

버전 1.0

다음 표는 암호화 및 인증서 설정에 대한 암호화 및 유효성 검사 결과를 설명합니다.

Encrypt 클라이언트 설정 Trust Server Certificate 클라이언트 설정 Force encryption 서버 설정 결과
False(기본값) False(기본값) 아니요 암호화가 LOGIN 패킷에 대해서만 발생합니다. 인증서의 유효성이 검사되지 않습니다.
False(기본값) False(기본값) 모든 네트워크 트래픽의 암호화가 수행되지만 인증서의 유효성은 검사되지 않습니다.
False(기본값) True 모든 네트워크 트래픽의 암호화가 수행되고 인증서의 유효성이 검사되지 않습니다.
True False(기본값) 해당 없음 확인할 수 있는 서버 인증서가 있는 경우에만 모든 네트워크 트래픽의 암호화가 수행되고 그렇지 않으면 연결 시도가 실패합니다.
True True 해당 없음 모든 네트워크 트래픽의 암호화가 수행되지만 인증서의 유효성은 검사되지 않습니다.

참고 항목

연결 문자열
연결 문자열 구문