Шифрование подключений к SQL Server на Linux

Применимо к:SQL Server в Linux

SQL Server на Linux может использовать протокол TLS для шифрования данных, передаваемых через сеть между клиентским приложением и экземпляром SQL Server.

Поддержка операционной системы

SQL Server поддерживает одни и те же протоколы TLS в Windows и Linux: 1.3, 1.2, 1.1 и 1.0.

Начиная с SQL Server 2025 (17.x):

  • ПРОТОКОЛ TLS 1.3 включен по умолчанию
  • SUSE Linux Enterprise Server (SLES) не поддерживается

Действия по настройке TLS зависят от операционной системы, в которой выполняется SQL Server.

Note

TLS не поддерживается для конечных точек зеркального отображения базы данных в группах доступности Always On.

Требования к сертификатам

Убедитесь, что сертификаты соответствуют следующим требованиям:

  • Текущее системное время должно быть после Valid from свойства сертификата и перед Valid to свойством сертификата.

  • Сертификат должен быть предназначен для проверки подлинности сервера. Для этого требуется, чтобы свойство сертификата Enhanced Key Usage указывало Server Authentication (1.3.6.1.5.5.7.3.1).

  • Сертификат должен быть создан с помощью опции KeySpec в AT_KEYEXCHANGE. Как правило, свойство использования ключа сертификата (KEY_USAGE) также включает в себя шифрование ключей (CERT_KEY_ENCIPHERMENT_KEY_USAGE).

  • Свойство Subject сертификата должно указывать, что общее имя (CN) совпадает с именем узла или полным доменным именем (FQDN) сервера.

    Note

    Поддерживаются сертификаты с подстановочными знаками.

Настройка библиотек OpenSSL для использования (необязательно)

В /opt/mssql/lib/ каталоге можно создать символьные ссылки, указывающие, какие библиотеки libcrypto.so и libssl.so следует использовать для шифрования. Это удобно, если нужно заставить SQL Server использовать определенную версию OpenSSL, отличную от предоставленной системой для использования по умолчанию. Если эти символьные ссылки отсутствуют, SQL Server загружает библиотеки OpenSSL по умолчанию в системе.

Эти символьные ссылки должны называться libcrypto.so и libssl.so и находиться в каталоге /opt/mssql/lib/.

Overview

TLS используется для шифрования подключений от клиентского приложения к SQL Server. При правильной настройке TLS обеспечивает как конфиденциальность, так и целостность данных при взаимодействии клиента и сервера. Подключения TLS могут инициироваться клиентом или сервером.

Note

TLS не поддерживается для конечных точек зеркального отображения базы данных в группах доступности Always On.

В следующем разделе описывается настройка шифрования, инициированного клиентом.

Создание сертификата

/CN должно соответствовать полностью квалифицированному доменному имени узла SQL Server.

Caution

В этом примере используется самозаверяющий сертификат. Самоподписанные сертификаты не следует использовать в производственных окружениях. Нужно использовать сертификаты ЦС.

Убедитесь, что папки, где вы сохраняете сертификаты и приватные ключи, доступны пользователю mssql или группе, и у них установлены права на 700 (drwx------). Вы можете вручную создавать папки с правами доступа, установленными как 700 (drwx------), принадлежащие пользователю или группе mssql. В качестве альтернативы установите права на 755 (drwxr-xr-x) и убедитесь, что папки доступны группе mssql . Например, вы можете создать папку с именем sslcert по пути /var/opt/mssql/ и сохранить сертификат и закрытый ключ, установив для файлов права доступа 600, как показано в следующем примере.

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
# Save the certificate to the certs folder under /etc/ssl/
sudo mv mssql.pem /etc/ssl/certs/
# Save the private key to the private folder under /etc/ssl/
sudo mv mssql.key /etc/ssl/private/

Настройка SQL Server

Для SQL Server 2022 (16.x) и более ранних версий:

systemctl stop mssql-server
sudo cat /var/opt/mssql/mssql.conf
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 0
systemctl restart mssql-server

Для SQL Server 2025 (17.x):

systemctl stop mssql-server
sudo cat /var/opt/mssql/mssql.conf
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.forceencryption 0
systemctl restart mssql-server

