Гениально простое решение сложной проблемы — как глоток свежего воздуха. Именно такое сравнение уместно для нового центрального хранилища сертификатов (CCS, central certificate store) в IIS 8. В предыдущих версиях IIS сертификаты устанавливали на веб-фермы с помощью Windows PowerShell Remoting. Это целесообразно, если вы работаете с IIS на старых серверах. Однако если вы один из счастливчиков, осуществивших обновление до IIS 8, то вскоре вы обнаружите, что процесс работы с сертификатами приятен как легкий ветерок.
Займитесь подготовкой хранилища
CCS основано на истинно простом принципе. Поместите все сертификаты в общий ресурс Windows File Server, затем сделайте так, чтобы привязки веб-сайтов использовали эти сертификаты вместо установленных локально. Это не только уменьшит хаос, вносимый установкой сертификатов на несколько серверов, но и значительно сократит затраты времени на управление и усилий на поиск сертификатов, которые вскоре истекут.
Первый шаг — создание общего ресурса файлового сервера, на котором будут храниться .pfx-файлы сертификатов. Вы можете создать его на любом файловом сервере, независимо от ОС. Желательно, чтобы файловый сервер был кластерным, чтобы не было компонента, отказ которого приведет к отказу всей системы. Ведь вы не хотите потерять доступ к этим сертификатам.
Если вы используете веб-ферму, у вас уже имеется кластерный файловый сервер — или распределенная файловая система (Distributed File System, DFS) — доступный для вашей конфигурации совместного доступа к данным. Это отличное место, в котором можно создать еще один общий ресурс для сертификатов. Создайте учетную запись пользователя с правами на чтение из этого ресурса, и все будет готово.
При поиске сертификатов в хранилище CCS берет имя хоста из привязки веб-сайта и ищет файл с точно таким же именем и разширением .pfx. Например, если имеется два веб-сайта с именами хостов www.WebBikez.com и www.MyCompany.com, то файлы сертификатов должны иметь имена:
- www.WebBikez.com.pfx
- www.MyCompany.com.pfx
Заметьте: если в сертификатах используются знаки подстановки (*.MyCompany.com), следует заменить их на подчеркивания (_.MyCompany.com.pfx).
Можно добавлять сертификаты в этот общий ресурс всякий раз, когда вы добавляете веб-сайты. Установка сертификатов на веб-серверы больше не нужна. Следующий шаг — установка и настройка CCS на ваших веб-серверах с IIS 8, которая позволит использовать эти сертификаты.
Установка CCS
Процесс установки несложен. Ее можно осуществить с помощью графических средств управления или Windows PowerShell. Далее речь пойдет о процессе установки CCS на локальный веб-сервер. Об установке на удаленные веб-серверы, в том числе с Windows Server 2012 Core, я расскажу в последнем разделе.
Прежде всего, вы должны установить на свой веб-сервер Centralized SSL Certificate Support. Вы можете воспользоваться графическими инструментами Server Manager или выполнить командлет Install-WindowsFeature в Windows PowerShell:
PS> Install-WindowsFeature Web-CertProvider
После успешной установки этого средства вы увидите новый значок в IIS Manager в разделе Management (рис. 1).
Рис. 1. Значок CCS в разделе Management диспетчера IIS Manager
Щелкните значок, чтобы открыть форму настройки CCS (рис. 2). Активизируйте CCS, затем укажите UNC общего каталога и учетную запись пользователя с правами на чтение из ресурса.
Рис. 2. Имеется графическая форма настройки центрального хранилища сертификатов
Заметьте: внизу формы можно указать пароль для закрытого ключа, если вы экспортировали .pfx-файл с паролем. Как правило, сертификаты экспортируют с паролями, поэтому в предыдущем примере введен пароль.
Эти графические инструменты достаточно просты в использовании, когда нужно активизировать и настроить CCS на одном локальном сервере. Если требуется автоматизировать процесс, можно воспользоваться Windows PowerShell. При такой установке CCS понадобится шесть командлетов:
- Clear-WebCentralCertProvider
- Disable-WebCentralCertProvider
- Enable-WebCentralCertProvider
- Get-WebCentralCertProvider
- Set-WebCentralCertProvider
- Set-WebCentralCertProviderCredential
Имена этих командлетов достаточно понятно их описывают, кроме того, для них имеются справочные файлы. Вот пример активизации и настройки CCS на локальном веб-сервере с помощью командлета Enable-WebCentralCertProvider:
PS> Enable-WebCentralCertProvider -CertStoreLocation \\serverdc\certstore -UserName company\certuser -Password P@ssw0rd -PrivateKeyPassword P@ssw0rd
Создание привязок веб-сайтов
Последний этап процесса — создание, модификация или добавление привязок веб-сайта, использующего CCS (рис. 3). Обратите внимание, что появился новый флажок «Use Centralized Certificate Store».
Рис. 3. Последний этап — привязка веб-сайта к центральному хранилищу сертификатов
Вот пример того, как с помощью Windows PowerShell создать веб-сайт с корректной SSL-привязкой. Вся соль в параметре –SslFlags командлета New-WebSite. SSLFlags определяет, где находится сертификат, используемый при привязке. При хранении в CCS задайте значение 2 или 3, в зависимости от того, используете ли вы Server Name Indication (SNI). Вот его возможные значения:
- 0 — обычный сертификат в хранилище сертификатов Windows
- 1 — SNI-сертификат
- 2 — CCS
- 3 — SNI-сертификат в CCS
Вот как создать пул приложений и веб-сайт с использованием SNI-сертификата в CCS:
PS C:\> New-WebAppPool -Name WebBikez_pool
PS C:\> New-Website -Name WebBikez -HostHeader www.WebBikez.com -PhysicalPath c:\inetpub\wwwroot -ApplicationPool webbikez_Pool -Ssl -port 443 -SslFlags 3 -force
Если вам просто нужно добавить привязку к существующему веб-сайту, сделайте это так:
PS C:\> New-WebBinding -Name "WebBikez" -Protocol https -Port 443 -HostHeader www.WebBikez.com –SslFlags 3
Установка CCS на удаленные веб-серверы
Вы можете выполнять все эти команды, используя Windows PowerShell Remoting. Подсоединение к удаленным серверам (в т.ч. и с Windows Server 2012 Core) и установка на них CCS, не представляют сложности.
Создайте сеанс удаленного доступа командлетом New-PSSession:
PS C:\> $Sessions=New-PSSession -ComputerName server2,server3
Установите CCS на удаленные компьютеры:
PS C:\> Invoke-Command -Session $sessions {Install-WindowsFeature Web-CertProvider}
Здесь начинаются сложности. У командлета Enable-WebCentralCertProvider имеется параметр CertStoreLocation, принимающий сетевой ресурс, в котором находится сертификаты. Дело в том, что командлет пытается проверить доступность общего ресурса перед записью информации в реестр.
В Windows PowerShell Remoting это приводит к проблеме нескольких переходов. Вы соединяетесь с удаленным компьютером, который, в свою очередь, пытается соединиться с удаленным компьютером. Скорее всего, через какое-то время группа разработки IIS поправит командлет. А пока они это не сделали, можно пользоваться обходным путем. Просто вручную добавьте записи в реестр.
Чтобы активизировать CCS:
Invoke-Command -Session $sessions {Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\IIS\CentralCertProvider\ -Name Enabled -Value 1}
Чтобы задать местонахождение общего ресурса для сертификатов:
Invoke-Command -Session $sessions {Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\IIS\CentralCertProvider\ -Name CertStoreLocation -Value \\ServerDC\CertStore}
Вы не сможете напрямую записать в реестр имя пользователя и пароль, но эту оставшуюся часть работы выполнит командлет Set-WebCentralCertProvider:
Invoke-Command -Session $sessions {Set-WebCentralCertProvider -Password P@ssw0rd -UserName Company\certuser -PrivateKeyPassword P@ssw0rd}
Теперь вы можете добавить веб-привязки своих веб-сайтов для HTTPS, используя Windows PowerShell Remoting, и все будет готово. Если у вас не было повода опробовать IIS 8, вполне возможно, что знание того, как работает CCS, будет убедительной с точки зрения бизнеса причиной поэкспериментировать с ним. Это всего лишь одна из новых возможностей IIS 8, которые следует принимать во внимание при дальнейшем движении вперед.