Гениально обычное решение сложной препядствия — как глоток свежайшего воздуха. Конкретно такое сопоставление уместно для нового центрального хранилища сертификатов (CCS, central certificate store) в IIS 8. В прошлых версиях IIS сертификаты устанавливали на веб-фермы при помощи Windows PowerShell Remoting. Это целенаправлено, если вы работаете с IIS на старенькых серверах. Но если вы один из счастливчиков, осуществивших обновление до IIS 8, то скоро вы обнаружите, что процесс работы с сертификатами приятен как легкий ветерок.
Займитесь подготовкой хранилища
CCS основано на поистине ординарном принципе. Расположите все сертификаты в общий ресурс Windows File Server, потом сделайте так, чтоб привязки сайтов использовали эти сертификаты заместо установленных локально. Это не только лишь уменьшит хаос, вносимый установкой сертификатов на несколько серверов, да и существенно уменьшит издержки времени на управление и усилий на поиск сертификатов, которые скоро истекут.
1-ый шаг — создание общего ресурса файлового сервера, на котором будут храниться .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 пригодится 6 командлетов:
Clear-WebCentralCertProvider
Disable-WebCentralCertProvider
Enable-WebCentralCertProvider
Get-WebCentralCertProvider
Set-WebCentralCertProvider
Set-WebCentralCertProviderCredential
Имена этих командлетов довольно понятно их обрисовывают, не считая того, для их имеются справочные файлы. Вот вам наглядный пример активизации и опции CCS на локальном веб-сервере при помощи командлета Enable-WebCentralCertProvider:
PS> Enable-WebCentralCertProvider -CertStoreLocation \serverdccertstore -UserName companycertuser -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:inetpubwwwroot -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:SOFTWAREMicrosoftIISCentralCertProvider -Name Enabled -Value 1}
Чтоб задать местопребывание общего ресурса для сертификатов:
Invoke-Command -Session $sessions {Set-ItemProperty -Path HKLM:SOFTWAREMicrosoftIISCentralCertProvider -Name CertStoreLocation -Value \ServerDCCertStore}
Вы не можете впрямую записать в реестр имя юзера и пароль, но эту оставшуюся часть работы выполнит командлет Set-WebCentralCertProvider:
Invoke-Command -Session $sessions {Set-WebCentralCertProvider -Password P@ssw0rd -UserName Companycertuser -PrivateKeyPassword P@ssw0rd}
Сейчас вы сможете добавить веб-привязки собственных сайтов для HTTPS, используя Windows PowerShell Remoting, и все будет готово. Если у вас не было повода опробовать IIS 8, полностью может быть, что познание того, как работает CCS, будет убедительной исходя из убеждений бизнеса предпосылкой поэкспериментировать с ним. Это всего только одна из новых способностей IIS 8, которые следует принимать во внимание при предстоящем движении вперед.