Регистрация сертификата на клиентском компьютере (Windows, Linux или macOS)

  • Если вы используете сертификат, подписанный CA, скопируйте сертификат центра сертификации (CA) вместо пользовательского сертификата на клиентскую машину.

  • Если вы используете самоподписанный сертификат, скопируйте .pem файл в папку для вашего дистрибутива и выполните команду, чтобы его включить:

    • Ubuntu: скопируйте сертификат в /usr/share/ca-certificates/, переименуйте его расширение в .crt, и используйте dpkg-reconfigure ca-certificates для включения его в качестве системного сертификата CA.

    • RHEL: Скопируйте сертификат в /etc/pki/ca-trust/source/anchors/ и используйте update-ca-trust его для включения в качестве системного сертификата CA.

    • SUSE: Скопируйте сертификат в /usr/share/pki/trust/anchors/ и используйте update-ca-certificates его для включения в качестве системного сертификата CA.

    • Windows: Импортируйте файл .pem как сертификат в хранилище Текущий пользователь>Доверенные корневые центры сертификации>Сертификаты.

    • macOS:

      • Скопируйте сертификат в /usr/local/etc/openssl/certs.

      • Выполните следующую команду, чтобы получить хэш-значение:

        /usr/local/Cellar/openssl/1.0.2l/openssl x509 -hash -in mssql.pem -noout
        
      • Переименуйте сертификат на {значение}. Например, используйте mv mssql.pem dc2dd900.0. Убедитесь, что dc2dd900.0 находится в /usr/local/etc/openssl/certs.

Примеры строк подключения

Caution

Пароль должен соответствовать политике паролей по умолчанию SQL Server. По умолчанию пароль должен быть не короче восьми символов и содержать три вида символов из следующих: прописные буквы, строчные буквы, десятичные цифры, специальные символы. Пароли могут иметь длину до 128 символов. Рекомендуется использовать максимально длинные и сложные пароли.

  • SQL Server Management Studio

    Снимок экрана: диалоговое окно подключения SQL Server Management Studio.

  • sqlcmd

    sqlcmd -S <sqlhostname> -N -U sa -P '<password>'

  • ADO.NET

    "Encrypt=True; TrustServerCertificate=False;"

  • ODBC

    "Encrypt=Yes; TrustServerCertificate=no;"

  • JDBC

    "encrypt=true; trustServerCertificate=false;"

Распространенные ошибки при подключении

Сообщение об ошибке Исправление
The certificate chain was issued by an authority that is not trusted. Эта ошибка возникает, когда клиенты не могут проверить подпись сертификата, представленного SQL Server во время подтверждения TLS. Убедитесь, что клиент доверяет либо сертификату SQL Server напрямую, либо ЦС, который подписал сертификат SQL Server.
The target principal name is incorrect. Убедитесь, что общее поле имени в сертификате SQL Server совпадает с именем сервера, указанным в строка подключения клиента.
An existing connection was forcibly closed by the remote host. Эта ошибка может возникать, если клиент не поддерживает версию протокола TLS, необходимую SQL Server. Например, если SQL Server настроен на требование TLS 1.2, убедитесь, что клиенты также поддерживают протокол TLS 1.2.

Ubuntu 20.04 и другие недавние дистрибутивы Linux

Симптом

Когда экземпляр SQL Server на Linux загружает сертификат, созданный с помощью алгоритма подписи, использующий менее 112 бит безопасности (например, MD5, SHA-1), может возникнуть ошибка подключения, как показано в следующем примере:

A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - An existing connection was forcibly closed by the remote host.) (Microsoft SQL Server, Error: 10054)

Ошибка возникает из-за включения уровня безопасности OpenSSL 2 по умолчанию в Ubuntu 20.04 и более поздних версиях. Уровень безопасности 2 запрещает TLS-подключения, которые имеют менее 112 бит безопасности.

Решение

Установите сертификат с алгоритмом подписи, используя не менее 112 бит безопасности. Алгоритмы подписи, которые соответствуют этому требованию: SHA-224, SHA-256, SHA-384 и SHA-512.