연결을 암호화하기 위한 SQL Server 데이터베이스 엔진 구성

들어오는 모든 연결을 암호화하여 SQL Server 또는 특정 클라이언트 집합에 대한 암호화를 사용하도록 설정할 수 있습니다. 이러한 시나리오 중 하나의 경우 먼저 SQL Server에 대한 인증서 요구 사항을 충족하는 인증서를 사용하도록 SQL Server를 구성한 후 서버 컴퓨터 또는 클라이언트 컴퓨터에서 데이터를 암호화하는 추가 단계를 수행해야 합니다.

이 문서에서는 인증서에 대한 SQL Server를 구성하고(1단계) SQL Server 인스턴스의 암호화 설정을 변경하는 방법을 설명합니다(2단계). 퍼블릭 상업 기관의 인증서를 사용할 때 SQL Server로 들어오는 모든 연결을 암호화하려면 두 단계가 모두 필요합니다. 다른 시나리오는 SQL Server에 대한 연결을 암호화하기 위한 특수 사례를 참조하세요.

1단계: 인증서를 사용하도록 SQL Server 구성

SQL Server 인증서 요구 사항에 설명된 인증서를 사용하도록 SQL Server 구성하려면 다음 단계를 수행합니다.

  1. SQL Server를 실행 중인 컴퓨터에 인증서를 설치합니다.
  2. 설치된 인증서를 사용하도록 SQL Server를 구성합니다.

SQL Server 컴퓨터에서 액세스할 수 있는 SQL Server 구성 관리자 버전에 따라 다음 절차 중 하나를 사용하여 SQL Server 인스턴스를 설치하고 구성합니다.

SQL Server 2019 이상 버전의 SQL Server 구성 관리자가 있는 컴퓨터

SQL Server 2019(15.x)부터 인증서 관리는 SQL Server 구성 관리자로 통합되며 이전 버전의 SQL Server로 사용할 수 있습니다. 장애 조치(failover) 클러스터 구성 또는 가용성 그룹 구성에서 단일 SQL Server 인스턴스에 인증서를 추가하려면 인증서 관리(SQL Server 구성 관리자)를 참조하세요. 이 Configuration Manager 인증서를 설치하고 몇 단계만 수행하여 설치된 인증서를 사용하려면 SQL Server를 구성하여 인증서 관리를 크게 간소화합니다.

인증서는 사용자 컴퓨터에 로컬로 저장됩니다. SQL Server에서 사용할 인증서를 설치하려면 로컬 관리자 권한이 있는 계정으로 SQL Server 구성 관리자를 실행해야 합니다.

SQL Server 2019(15.x) 이상의 Express 버전을 일시적으로 설치하여 통합 인증서 관리를 지원하는 SQL Server 구성 관리자를 사용할 수 있습니다.

SQL Server 2017 및 이전 버전의 SQL Server 구성 관리자가 있는 컴퓨터

