Linux에서 SQL Server 연결 암호화Encrypting Connections to SQL Server on Linux

이 항목 적용 대상: 아니요SQL Server Windows 예SQL Server Linux 아니요Azure SQL Database 아니요Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO: noSQL Server Windows yesSQL Server Linux noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

SQL ServerSQL ServerLinux 수를 사용 하 여 보안 TLS (전송 계층)의 인스턴스와 클라이언트 응용 프로그램 간에 네트워크를 통해 전송 되는 데이터를 암호화 SQL ServerSQL Server합니다. on Linux can use Transport Layer Security (TLS) to encrypt data that is transmitted across a network between a client application and an instance of SQL ServerSQL Server. SQL ServerSQL ServerWindows와 Linux 모두에서 동일한 TLS 프로토콜을 지원: TLS 1.2, 1.1 및 1.0입니다. supports the same TLS protocols on both Windows and Linux: TLS 1.2, 1.1, and 1.0. 그러나 TLS를 구성 하는 단계는 운영 체제를 관련이 SQL ServerSQL Server 실행 합니다.However, the steps to configure TLS are specific to the operating system on which SQL ServerSQL Server is running.

일반적인 시나리오Typical Scenario

TLS를 사용 하 여 클라이언트 응용 프로그램에서 연결을 암호화 하 SQL ServerSQL Server합니다.TLS is used to encrypt connections from a client application to SQL ServerSQL Server. 올바르게 구성 된 경우 개인 정보 및 클라이언트와 서버 간의 통신에 대 한 데이터 무결성 모두 TLS를 제공 합니다.When configured correctly, TLS provides both privacy and data integrity for communications between the client and the server.
다음 단계에서는 일반적인 시나리오를 설명합니다.The following steps describe a typical scenario:

  1. 데이터베이스 관리자는 개인 키와 인증서 서명 요청 (CSR)를 생성 합니다.Database administrator generates a private key and a certificate signing request (CSR). CSR의 일반 이름에는 클라이언트가 해당 SQL Server 연결 문자열에 지정 된 서버 이름을 일치 해야 합니다.The CSR's Common Name should match the server name that clients specify in their SQL Server connection string. 이 일반 이름은 일반적으로의 정규화 된 도메인 이름입니다.는 SQL ServerSQL Server 호스트 합니다.This Common Name is usually the fully qualified domain name of the SQL ServerSQL Server host. 여러 서버에 대 한 동일한 인증서를 사용 하려면 일반 이름에 와일드 카드를 사용할 수 있습니다 (예를 들어 "*.contoso.com" 대신 "node1.contoso.com").To use the same certificate for multiple servers, you can use a wildcard in the Common Name (for example, "*.contoso.com" instead of "node1.contoso.com").
  2. CSR 서명을 위해 인증 기관 (CA)에 전송 됩니다.The CSR is sent to a certificate authority (CA) for signing. CA에 연결 하는 모든 클라이언트 컴퓨터에서 신뢰 되어야 SQL ServerSQL Server합니다.The CA should be trusted by all client machines that connect to SQL ServerSQL Server. CA는 데이터베이스 관리자에 서명 된 인증서를 반환합니다.The CA returns a signed certificate to the database administrator.
  3. 데이터베이스 관리자는 구성 SQL ServerSQL Server TLS 연결에 대 한 개인 키 및 서명 된 인증서를 사용 하도록 합니다.Database administrator configures SQL ServerSQL Server to use the private key and the signed certificate for TLS connections.
  4. 클라이언트는 지정 "Encrypt=True""TrustServerCertificate=False" 은 연결 문자열에 있습니다.Clients specify "Encrypt=True" and "TrustServerCertificate=False" in their connection strings. (특정 매개 변수 이름은 달라질 수 있습니다 사용할 드라이버를 사용 하는 따라)입니다.(The specific parameter names may be different depending on which driver is being used). 이제 SQL Server에 대 한 연결을 암호화 하 고 중간자 개입 공격을 방지 하려면 SQL Server의 인증서의 유효성을 검사 하는 시도 클라이언트입니다.Clients now attempt encrypt connections to SQL Server and check the validity of SQL Server's certificate to prevent man-in-the-middle attacks.

Linux에서 TLS를 구성합니다.Configuring TLS on Linux

사용 하 여 mssql-conf 의 인스턴스에 대 한 TLS를 구성 하려면 SQL ServerSQL Server Linux에서 실행 합니다.Use mssql-conf to configure TLS for an instance of SQL ServerSQL Server running on Linux. 다음 옵션이 지원 됩니다.The following options are supported:

