Настройка импортированного самоподписанного сертификата 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, чтобы получить изменения.

Другие вопросы по тегам