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

이 항목 적용 대상: 예(Linux에만 해당) SQL Server없습니다Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스없는병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL Server (Linux only)noAzure SQL DatabasenoAzure SQL Data WarehousenoParallel 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.

인증서에 대 한 요구 사항Requirements for Certificates

시작 하기 전에 인증서 이러한 요구 사항을 따라야 할 있습니다.Before we get started, you need to make sure your certificates follow these requirements:

  • 현재 시스템 시간을 인증서의 속성 및 유효 기간 전에 인증서의 속성에서 유효 기간 이후 여야 합니다.The current system time must be after the Valid from property of the certificate and before the Valid to property of the certificate.
  • 인증서는 서버 인증용이어야 합니다.The certificate must be meant for server authentication. 이 서버 인증 (1.3.6.1.5.5.7.3.1)을 지정 하려면 인증서의 확장 된 키 사용 속성이 필요 합니다.This requires the Enhanced Key Usage property of the certificate to specify Server Authentication (1.3.6.1.5.5.7.3.1).
  • 인증서에 AT_KEYEXCHANGE KeySpec 옵션을 사용 하 여 만들어야 합니다.The certificate must be created by using the KeySpec option of AT_KEYEXCHANGE. 일반적으로 인증서의 키 용도 속성 (KEY_USAGE) 키 암호화 (CERT_KEY_ENCIPHERMENT_KEY_USAGE)도 포함 됩니다.Usually, the certificate's key usage property (KEY_USAGE) will also include key encipherment (CERT_KEY_ENCIPHERMENT_KEY_USAGE).
  • 인증서의 주체 속성과 CN (일반 이름) 호스트 이름이 나 서버 컴퓨터의 정규화 된 도메인 이름 (FQDN)으로 동일한 인지 지정 해야 합니다.The Subject property of the certificate must indicate that the common name (CN) is the same as the host name or fully qualified domain name (FQDN) of the server computer. 참고: 와일드 카드 인증서 지원 됩니다.Note: Wild Card Certificates are supported.

개요Overview

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. TLS 연결의 클라이언트 intiated 또는 서버 initited 수 있습니다.TLS connections can either be client intiated or server initited.

클라이언트는 암호화 시작Client Initiated Encryption

  • 인증서 생성 (/CN와 일치 해야 SQL Server 호스트 정규화 된 도메인 이름)Generate certificate (/CN should match your SQL Server host fully-qualified domain name)

참고

