Настройка импортированного самоподписанного сертификата SSL в SQL Server Express
Я создал самозаверяющий сертификат и настроен с помощью SQL Server Express. Шифрование отлично работает на моем ПК.
Когда я экспортирую сертификат на другой компьютер, я могу импортировать в порядке и увидеть сертификат в MMC в разделе "Личные"> "Сертификаты".
Однако, когда я пытаюсь настроить SQL Server Express на новом ПК, сертификат не отображается в раскрывающемся списке.
Какие-либо предложения?
Я попробовал несколько вещей, предложенных на других форумах
Убедитесь, что экспортирован закрытый ключ. Убедитесь, что сертификат создан для локальной системы (не пользователя). Скопируйте сертификат в доверенные сертификаты.
До сих пор я получал ответ, что в качестве значения CN сертификата указано имя компьютера, на котором он был создан на "Server1". Это не будет работать при копировании на другой компьютер с другим именем компьютера "Server2".
Это можно обойти?
1 ответ
Графический интерфейс конфигурации SQL TLS очень требователен к сертификатам, которые он покажет в раскрывающемся списке. И да, значение CN - одна из тех вещей, к которым она привередлива. Поэтому, если CN не соответствует имени сервера, он не будет отображаться, даже если имя сервера находится в поле Subject Alternative Name.
Таким образом, ваш первый вариант - создать новый самоподписанный сертификат, который соответствует и использует его.
Другой вариант - обойти GUI и вместо этого установить сертификат через реестр. Расположение реестра зависит от используемой версии SQL. Я не уверен, если SQL Express отличается от полного SQL. Но вот место для полного SQL 2016. В основном, найти SuperSocketNetLib
ключ для вашей установки / экземпляра.
HKLM:\Software\Microsoft\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQLServer\SuperSocketNetLib
Вам также нужен отпечаток сертификата для вашего сертификата. Вы можете найти это через PowerShell, как это. Скопируйте значение в столбец Thumbprint для вашего сертификата.
dir cert:\LocalMachine\My
Теперь используйте следующее из сеанса PowerShell с повышенными правами, чтобы установить значение отпечатка и применить шифрование.
$regPath = 'HKLM:\Software\Microsoft\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQLServer\SuperSocketNetLib'
$thumbprint = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
Set-ItemProperty $regPath -Name 'Certificate' -Value $thumbprint
Set-ItemProperty $regPath -Name 'ForceEncryption' -Value 1 -Type Dword
И, наконец, перезапустите службу SQL, чтобы получить изменения.