Настройка сертификата для использования протоколом SSL

Собственные XML-веб-службы устарели. В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется.

Для связи по протоколу SSL сервер HTTP должен для каждого сокета (комбинации IP-адреса и порта) иметь зарегистрированный сертификат, предназначенный для защиты канала протоколом SSL. Сертификат должен быть авторизован для проверки подлинности на сервере. Сертификат SSL можно получить в центре выдачи сертификатов (например, Verisign) или создать самостоятельно (для целей тестирования) при помощи инструментов выдачи и создания сертификатов.

Независимо от способа, которым получен сертификат, он должен быть зарегистрирован на сервере. Для регистрации, запроса и удаления сертификатов SSL рекомендуется использовать служебную программу конфигурации HTTP (HttpCfg.exe).

Регистрация SSL-сертификатов

Для регистрации сертификата выполните следующую команду:

httpcfg set ssl /iIP:Port**/hHash/g**Guid

Аргументы

  • IP:Port
    Комбинация IP-адреса и порта, для которой регистрируется сертификат.

  • Hash
    Хэш сертификата.

    ПримечаниеПримечание

    Хэш сертификата можно получить из хранилища сертификатов. Его можно просмотреть через оснастку «Сертификаты» или с помощью консольной программы CertUtil.

  • Guid
    Строка идентификатора GUID, которая идентифицирует сущность, регистрирующую сертификат. Рекомендуется создавать отдельную строку GUID для каждого экземпляра SQL Server и пользоваться ею для регистрации всех сертификатов для этого экземпляра.

Регистрация сертификата для IP:Port затрагивает все приложения, прослушивающие этот IP:Port. Например, если экземпляр SQL Server и еще какое-нибудь приложение, такое как службы IIS, прослушивают один и тот же порт IP:Port (10.0.0.1:80), то экземпляр SQL Server при регистрации сертификата SSL для 10.0.0.1:80 воздействует на службы IIS, поэтому и экземпляру SQL Server, и службам IIS придется совместно использовать один и тот же сертификат. Это является ограничением драйвера протокола HTTP (Http.sys). Когда драйвер Http.sys получает запрос на IP:Port 10.0.0.1:80, то, поскольку этот запрос зашифрован, Http.sys не может на основании переданного URL-адреса определить, кому принадлежит этот запрос, — SQL Server или службам IIS. Драйвер Https.sys может маршрутизировать запрос только тогда, когда он будет расшифрован. Поэтому для разных приложений, прослушивающих один и тот же IP:Port, не могут быть использованы разные сертификаты SSL.

Если SQL Server выполняется на платформе Windows Vista (или эквивалентном выпуске Windows Server), может потребоваться специальная регистрация сертификата для локального IP-адреса (IPv4: 127.0.0.1 или IPv6: [::1]), а также внешнего IP-адреса компьютера, чтобы обеспечить возможность обмена данными «locahost» через протокол SSL. Также можно указать точно не установленный адрес (IPv4: 0.0.0.0 или IPv6: [::]) при регистрации SSL-сертификата. Кроме того, Windows Vista располагает встроенным средством, помогающим управлять регистрацией SSL-сертификата, вместо использования средства httpcfg.exe. Новая команда имеет следующий вид:

netsh http add sslcert ipport=IP:Port certhash=Hash appid=Guid

Например:

netsh http add sslcert ipport=[::]:443 certhash=<hash> appid=<guid>Examples

В следующем примере показано, как зарегистрировать сертификат.

httpcfg set ssl /i 10.0.0.1:80 /h 2c8bfddf59a4a51a2a5b6186c22473108295624d 
/g "{2bb50d9c-7f6a-4d6f-873d-5aee7fb43290}"

Запрос сертификата

Для просмотра всех зарегистрированных сертификатов выполните следующую команду:

httpcfg query ssl

Для просмотра одного сертификата укажите параметр /i:

httpcfg query ssl /iIP:Port

Аргументы

  • IP:Port
    Комбинация IP-адреса и порта, для которой запрашивается сертификат.

Пример

httpcfg query ssl 
httpcfg query ssl /I 10.0.0.1:80

Удаление SSL-сертификатов

Чтобы удалить сертификат, задайте параметр /i:

httpcfg delete ssl /iIP:Port

Аргументы

  • IP:Port
    Комбинация IP-адреса и порта, для которой удаляется сертификат.

Пример

httpcfg delete ssl /i 10.0.0.1:80

Получение сертификата

Сертификат, необходимый SQL Server для связи с клиентами в Интернете по протоколу SSL, можно получить в центре сертификации (например, Verisign).

Однако в тестовых целях можно создать специальный сертификат с помощью программы MakeCert.exe. MakeCert.exe входит в состав пакета .NET Framework SDK. а также в пакет Platform SDK. Пакет SDK можно загрузить со следующих страниц: Центр разработки для платформы Microsoft .NET Framework и Центр загрузки Microsoft. Эта программа создает сертификаты X.509. Создаваемые для цифровой подписи открытый и закрытый ключи сохраняются в файле сертификата. Эта программа также связывает эту пару ключей с указанным издателем и создает сертификат X.509, привязывающий указанное пользователем имя к открытому ключу.

