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

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

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

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

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

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

Аргументы

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

    ms186362.note(ru-ru,SQL.90).gifПримечание.
    Хэш сертификата можно получить из хранилища сертификатов. Его можно просмотреть через оснастку «Сертификаты» или при помощи консольной программы CertUtil.
  • Guid
    Строка GUID, которая идентифицирует сущность, регистрирующую сертификат. Рекомендуется создавать отдельную строку GUID для каждого экземпляра SQL Server 2005 и пользоваться ею для регистрации всех сертификатов для этого экземпляра.

Регистрация сертификата для IP:Port затрагивает все приложения, прослушивающие этот IP:Port. Например, если экземпляр SQL Server 2005 и еще какое-нибудь приложение, такое как службы 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.

Примеры

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

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 2005 для связи с клиентами в Интернете по протоколу SSL, можно получить в центре сертификации (например, Verisign).

Однако в тестовых целях можно создать специальный сертификат с помощью программы MakeCert.exe. Она входит в состав пакета SDK Microsoft .NET Framework, а также в пакет 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-srлокальный_компьютер

-skyexchange-sp"Поставщик криптографии Microsoft RSA SChannel"-sy12

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

  • -r
    Создает сертификат с собственной подписью. Сертификат с собственной подписью — это сертификат, который подписан не центром сертификации. Поскольку он не подписан центром сертификации, этот сертификат может использоваться для шифрования, обязательного для протокола SSL, но не может применяться при проверке подлинности сервера.
  • -n
    Указывает имя сервера. Это имя должно соответствовать стандарту X.500. Простейший способ указать имя — заключить его в двойные кавычки и поставить после CN=.
  • -eku
    Указывает в сертификате список разделенных запятыми объектных идентификаторов (OID) расширенного использования ключей. Для SQL Server 2005 требуется сертификат 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 установлены на компьютере, драйвер Http.sys мог уже зарегистрировать сертификат SSL. Если это не так, для создания и регистрации сертификата можно воспользоваться мастером IIS.

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

Замечания

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

См. также

Основные понятия

Настройка драйвера протокола HTTP, работающего в режиме ядра (Http.sys)

Справка и поддержка

Получение помощи по SQL Server 2005