SQL Server 2017(14.x) 또는 이전 버전을 사용하고 SQL Server 2019(15.x)에 대한 SQL Server 구성 관리자를 사용할 수 없는 경우 다음 단계에 따라 SQL Server 컴퓨터에 인증서를 설치하고 구성합니다.

  1. 시작 메뉴에서 실행을 선택하고, 열기 상자에 MMC를 입력하고, 확인을 선택합니다.
  2. MMC 콘솔의 파일 메뉴에서 스냅인 추가/제거를 선택합니다.
  3. 스냅인 추가/제거 대화 상자에서 인증서를 선택한 다음, 추가를 선택합니다.
  4. 인증서 스냅인 대화 상자에서 컴퓨터 계정을 선택하고 다음>마침을 선택합니다.
  5. 스냅인 추가/제거 대화 상자에서 확인을 선택합니다.
  6. MMC 콘솔에서 인증서(로컬 컴퓨터)>개인을 펼치고 인증서를 마우스 오른쪽 단추로 클릭한 뒤 모든 작업을 가리킨 다음 가져오기를 선택합니다.
  7. 인증서 가져오기 마법사를 완료하여 컴퓨터에 인증서를 추가합니다.
  8. MMC 콘솔에서 가져온 인증서를 마우스 오른쪽 단추로 클릭하고, 모든 작업을 가리킨 다음, 프라이빗 키 관리를 선택합니다. 보안 대화 상자에서 SQL Server 서비스 계정에서 사용하는 사용자 계정에 관한 읽기 권한을 추가합니다.
  9. SQL Server 구성 관리자에서 SQL Server 네트워크 구성을 확장하고 <서버 인스턴스>에 대한 프로토콜을 마우스 오른쪽 단추로 클릭한 다음 속성을 선택합니다.
  10. <인스턴스 이름>에 대한 프로토콜 속성 대화 상자에서 인증서 탭의 인증서 상자에 대한 드롭다운에서 원하는 인증서를 선택한 다음, 확인을 클릭합니다.
  11. SQL Server의 모든 연결을 암호화해야 하는 경우 2단계: SQL Server 암호화 설정 구성을 참조하세요. 특정 클라이언트에 대해서만 암호화를 사용하도록 설정하려면 SQL Server 서비스를 다시 시작하고 SQL Server 대한 연결 암호화 특수 사례를 참조하세요.

참고

Always On 가용성 그룹 구성에 인증서를 설치하려면 가용성 그룹의 각 노드에서 위의 절차를 반복합니다.

중요

SQL Server 서비스 계정에는 SQL Server 인스턴스에서 암호화를 강제하는 데 사용되는 인증서에 대한 읽기 권한이 있어야 합니다. 권한이 없는 서비스 계정의 경우 인증서에 읽기 권한을 추가해야 합니다. 그렇게 하지 않으면 SQL Server 서비스를 다시 시작하지 못할 수 있습니다.

장애 조치(failover) 클러스터 인스턴스에 대한 추가 절차

SQL Server 연결을 암호화하는 데 사용하는 인증서는 다음 레지스트리 키에 지정됩니다.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.x\MSSQLServer\SuperSocketNetLib\Certificate

이 키에는 서버의 각 인증서를 식별하는 지문이라고 하는 인증서의 속성이 포함되어 있습니다. 클러스터형 환경에서는 저장소에 올바른 인증서가 있더라도 이 키가 Null로 설정됩니다. 이 문제를 해결하려면 각 노드에 인증서를 설치한 후 각 클러스터 노드에서 다음 추가 단계를 수행해야 합니다.

  1. FQDN 인증서가 저장된 인증서 저장소로 이동합니다. 인증서의 속성 페이지에서 세부 정보 탭으로 이동하여 인증서의 지문 값을 메모장 창에 복사합니다.

  2. 메모장에서 지문 값에 있는 16진수 문자 사이의 공백을 제거합니다.

  3. 레지스트리 편집기를 시작하고 다음 레지스트리 키로 이동하여 2단계의 값을 붙여 넣습니다.

    HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib\Certificate

  4. SQL 가상 서버가 현재 이 노드에 있는 경우 클러스터의 다른 노드로 장애 조치하고 레지스트리 변경이 발생한 노드를 다시 시작합니다.

  5. 모든 노드에서 이 과정을 반복합니다.

경고

레지스트리를 올바르게 편집하지 않으면 시스템을 심각하게 손상시킬 수 있습니다. 따라서 레지스트리를 변경하기 전에 컴퓨터의 중요한 데이터는 백업해 두는 것이 좋습니다.

참고

SQL Server 2008 R2(10.50.x) 및 SQL Server 2008 R2(10.50.x) Native Client(SNAC)는 와일드카드 인증서를 지원합니다. SNAC는 더 이상 사용되지 않으며 Microsoft OLE DB Driver for SQL ServerMicrosoft ODBC Driver for SQL Server로 바뀌었습니다. 다른 클라이언트에서는 와일드카드 인증서를 지원하지 않습니다.