옵션Option DescriptionDescription
network.forceencryption 1 인 경우, 다음 SQL ServerSQL Server 암호화에 대 한 모든 연결을 강제로 수행 합니다.If 1, then SQL ServerSQL Server forces all connections to be encrypted. 기본적으로이 옵션은 0입니다.By default, this option is 0.
network.tlscert 인증서에 절대 경로 파일 SQL ServerSQL Server TLS를 사용 합니다.The absolute path to the certificate file that SQL ServerSQL Server uses for TLS. 예: /etc/ssl/certs/mssql.pem 인증서 파일 mssql 계정에서 액세스할 수 있어야 합니다.Example: /etc/ssl/certs/mssql.pem The certificate file must be accessible by the mssql account. 사용 하 여 파일에 대 한 액세스를 제한 하는 것이 좋습니다 chown mssql:mssql <file>; chmod 400 <file>합니다.Microsoft recommends restricting access to the file using chown mssql:mssql <file>; chmod 400 <file>.
network.tlskey 개인 키에 절대 경로 파일 SQL ServerSQL Server TLS를 사용 합니다.The absolute path to the private key file that SQL ServerSQL Server uses for TLS. 예: /etc/ssl/private/mssql.key 인증서 파일 mssql 계정에서 액세스할 수 있어야 합니다.Example: /etc/ssl/private/mssql.key The certificate file must be accessible by the mssql account. 사용 하 여 파일에 대 한 액세스를 제한 하는 것이 좋습니다 chown mssql:mssql <file>; chmod 400 <file>합니다.Microsoft recommends restricting access to the file using chown mssql:mssql <file>; chmod 400 <file>.
network.tlsprotocols 프로토콜은 SQL Server에서 허용 하는 TLS의 쉼표로 구분 된 목록입니다.A comma-separated list of which TLS protocols are allowed by SQL Server. SQL ServerSQL Server항상 가장 강력한 허용 된 프로토콜을 협상 하도록 시도 합니다. always attempts to negotiate the strongest allowed protocol. 클라이언트가 허용 된 모든 프로토콜을 지원 하지 않는 경우 SQL ServerSQL Server 연결 시도 거부 합니다.If a client does not support any allowed protocol, SQL ServerSQL Server rejects the connection attempt. 호환성을 위해 지원 되는 모든 프로토콜은 기본 (1.2, 1.1, 1.0)에서 허용 됩니다.For compatibility, all supported protocols are allowed by default (1.2, 1.1, 1.0). TLS 1.2를 지원 하려면 클라이언트, TLS 1.2만을 허용 하는 것이 좋습니다.If your clients support TLS 1.2, Microsoft recommends allowing only TLS 1.2.
network.tlsciphers 허용 하는 암호 지정 SQL ServerSQL Server TLS에 대 한 합니다.Specifies which ciphers are allowed by SQL ServerSQL Server for TLS. 이 문자열 당 포맷 해야 OpenSSL의 암호화 목록 형식합니다.This string must be formatted per OpenSSL's cipher list format. 일반적으로이 옵션을 변경할 필요가 없습니다.In general, you should not need to change this option.
기본적으로 다음 암호 허용 됩니다.By default, the following ciphers are allowed:
ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA

예제Example

이 예제에서는 자체 서명 된 인증서를 사용 합니다.This example uses a self-signed certificate. 일반적인 프로덕션 시나리오에서 모든 클라이언트에서 신뢰 하는 CA에서 인증서를 서명 합니다.In normal production scenarios, the certificate would be signed by a CA that is trusted by all clients.

1 단계: 개인 키와 인증서를 생성 합니다.Step 1: Generate private key and certificate

Linux 컴퓨터에서 터미널 명령을 열고 여기서 SQL ServerSQL Server 실행 합니다.Open a command terminal on the Linux machine where SQL ServerSQL Server is running. 다음 명령을 실행 합니다.Run the following commands:

  • 자체 서명 된 인증서를 생성 합니다.Generate a self-signed certificate. /CN SQL Server 호스트 정규화 된 도메인 이름을 일치 하는지 확인 합니다.Make sure the /CN matches your SQL Server host fully-qualified domain name. 사용할 수 있습니다 필요에 따라 와일드 카드, 예를 들어 '/CN=*.contoso.com'합니다.You may optionally use wildcards, for example '/CN=*.contoso.com'.

    openssl req -x509 -nodes -newkey rsa:2048 -subj '/CN=mssql.contoso.com' -keyout mssql.key -out mssql.pem -days 365 
    
  • 에 대 한 액세스를 제한 합니다.mssqlRestrict access to mssql

    sudo chown mssql:mssql mssql.pem mssql.key 
    sudo chmod 400 mssql.pem mssql.key 
    
  • 시스템 SSL 디렉터리 (선택 사항)으로 이동Move to system SSL directories (optional)

    sudo mv mssql.pem /etc/ssl/certs/ 
    sudo mv mssql.key /etc/ssl/private/ 
    

2 단계: 구성 SQL ServerSQL ServerStep 2: Configure SQL ServerSQL Server