Чтобы создать SSL-сертификат для сервера с именем узла (MySQLServer), необходимо запустить программу MakeCert со следующими параметрами:

makecert -r -pe -nCN="MySQLServer**"-eku1.3.6.1.5.5.7.3.1-ssmy-srlocalmachine**

-skyexchange-sp"Поставщик служб шифрования Microsoft RSA SChannel"-sy12

Ключи командной строки

  • -r
    Создает самозаверяющийся сертификат. Самозаверяющийся сертификат с — это сертификат, который подписан не центром сертификации. Поскольку он не подписан центром сертификации, этот сертификат может использоваться для шифрования, обязательного для протокола SSL, но не может применяться при проверке подлинности сервера.

  • -n
    Указывает имя сервера. Это имя должно соответствовать стандарту X.500. Простейший способ указать имя — заключить его в двойные кавычки и поставить после CN=.

  • -eku
    Указывает в сертификате список разделенных запятыми объектных идентификаторов (OID) расширенного использования ключей. Для SQL Server требуется SSL-сертификат, подходящий для проверки подлинности сервера и имеющий OID 1.3.6.1.5.5.7.3.1 (szOID_PKIX_KP_SERVER_AUTH).

  • -ss
    Указывает хранилище сертификатов, в котором сохраняется созданный сертификат. Рекомендуется сохранять его в хранилище my, хотя сертификат может содержаться в любом хранилище.

  • -sr
    Указывает хранилище сертификатов, в котором находится сертификат, и может быть равен: currentuser (по умолчанию) или localmachine. Поскольку сертификат создается для службы, он должен быть помещен на локальный компьютер.

  • -sky
    Указывает тип ключа сертификата. Это может быть тип signature, exchange или целое число, например 4. Для алгоритма передачи открытых ключей RSA требуется тип exchange. Он используется для шифрования и дешифрования ключей сеанса.

  • -sp
    Указывает имя поставщика CryptoAPI. Для сертификатов SQL Server это может быть Поставщик служб шифрования Microsoft RSA SChannel.

  • -sy
    Указывает тип поставщика CryptoAPI. Если поставщиком является Поставщик служб шифрования Microsoft RSA SChannel, это значение равно 12.

Дополнительные параметры командной строки

  • -b
    Значение даты в формате ДД/ММ/ГГГГ, которое указывает начало срока действия сертификата. По умолчанию это дата создания сертификата.

  • -e
    Значение даты в формате ДД/ММ/ГГГГ, которое указывает конец срока действия сертификата. Если не указано иное, срок действия сертификата истекает 31/12/2039 в 11:59:59 по Гринвичу.

Примеры

В следующем примере показано создание сертификата с помощью программы MakeCert с дополнительными параметрами.

makecert -r -pe -n "CN= MySQLServerName" -b 01/01/2000 -e 01/01/2036 
    -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localMachine -sky exchange 
    -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12

После создания сертификата его хэш можно получить с помощью консоли MMC или программы CertUtil. Программа CertUtil также позволяет просмотреть список, содержащий вновь созданный сертификат.

C:\>certutil -store "my" "MySQLServerName"

================ Certificate 2 ================
Serial Number: e302d3a7a831c9884c0dd736f24825e6
Issuer: CN=MySQLServerName
Subject: CN=MySQLServerName
Signature matches Public Key
Root Certificate: Subject matches Issuer
Cert Hash(sha1): d2 2f 9a 7f 18 cb ed 13 a1 3e be e5 32 69 6c 4b ad ba b9 30
  Key Container = 956cbc46-f005-4aeb-b521-7c313f2ccd10
  Provider = Microsoft RSA SChannel Cryptographic Provider
Encryption test passed
CertUtil: -store command completed successfully.

Хэш, полученный запуском CertUtil, можно передать программе HttpCfg.exe для регистрации самозаверяющего сертификата.

Прежде чем запускать MakeCert для создания самозаверяющего SSL-сертификата и регистрировать его через Http.sys, проверьте, установлены ли на компьютере службы IIS. Эти службы содержат мастер, облегчающий регистрацию сертификатов SSL. Если службы IIS установлены на компьютере, то SSL-сертификат уже мог быть зарегистрирован в Http.sys. Если это не так, для создания и регистрации сертификата можно воспользоваться мастером IIS.

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

Замечания

  • При удалении экземпляра SQL Server все привязки сертификатов SSL, созданные с помощью Httpcfg.exe, остаются, поэтому их необходимо удалить вручную. Поскольку программа установки SQL Server не создает эти параметры, она их и не удаляет. Поэтому при удалении экземпляра SQL Server необходимо удалять и привязки к сертификатам SLL.

  • Хотя использование SSL по протоколу HTTP в SQL Server не требует наличия служб IIS, после их установки вместе с экземпляром SQL Server служба HTTP SSL становится связанной со службами IIS. Например, при остановке служб IIS командной строкой net stop iisadmin служба HTTP SSL также останавливается. Кроме того, после установки служб IIS под Windows нельзя запустить службу HTTP SSL без запуска IIS (Inetinfo.exe).