이 예제에서는 자체 서명 된 인증서 사용에 대 한이 쓰일 수 없습니다 프로덕션 시나리오에 있습니다.For this example we use a Self-Signed Certificate, this should not be used for production scenarios. CA 인증서를 사용 해야 합니다.You should use CA certificates.

    openssl req -x509 -nodes -newkey rsa:2048 -subj '/CN=mssql.contoso.com' -keyout mssql.key -out mssql.pem -days 365 
    sudo chown mssql:mssql mssql.pem mssql.key 
    sudo chmod 600 mssql.pem mssql.key   
    sudo mv mssql.pem /etc/ssl/certs/ 
    sudo mv mssql.key /etc/ssl/private/ 
  • SQL Server 구성Configure SQL Server

      systemctl stop mssql-server 
      cat /var/opt/mssql/mssql.conf 
      sudo /opt/mssql/bin/mssql-conf set network.tlscert /etc/ssl/certs/mssqlfqdn.pem 
      sudo /opt/mssql/bin/mssql-conf set network.tlskey /etc/ssl/private/mssqlfqdn.key 
      sudo /opt/mssql/bin/mssql-conf set network.tlsprotocols 1.2 
      sudo /opt/mssql/bin/mssql-conf set network.forceencryption 0 
    
  • (Windows, Linux 또는 macOS) 클라이언트 컴퓨터의 인증서 등록Register the certificate on your client machine (Windows, Linux or macOS)

    • CA 서명된 인증서를 사용 하는 경우 클라이언트 컴퓨터에는 사용자 인증서 대신 CA (인증 기관) 인증서를 복사 해야 합니다.If you are using CA signed certificate you have to copy the Certificate Authority (CA) certificate instead of the user certificate to the client machine.
    • 방금 자체 서명 된 인증서를 사용 하는 경우에 다음 폴더를 배포 하려면 각.pem 파일을 복사 하 고 사용할 수 있도록 하려면 명령을 실행합니다If you are using the self-signed certificate just copy the .pem file to the following folders respective to distribution and execute the commands to enable them
      • Ubuntu : 인증서를 복사 /usr/share/ca-certificates/ .crt에 이름 바꾸기 확장 dpkg reconfigure ca 인증서를 사용 하 여 시스템 CA 인증서로 사용 하도록 설정 합니다.Ubuntu : Copy cert to /usr/share/ca-certificates/ rename extension to .crt use dpkg-reconfigure ca-certificates to enable it as system CA certificate.
      • RHEL : 인증서를 복사 /etc/pki/ca-trust/source/anchors/ 사용 update-ca-trust 시스템 CA 인증서로 사용 하도록 설정 합니다.RHEL : Copy cert to /etc/pki/ca-trust/source/anchors/ use update-ca-trust to enable it as system CA certificate.
      • SUSE : 인증서를 복사 /usr/share/pki/trust/anchors/ 사용 update-ca-certificates 해당으로 사용할 수 있도록 시스템 CA 인증서입니다.SUSE : Copy cert to /usr/share/pki/trust/anchors/ use update-ca-certificates to enable its as system CA certificate.
      • Windows:-> 인증서 루트 인증 기관 트러스트 된-> 현재 사용자 인증서로.pem 파일 가져오기Windows: Import the .pem file as a certificate under current user -> trusted root certification authorities -> certificates
      • macOS:macOS:
        • 인증서를 복사 합니다./usr/local/etc/openssl/certsCopy the cert to /usr/local/etc/openssl/certs
        • 해시 값을 가져오려면 다음 명령을 실행 합니다./usr/local/Cellar/openssql/1.0.2l/openssql x509 -hash -in mssql.pem -nooutRun the following command to get the hash value: /usr/local/Cellar/openssql/1.0.2l/openssql x509 -hash -in mssql.pem -noout
        • 값은 인증서를 이름을 바꿉니다.Rename the cert to value. 예를 들면 mv mssql.pem dc2dd900.0과 같습니다.For example: mv mssql.pem dc2dd900.0. Dc2dd900.0에 있는지 확인/usr/local/etc/openssl/certsMake sure dc2dd900.0 is in /usr/local/etc/openssl/certs
  • 연결 문자열 예Example connection strings

    • SQL Server Management StudioSQL Server Management Studio
      SSMS 연결 대화 상자SSMS connection dialog

    • SQLCMDSQLCMD

        sqlcmd  -S <sqlhostname> -N -U sa -P '<YourPassword>' 
      
    • ADO.NETADO.NET

        "Encrypt=True; TrustServerCertificate=False;" 
      
    • ODBCODBC

        "Encrypt=Yes; TrustServerCertificate=no;" 
      
    • JDBCJDBC

        "encrypt=true; trustServerCertificate=false;" 
      

서버 암호화 시작Server Initiated Encryption

  • 인증서 생성 (/CN와 일치 해야 SQL Server 호스트 정규화 된 도메인 이름)Generate certificate (/CN should match your SQL Server host fully-qualified domain name)

      openssl req -x509 -nodes -newkey rsa:2048 -subj '/CN=mssql.contoso.com' -keyout mssql.key -out mssql.pem -days 365 
      sudo chown mssql:mssql mssql.pem mssql.key 
      sudo chmod 600 mssql.pem mssql.key   
      sudo mv mssql.pem /etc/ssl/certs/ 
      sudo mv mssql.key /etc/ssl/private/ 
    
  • SQL Server 구성Configure SQL Server

      systemctl stop mssql-server 
      cat /var/opt/mssql/mssql.conf 
      sudo /opt/mssql/bin/mssql-conf set network.tlscert /etc/ssl/certs/mssqlfqdn.pem 
      sudo /opt/mssql/bin/mssql-conf set network.tlskey /etc/ssl/private/mssqlfqdn.key 
      sudo /opt/mssql/bin/mssql-conf set network.tlsprotocols 1.2 
      sudo /opt/mssql/bin/mssql-conf set network.forceencryption 1 
    
  • 연결 문자열 예Example connection strings

    • SQLCMDSQLCMD

        sqlcmd  -S <sqlhostname> -U sa -P '<YourPassword>' 
      
    • ADO.NETADO.NET

        "Encrypt=False; TrustServerCertificate=False;" 
      
    • ODBCODBC

        "Encrypt=no; TrustServerCertificate=no;"  
      
    • JDBCJDBC

        "encrypt=false; trustServerCertificate=false;" 
      

참고

설정 TrustServerCertificate 클라이언트 인증서의 신뢰성을 확인 하는 CA에 연결할 수 없는 경우 True로Set TrustServerCertificate to True if the client cannot connect to CA to validate the authenticity of the cert

일반적인 연결 오류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.