사용 하 여 mssql-conf 구성 하려면 SQL ServerSQL Server 인증서를 사용 하 여 TLS에 대 한 키입니다.Use mssql-conf to configure SQL ServerSQL Server to use the certificate and key for TLS. 보안 향상된을 위해 허용 되는 프로토콜 유일한으로 TLS 1.2를 설정 하 고 모든 클라이언트가 암호화 된 연결을 사용 하도록 강제 합니다.For increased security, you can also set TLS 1.2 as the only allowed protocol and force all clients to use encrypted connections.

sudo /opt/mssql/bin/mssql-conf set network.tlscert /etc/ssl/certs/mssql.pem 
sudo /opt/mssql/bin/mssql-conf set network.tlskey /etc/ssl/private/mssql.key 
sudo /opt/mssql/bin/mssql-conf set network.tlsprotocols 1.2 
sudo /opt/mssql/bin/mssql-conf set network.forceencryption 1 

3 단계: 다시 시작 SQL ServerSQL ServerStep 3: Restart SQL ServerSQL Server

SQL ServerSQL Server이러한 변경 내용을 적용 하려면 다시 시작 해야 합니다. must be restarted for these changes to take effect.
sudo systemctl restart mssql-server

4 단계: 클라이언트 컴퓨터에 자체 서명 된 인증서를 복사Step 4: Copy self-signed certificate to client machines

이 예제에서 자체 서명 인증서를 사용 하기 때문에 SQL ServerSQL Server 호스트 인증서 (개인 키가 아닌)를 복사 하 여에 연결 하는 모든 클라이언트 컴퓨터에서 신뢰할 수 있는 루트 인증서로 설치 해야 SQL ServerSQL Server합니다.Because this example uses a certificate self-signed by the SQL ServerSQL Server host, the certificate (not the private key) must be copied and installed as a trusted root certificate on all client machines that connect to SQL ServerSQL Server. 인증서에는 모든 클라이언트에서 이미 신뢰할 수 있는 CA에서 서명, 경우에이 단계가 필요 하지 않습니다.If the certificate is signed by a CA that is already trusted by all clients, this step is not necessary.

5 단계: TLS를 사용 하는 클라이언트에서 연결Step 5: Connect from clients using TLS

연결할 SQL ServerSQL Server 암호화 사용을 사용 하 여 클라이언트에서 및 TrustServerCertificate 로 설정 False 연결 문자열에 있습니다.Connect to SQL ServerSQL Server from a client with encryption enabled and TrustServerCertificate set to False in the connection string. 다음은 다양 한 도구 및 드라이버를 사용 하 여 이러한 매개 변수를 지정 하는 방법의 몇 가지 예입니다.Here are a few examples of how to specify these parameters using different tools and drivers.

sqlcmdsqlcmd
sqlcmd -N -C -S mssql.contoso.com -U sa -P '<YourPassword>'

SQL Server Management StudioSQL Server Management Studio

SSMS 연결 대화 상자SSMS connection dialog

ADO.NETADO.NET
"Encrypt=true; TrustServerCertificate=true;"

ODBCODBC
"Encrypt=yes; TrustServerCertificate=no;"

JDBCJDBC
"encrypt=true; trustServerCertificate=false;"

일반적인 연결 오류Common connection errors

오류 메시지입니다.Error message FixFix
인증서 체인은 신뢰할 수 없는 기관에서 발급 되었습니다.The certificate chain was issued by an authority that is not trusted. 이 오류는 클라이언트가 TLS 핸드셰이크 중에 SQL Server에서 제공 하는 인증서의 서명을 확인할 수 없는 경우에 발생 합니다.This error occurs when clients are unable to verify the signature on the certificate presented by SQL Server during the TLS handshake. 클라이언트에서 신뢰 하거나 있는지 확인은 SQL ServerSQL Server 인증서를 직접 또는 SQL Server 인증서를 서명한 CA입니다.Make sure the client trusts either the SQL ServerSQL Server certificate directly, or the CA which signed the SQL Server certificate.
대상 보안 주체 이름이 올바르지 않습니다.The target principal name is incorrect. SQL Server의 인증서 일반 이름 필드는 클라이언트의 연결 문자열에 지정 된 서버 이름과 일치 하는지 확인 합니다.Make sure that Common Name field on SQL Server's certificate matches the server name specified in the client's connection string.
현재 연결은 원격 호스트에 의해 강제로 끊겼습니다.An existing connection was forcibly closed by the remote host. 클라이언트가 SQL Server에 필요한 TLS 프로토콜 버전을 지원 하지 않습니다이 오류가 발생할 수 있습니다.This error can occur when the client doesn't support the TLS protocol version required by SQL Server. 예를 들어 경우 SQL ServerSQL Server TLS 1.2 필요, 클라이언트도 TLS 1.2 프로토콜을 지원 하는지 확인 하도록 구성 되어 있습니다.For example, if SQL ServerSQL Server is configured to require TLS 1.2, make sure your clients also support the TLS 1.2 protocol.