Поделиться через


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

В будущей версии 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. Она входит в состав пакета SDK .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-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: e302d3a7a831c9884c0dd736f24825e6Issuer: CN=MySQLServerNameSubject: CN=MySQLServerNameSignature matches Public KeyRoot Certificate: Subject matches IssuerCert 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 ProviderEncryption test passedCertUtil: -store command completed successfully.

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

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