Crittografia delle connessioni a SQL Server in LinuxEncrypting Connections to SQL Server on Linux

QUESTO ARGOMENTO SI APPLICA A: noSQL Server su WindowssìSQL Server su LinuxnoDatabase SQL di AzurenoAzure SQL Data WarehousenoParallel Data Warehouse THIS TOPIC APPLIES TO: noSQL Server on WindowsyesSQL Server on LinuxnoAzure SQL DatabasenoAzure SQL Data WarehousenoParallel Data Warehouse

SQL ServerSQL Serverin Linux possono usare Transport Layer Security (TLS) per crittografare i dati trasmessi in una rete tra un'applicazione client e un'istanza di 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 Serversupporta gli stessi protocolli TLS in Windows e Linux: TLS 1.0, 1.1 e 1.2. supports the same TLS protocols on both Windows and Linux: TLS 1.2, 1.1, and 1.0. Tuttavia, i passaggi per configurare TLS sono specifici del sistema operativo in cui SQL ServerSQL Server è in esecuzione.However, the steps to configure TLS are specific to the operating system on which SQL ServerSQL Server is running.

Requisiti per i certificatiRequirements for Certificates

Prima di iniziare, è necessario assicurarsi che i certificati di rispettare i requisiti seguenti:Before we get started, you need to make sure your certificates follow these requirements:

  • Ora di sistema corrente deve essere successiva alla proprietà del certificato valido dalla proprietà del certificato e prima valido.The current system time must be after the Valid from property of the certificate and before the Valid to property of the certificate.
  • Il certificato deve essere destinato all'autenticazione del server.The certificate must be meant for server authentication. Ciò richiede che la proprietà utilizzo chiavi avanzato del certificato per specificare l'autenticazione Server (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).
  • Tramite l'opzione KeySpec di AT_KEYEXCHANGE, è necessario creare il certificato.The certificate must be created by using the KeySpec option of AT_KEYEXCHANGE. Proprietà di utilizzo della chiave del certificato (KEY_USAGE) vengono inclusi in genere, crittografia chiave (CERT_KEY_ENCIPHERMENT_KEY_USAGE).Usually, the certificate's key usage property (KEY_USAGE) will also include key encipherment (CERT_KEY_ENCIPHERMENT_KEY_USAGE).
  • La proprietà Subject del certificato deve indicare che il nome comune (CN) è lo stesso come il nome host o nome di dominio completo (FQDN) del computer server.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. Nota: i certificati con caratteri jolly sono supportati.Note: Wild Card Certificates are supported.

PanoramicaOverview

TLS è utilizzato per crittografare le connessioni da un'applicazione client SQL ServerSQL Server.TLS is used to encrypt connections from a client application to SQL ServerSQL Server. Quando è configurato correttamente, TLS fornisce privacy e l'integrità dei dati per le comunicazioni tra client e il server.When configured correctly, TLS provides both privacy and data integrity for communications between the client and the server. Le connessioni TLS possono essere initited intiated o server di client.TLS connections can either be client intiated or server initited.

Crittografia iniziata dal clientClient Initiated Encryption

  • Generare certificato (/CN deve corrispondere il nome di dominio completo di host di SQL Server)Generate certificate (/CN should match your SQL Server host fully-qualified domain name)

Nota

Per questo esempio viene usato un certificato autofirmato, questo non deve essere utilizzato per gli scenari di produzione.For this example we use a Self-Signed Certificate, this should not be used for production scenarios. È consigliabile utilizzare i certificati della 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/ 
  • Configurare SQL ServerConfigure 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 
    
  • Registrare il certificato nel computer client (Windows, Linux o Mac OS)Register the certificate on your client machine (Windows, Linux or macOS)

    • Se si usa un certificato CA firmato è necessario copiare il certificato di autorità di certificazione (CA) anziché il certificato utente nel computer client.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.
    • Se si utilizza il certificato autofirmato appena copiare il file PEM nelle cartelle seguenti rispettive al distribuzione ed eseguire i comandi per abilitarliIf 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 : il certificato di copia al /usr/share/ca-certificates/ Rinomina estensione CRT usare i certificati ca dpkg reconfigure per abilitarlo come autorità di certificazione del certificato.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 : il certificato di copia al /etc/pki/ca-trust/source/anchors/ utilizzare update-ca-trust per abilitarlo come autorità di certificazione del certificato.RHEL : Copy cert to /etc/pki/ca-trust/source/anchors/ use update-ca-trust to enable it as system CA certificate.
      • SUSE : il certificato di copia al /usr/share/pki/trust/anchors/ utilizzare update-ca-certificates per abilitare il relativo come autorità di certificazione del certificato.SUSE : Copy cert to /usr/share/pki/trust/anchors/ use update-ca-certificates to enable its as system CA certificate.
      • Windows: Importa il file con estensione PEM come un certificato in utente corrente -> attendibile l'autorità di certificazione radice -> certificatiWindows: Import the .pem file as a certificate under current user -> trusted root certification authorities -> certificates
      • macOS:macOS:
        • Copiare il certificato/usr/local/etc/openssl/certsCopy the cert to /usr/local/etc/openssl/certs
        • Eseguire il comando seguente per ottenere il valore hash:/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
        • Rinominare il certificato come valore.Rename the cert to value. Esempio: mv mssql.pem dc2dd900.0.For example: mv mssql.pem dc2dd900.0. Verificare che sia dc2dd900.0 in/usr/local/etc/openssl/certsMake sure dc2dd900.0 is in /usr/local/etc/openssl/certs
  • Esempi di stringhe di connessioneExample connection strings

    • SQL Server Management StudioSQL Server Management Studio
      Finestra di dialogo connessione SQL Server Management StudioSSMS 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;" 
      

Crittografia avviata dal serverServer Initiated Encryption

  • Generare certificato (/CN deve corrispondere il nome di dominio completo di host di 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/ 
    
  • Configurare SQL ServerConfigure 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 
    
  • Esempi di stringhe di connessioneExample 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;" 
      

Nota

Impostare TrustServerCertificate su True se il client non è possibile connettersi all'autorità di certificazione per convalidare l'autenticità del certificatoSet TrustServerCertificate to True if the client cannot connect to CA to validate the authenticity of the cert

Errori di connessione comuniCommon connection errors

Messaggio di erroreError message FixFix
La catena di certificati è stato emesso da un'autorità di cui non è attendibile.The certificate chain was issued by an authority that is not trusted. Questo errore si verifica quando i client sono in grado di verificare la firma sul certificato presentato dal Server SQL durante l'handshake TLS.This error occurs when clients are unable to verify the signature on the certificate presented by SQL Server during the TLS handshake. Verificare che il client considera attendibile uno di SQL ServerSQL Server certificato direttamente oppure l'autorità di certificazione che ha firmato il certificato di SQL Server.Make sure the client trusts either the SQL ServerSQL Server certificate directly, or the CA which signed the SQL Server certificate.
Il nome dell'entità di destinazione non è corretto.The target principal name is incorrect. Assicurarsi che il campo nome comune nel certificato di SQL Server corrisponda al nome di server specificato nella stringa di connessione del client.Make sure that Common Name field on SQL Server's certificate matches the server name specified in the client's connection string.
Una connessione esistente chiusa forzatamente dall'host remoto.An existing connection was forcibly closed by the remote host. Questo errore può verificarsi quando il client non supporta la versione del protocollo TLS richiesta da SQL Server.This error can occur when the client doesn't support the TLS protocol version required by SQL Server. Ad esempio, se SQL ServerSQL Server è configurato per richiedere TLS 1.2, assicurarsi che i client supportano anche il protocollo 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.