SQL Server 구성 관리자를 사용하여 와일드카드 인증서를 선택할 수 없습니다. 와일드카드 인증서를 사용하려면 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQLServer\SuperSocketNetLib 레지스트리 키를 편집하고 인증서 값에 공백 없이 인증서의 지문을 입력해야 합니다.

참고

장애 조치(Failover) 클러스터에 암호화를 사용하려면 장애 조치 클러스터의 모든 노드에 있는 가상 서버의 정규화된 DNS 이름으로 서버 인증서를 설치해야 합니다. SQL Server 네트워크 구성virtsql에 대한 프로토콜 속성 상자에서 ForceEncryption 옵션 값을 Yes로 설정할 수 있습니다.

Azure VM에서 Azure Search 인덱서로부터 SQL Server로의 암호화된 연결을 만드는 경우 Azure 가상 머신의 SQL Server 인스턴스로 인덱서 연결을 참조하세요.

2단계: SQL Server 암호화 설정 구성

다음 단계는 모든 클라이언트에 대해 암호화된 통신을 강제 적용하려는 경우에만 필요합니다.

  1. SQL Server 구성 관리자에서 SQL Server 네트워크 구성을 펼치고 <서버 인스턴스>에 대한 프로토콜을 마우스 오른쪽 단추로 클릭한 다음 속성을 선택합니다.
  2. 플래그 탭의 ForceEncryption 상자에서 를 선택한 다음, 확인을 선택하여 대화 상자를 닫습니다.
  3. SQL Server 서비스를 다시 시작합니다.

참고

일부 인증서 시나리오에서는 클라이언트와 서버 간의 암호화된 연결을 보장하기 위해 클라이언트 컴퓨터 및 클라이언트 애플리케이션에서 추가 단계를 구현해야 할 수 있습니다. 자세한 내용은 SQL Server에 대한 연결을 암호화하기 위한 특수 사례를 참조하세요.

추가 정보

로그인 패킷 암호화 및 데이터 패킷 암호화

높은 수준에서 SQL Server 클라이언트 애플리케이션과 SQL Server 간의 네트워크 트래픽에는 자격 증명 패킷(로그인 패킷) 및 데이터 패킷이라는 두 가지 유형의 패킷이 있습니다. 암호화(서버 쪽 또는 클라이언트 쪽)를 구성하는 경우 이러한 패킷 유형은 항상 암호화됩니다. 그러나 암호화를 구성하지 않더라도 클라이언트 애플리케이션이 SQL Server에 연결할 때 전송되는 자격 증명(로그인 패킷)은 항상 암호화됩니다. SQL Server를 사용 가능한 경우 신뢰할 수 있는 인증 기관의 인증서 요구 사항을 충족하는 인증서를 사용합니다. 이 인증서는 이전에 문서에서 설명한 절차 중 하나를 사용하여 시스템 관리자가 수동으로 구성하거나 SQL Server 컴퓨터의 인증서 저장소에 있을 수 있습니다.

SQL Server 생성 자체 서명된 인증서

SQL Server는 로그인 패킷을 암호화하는 데 사용할 수 있는 경우 신뢰할 수 있는 인증 기관의 인증서를 사용합니다. 신뢰할 수 있는 인증서가 설치되지 않은 경우 SQL Server가 시작하는 동안 자체 서명된 인증서(대체 인증서)를 생성하고 자체 서명된 인증서를 사용하여 자격 증명을 암호화합니다. 이 자체 서명된 인증서는 보안을 향상하는 데 도움이 되지만 서버의 ID 스푸핑을 방지하는 기능은 제공하지 않습니다. 자체 서명된 인증서를 사용하고 ForceEncryption 옵션의 값이 로 설정되어 있으면 네트워크를 통해 SQL Server와 클라이언트 애플리케이션 간에 전송된 모든 데이터는 자체 서명된 인증서를 사용하여 암호화됩니다.

자체 서명된 인증서를 사용하는 경우 SQL Server 다음 메시지를 오류 로그에 기록합니다.

