Categories: SQL Server

Настраиваем шифрование подключений к базе данных MS SQL Server

Если вы используете недоверенные/незащищенные сети для подключения клиентов/приложений к базе данных на Microsoft SQL Server, желательно использовать шифрование трафика. В этой статье мы покажем, как настроить и включить обязательное SSL/TLS-шифрование трафика для подключений клиентов к Microsoft SQL Server.

Начиная с MS SQL 2016 вместо SSL используется TLS.

Чтобы включить шифрование для подключения к MS SQL Server, на сервере нужно установить TLS/SSL сертификат. Это может быть коммерческий сертификат, сертификат, выданный вашим CA, или самоподписанный сертификат. TLS сертификат должен удовлетворять следующим условиям:

  • Назначение сертификата (Enhanced Key Usage) — Server Authentication 1.3.6.1.5.5.7.3.1 ;
  • Валидный срок действия сертификата;
  • Сертификат должен находится в хранилище сертификатов пользователя ( certmgr.msc ) или компьютера ( certlm.msc );
  • В качестве Subject Name сертификата должно быть указано имя сервера, где запущен MSSQL;
  • Клиенты должны доверять сертификату.

Можно создать самоподписанный сертификат с помощью PowerShell (самоподписанные сертификаты рекомендуется использоваться только в тестовых средах):

New-SelfSignedCertificate -DnsName srv-rds1.resource.com -CertStoreLocation cert:LocalMachineMy

Если вы будете обращаться к MSSQL инстансу не только по имени хоста, но и по другим именам (например, на сервере находится листенер группы высокой доступности Always-On с базой данный RDS Connection Broker ), нужно добавить все возможные имена в Subject Alternative Name. Для выпуска самоподписанного сертификата с несколькими SAN на три года:

$todaydate = Get-Date
$add3year = $todaydate.AddYears(3)
$newcert=New-SelfSignedCertificate -DnsName srv-rds1,srv-rds1.remontka.loc,SQL-RDSDB-liste.remontka.loc -CertStoreLocation cert:LocalMachineMy -notafter $add3year

Импортируйте сертификат в доверенные:

$certFile = Export-Certificate -Cert $newcert -FilePath C:certname.cer
Import-Certificate -CertStoreLocation Cert:LocalMachineAuthRoot -FilePath $certFile.FullName

Если вы используете сертификат, полученный от вашего или внешнего CA, его нужно импортировать в сертификаты компьютера (или пользователя, если MS SQL Server запушен от имени пользователя или управляемого аккаунта gMSA ). Если служба SQL Server запущенна от имени учетной записи, у которой нет прав локального администратора, нужно предоставить доступ на чтение сертификата.

Теперь нужно привязать ваш сертификат к установленному SQL Server :

  1. Откройте SQL Server Configuration Manager , перейдите в SQL Server Network Configuration , откройте свойства Protocols for MSSQLSERVER ;
  2. Включите опцию Force Encryption ;
  3. Перейдите на вкладку Certificate и в выпадающем списке выберите сертификат, который вы импортировали в хранилище сертификатов пользователя или компьютера;
  4. Перезапустите MS SQL чтобы применить изменения.

Чтобы клиент всегда использовал шифрованное подключение к серверу MSSQL нужно:

  • Запустить на клиенте Server Configuration Manager -> SQL Native Client Configuration -> Свойства -> Включить Force Protocol Encryption ;
  • Также можно использовать такую строку подключения, которая заставляет клиента использовать SSL/TLS для подключения к серверу MSSQL: Data Source=sqldb1.remontka.com;Integrated Security=False;User ID=test;Password=[Password];Encrypt=True
Клиенты должны доверять сертификату, используемому для шифрования трафика. Иначе при подключении будет появляться ошибка:
Cannot connect to SRV-SQL._x000D_A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - The certificate chain was issued by an authority that is not trusted.) (Microsoft SQL Server, Error: -2146893019)

Вы можете добавить сертификат в доверенные на компьютерах домена с помощью GPO .

Чтобы SSMS всегда использовал шифрование для подключения к базе данных SQL Server, откройте окно подключения (Connect to Server) -> Options -> включите опцию Encrypt Connection .

При появлении ошибки “ The target principal name is incorrect” , проверьте что вы используете для подключения имя SQL Server, указанное в Subject Name или SAN сертификата.

Вы можете подключиться к SQL сервер с помощью PowerShell модуля SqlServer и проверить, поддерживает ли ваш SQL Server шифрование подключений:

Invoke-Sqlcmd -ServerInstance "srv-rds1" -Query "SELECT DISTINCT encrypt_option FROM sys.dm_exec_connections WHERE session_id = @@SPID"

Если ваш экземпляр SQL запущен на не стандартом порту , он указывается так: -ServerInstance "srv-rds1,21221"

В нашем примере SQL Server поддерживает шифрованные подключения ( encrypt_option=TRUE ).

Базы данных Azure SQL поддерживают только защищенные подключения. Даже если в SSMS не вкдлючена опция «Encrypt connection», подключение к Azure SQL будет все равно зашифровано (см. статью Безопасность БД в Azure SQL ).

admin

Share
Published by
admin

Recent Posts

Apple: история логотипа

Как менялся логотип Apple на протяжении многих лет. Логотип Apple — это не просто символ,…

1 неделя ago

Security Boot Fail при загрузке Acer — решение проблемы

Security Boot Fail при загрузке Acer — решение проблемы При загрузке ноутбука Acer с флешки,…

3 недели ago

Ноутбук не включается — варианты решения

Ноутбук не включается — варианты решения Если при попытке включить ноутбук вы обнаруживаете, что он…

3 недели ago

The AC power adapter wattage and type cannot be determined — причины и решение

The AC power adapter wattage and type cannot be determined — причины и решение При…

3 недели ago

Свистит или звенит блок питания компьютера — причины и решения

Свистит или звенит блок питания компьютера — причины и решения Некоторые владельцы ПК могут обратить…

3 недели ago

Мигает Caps Lock на ноутбуке HP — почему и что делать?

Мигает Caps Lock на ноутбуке HP — почему и что делать? При включении ноутбука HP…

3 недели ago