암호화를 위해 자동 생성 인증서를 로드했습니다.

SQL Server 2016(13.x) 및 이전 버전에서는 SHA1 알고리즘을 사용합니다. 그러나 SHA1 알고리즘과 많은 이전 알고리즘은 SQL Server 2016(13.x)부터 사용되지 않습니다. 자세한 내용은 SQL Server 2016에서 사용되지 않는 데이터베이스 엔진 기능을 참조하세요.

이러한 환경에서는 사전 로그인 핸드셰이크 또는 모든 서버 클라이언트 통신 암호화를 위해 SQL Server 의해 생성된 자동으로 생성된 자체 서명된 인증서를 사용하는 경우 취약성 검색 소프트웨어 또는 보안 소프트웨어 또는 회사 정책에서 이 사용을 보안 문제로 플래그를 지정할 수 있습니다. 이러한 시나리오에는 다음과 같은 옵션이 있습니다.

  • 더 강력한 암호화 알고리즘을 사용하는 새 자체 서명된 인증서 또는 타사 인증서를 만들고 이 새 인증서를 사용하도록 SQL Server를 구성합니다.
  • 이제 플래그의 원인을 이해했으므로 메시지를 무시할 수 있습니다(권장되지 않음).
  • 자체 서명된 인증서에 더 강력한 해시 알고리즘(SHA256)을 사용하는 SQL Server 2017(14.x) 이상 버전으로 업그레이드합니다.

SQL Server에 대한 자체 서명된 인증서를 만드는 PowerShell 스크립트

다음 코드 조각은 SQL Server 실행하는 컴퓨터에서 자체 서명된 인증서를 만드는 데 사용할 수 있습니다. 인증서는 독립 실행형 SQL Server 인스턴스에 대한 암호화 요구 사항을 충족하고 로컬 컴퓨터의 인증서 저장소에 저장됩니다(PowerShell을 관리자 권한으로 시작해야 함).

New-SelfSignedCertificate -Type SSLServerAuthentication -Subject "CN=$env:COMPUTERNAME" `
-DnsName ("{0}" -f [System.Net.Dns]::GetHostByName($env:computerName).HostName),'localhost' `
-KeyAlgorithm "RSA" -KeyLength 2048 -HashAlgorithm "SHA256" -TextExtension "2.5.29.37={text}1.3.6.1.5.5.7.3.1" `
-NotAfter (Get-Date).AddMonths(36) -KeySpec KeyExchange -Provider "Microsoft RSA SChannel Cryptographic Provider" `
-CertStoreLocation "cert:\LocalMachine\My"

네트워크 암호화 확인

네트워크 암호화가 구성되어 있고 사용하도록 설정되었는지 확인하려면 다음 Transact-SQL 쿼리를 실행합니다.

USE [master]
GO
SELECT DISTINCT (encrypt_option)
FROM sys.dm_exec_connections;
GO

encrypt_option 열은 이 연결에 암호화를 사용할 수 있는지 여부를 나타내는 부울 값입니다. 값이 TRUE이면 연결이 안전하게 암호화됩니다. 값이 FALSE이면 연결이 암호화되지 않습니다.

사용 권한이 있는 SQL Server 인증서 동작

SQL Server 서비스는 다음 조건이 모두 충족되면 인증서를 자동으로 검색하고 암호화에 사용합니다.

  • 인증서에 컴퓨터의 FQDN을 포함한 주체가 있음
  • 로컬 컴퓨터의 인증서 저장소에 인증서가 설치되어 있음
  • SQL Server 서비스 계정에 인증서의 프라이빗 키에 대한 액세스 권한이 부여되어 있음

이 사용은 인증서가 SQL Server 구성 관리자에서 선택되지 않은 경우에도 발생합니다.

이 동작을 재정의하려면 다음 중 하나를 수행합니다.

  • SQL Server 구성 관리자에서 사용할 다른 인증서 구성

    또는

  • 원치 않는 인증서에 대한 SQL Server 서비스 계정 권한 제거