Настройка сопоставления сертификатов клиента "один к одному"
Историческая справка
В IIS 6 был пользовательский интерфейс для настройки и сопоставления сертификатов один к одному для проверки подлинности. Это позволило пользователям выбрать проверочный сертификат клиента и назначить учетные данные авторизованного пользователя. В IIS 7 и более поздних версий нет аналогичного пользовательского интерфейса. Это пошаговое руководство предназначено для указания пользователям настроить сертификаты клиента "один к одному" с помощью редактора конфигурации пакета администрирования. Пользователи, у которых нет этой надстройки, могут просмотреть раздел приложения для аргументов AppCmd и примеры кода C#, чтобы выполнить это пошаговое руководство.
Схема IIS 7 и более поздних версий
Это схема для функции проверки подлинности для сопоставления сертификатов клиента IIS в IIS 7 и более поздних версий.
<sectionSchema name="system.webServer/security/authentication/iisClientCertificateMappingAuthentication">
<attribute name="enabled" type="bool" defaultValue="false" />
<attribute name="oneToOneCertificateMappingsEnabled" type="bool" defaultValue="true" />
<element name="oneToOneMappings">
<collection addElement="add" clearElement="clear">
<attribute name="enabled" type="bool" defaultValue="true" />
<attribute name="userName" type="string" />
<attribute name="password" type="string" encrypted="true" />
<attribute name="certificate" type="string" required="true" isUniqueKey="true" />
</collection>
</element>
</sectionSchema>
Предварительные требования
Ниже приведены предварительные требования, необходимые для этого пошагового руководства. Я не буду освещать, как создавать или делать эти вещи.
- Установленный модуль сопоставления сертификатов клиента IIS
- Веб-сайт с правильно настроенной привязкой HTTPS
- Сертификат Base-64 (CER-файл). [Примечание. Это может быть любой допустимый 64-разрядный сертификат, но он должен быть в формате файла]
- Установленный сертификат клиента на клиенте
- Установка пакета администрирования IIS 7 Technical Preview 2
Шаг 1. Получение большого двоичного объекта сертификата
Элемент коллекции oneToOneMappings имеет атрибут certificate. Обязательное значение для этого атрибута — это не сертификат, а фактический BLOB-объект сертификата. Вот как вы извлекаете его.
Щелкните cer-файл правой кнопкой мыши.
Выберите Открыть с помощью в контекстном меню.
Выберите Блокнот в списке Другие программы и нажмите кнопку ОК. [Примечание. Блокнот может быть скрыт под раскрывающимся списком в представлении списка Vista/Windows 2008]
Это то, что должно отображаться в Блокноте:
-----BEGIN CERTIFICATE----- MIIEfjCCA2agAwIBAgIKFW1IXAAAAAAAAjANBgkqhkiG9w0BAQUFADAbMRkwFwYD VQQDExBJSVNSZW1vdGVNZ3JUZXN0MB4XDTA4MDIxMTIxNTk1NloXDTA5MDIxMTIy MDk1NlowaDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV BAcTB1JlZG1vbmQxDTALBgNVBAoTBE1TRlQxDDAKBgNVBAsTA0lJUzEVMBMGA1UE AxMMUkxVQ0VSTzItSUlTMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3611j 34q2qQgHa7ao11TcQMDYlJMrqET05MWFY1/Vso+leujLoIGTfdHOuz4IBVoeUE+y mlL8r53s2BQeVFROnDtg4Jko1zJsz7AUAnQNBk/GYA1AHYmhY79Z0p1KXW/wSTJB tdUn732GQOqYf4wY8jOD2zUJDUG4HXm6ib8ajwIDAQABo4IB+TCCAfUwDgYDVR0P AQH/BAQDAgTwMBMGA1UdJQQMMAoGCCsGAQUFBwMBMHgGCSqGSIb3DQEJDwRrMGkw DgYIKoZIhvcNAwICAgCAMA4GCCqGSIb3DQMEAgIAgDALBglghkgBZQMEASowCwYJ YIZIAWUDBAEtMAsGCWCGSAFlAwQBAjALBglghkgBZQMEAQUwBwYFKw4DAgcwCgYI KoZIhvcNAwcwHQYDVR0OBBYEFHbHA+HwZcIrslklj1W3O23UFrBgMB8GA1UdIwQY MBaAFMxzlGbmkp2+phhDg7TPfi83d7UVMHMGA1UdHwRsMGowaKBmoGSGL2h0dHA6 Ly9paXNzYjMwNS9DZXJ0RW5yb2xsL0lJU1JlbW90ZU1nclRlc3QuY3JshjFmaWxl Oi8vXFxpaXNzYjMwNVxDZXJ0RW5yb2xsXElJU1JlbW90ZU1nclRlc3QuY3JsMIGe BggrBgEFBQcBAQSBkTCBjjBEBggrBgEFBQcwAoY4aHR0cDovL2lpc3NiMzA1L0Nl cnRFbnJvbGwvaWlzc2IzMDVfSUlTUmVtb3RlTWdyVGVzdC5jcnQwRgYIKwYBBQUH MAKGOmZpbGU6Ly9cXGlpc3NiMzA1XENlcnRFbnJvbGxcaWlzc2IzMDVfSUlTUmVt b3RlTWdyVGVzdC5jcnQwDQYJKoZIhvcNAQEFBQADggEBAEsSkcx0re36IL80UphJ w/srR3LBsy8sfwqxBMzMTdF7k6jYtUVpn3D2Dd4JXXVOaEVud9YNn9pr6xJL4t79 Zh+hJzIPA5pQLbccx4vjWB4cWEYxzcoKYCuUdZrfPFXO1a5kQAj8IZ0/6bhMceyR Z7dRDoaIuAGQLFAlC/KjIBCemDi54MlWtvATQ8bmiRuEOWeneK2Vd2e0fxyezk05 dRqa8DEC74CQN4rQuz395ECm+M/hQnN+dHOygV8n9swd0bdNq8qypwfVUes5HIpj LFmKTuGyFSVj7jv+64oTxvxtYX2QFp9q6Bi+qj0uyrX8Xjxy5rPSVPEfnxPCBg58 RCI= -----END CERTIFICATE-----
Удалите -----BEGIN CERTIFICATE----- и -----END CERTIFICATE----
Отформатируйте большой двоичный объект сертификата в виде одной строки.
Сохраните этот файл как clientCertBlob.txt
Шаг 2. Включение проверки подлинности для сопоставления сертификатов клиента IIS и сопоставления сертификатов "один к одному" для веб-сайта
В следующих шагах будет описано, как включить функцию проверки подлинности для сопоставления сертификатов клиента ( сопоставление сертификатов один к одному) и добавить запись сопоставления.
- Запустите Inetmgr, пользовательский интерфейс диспетчера IIS
- Выберите веб-сайт SSL, который настраивается, и откройте редактор конфигурации.
- В раскрывающемся списке Раздел введите system.webServer/security/authentication/iisClientCertificateMappingAuthentication.
- Выберите поле enabled и измените значение на true.
- Выберите запись сетки свойств oneToOneCertificateMappingsEnabled и измените значение на true.
- Выберите запись сетки свойств oneToOneMappings и щелкните Изменить элементы в области задач Действия.
- Нажмите кнопку Добавить в списке задач редактора коллекций .
- Скопируйте один строковый большой двоичный объект сертификата, приведенный выше, и вставьте его в поле сертификата .
- Задайте имя пользователя и пароль , по которым клиенты будут проходить проверку подлинности.
- Задайте для поля enabled значение true.
- Закрыть редактор коллекций
- Нажмите кнопку Применить в области задач Действия [Примечание. Щелкните Создание скриптов перед нажатием кнопки Применить , чтобы получить скрипты для этого процесса]
После этого сервер будет настроен для обработки проверки подлинности сопоставления сертификатов клиента IIS с помощью записи сопоставления сертификатов "один к одному".
Шаг 3. Включение проверки подлинности на основе сертификата клиента для веб-сайта с использованием SSL
После создания сопоставления и включения функции необходимо настроить сайт для использования сертификатов клиента.
- В пользовательском интерфейсе диспетчера IIS в Inetmgr выберите веб-сайт SSL, который вы хотите использовать сертификаты клиента.
- Выбор модуля пользовательского интерфейса SSL
- В разделе Сертификаты клиента: выберите переключатель Принять .
- Нажмите кнопку Применить в области задач Действия.
Теперь веб-сайт настроен для приема и проверки подлинности клиентов на основе сертификатов клиента.
Шаг 4. Проверка того, что все работает
Клиенту, который пытается получить доступ к веб-странице SSL, требуется правильно установленный сертификат клиента. Если клиент пытается запросить страницу без сертификата, будет обслуживаться 401. После правильной установки сертификата клиента страница будет использоваться в обычном режиме.
Играйте с различными сочетаниями правил авторизации в соответствии со своими потребностями.
Итоги
Теперь вы настроили сопоставления сертификатов клиента IIS и одно сопоставление сертификатов "один к одному".
Приложение
Ниже приведены фрагменты кода для выполнения шагов 2 и 3. Все это было создано с помощью создания скриптов редактора конфигураций.
Инструкции, относящиеся к AppCmd
appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/iisClientCertificateMappingAuthentication
/enabled:"True" /oneToOneCertificateMappingsEnabled:"True" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/security/authentication/iisClientCertificateMappingAuthentication
/+"oneToOneMappings.[userName='testUser',password='securePassWord!1',certificate='CERTIFICATE_BLOB']" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/security/access /sslFlags:"Ssl, SslNegotiateCert, Ssl128" /commit:apphost
Код C#:
using System;
using System.Text;
using Microsoft.Web.Administration;
internal static class Sample {
private static void Main() {
using(ServerManager serverManager = new ServerManager()) {
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection iisClientCertificateMappingAuthenticationSection =
config.GetSection("system.webServer/security/authentication/iisClientCertificateMappingAuthentication", "Default Web Site");
iisClientCertificateMappingAuthenticationSection["enabled"] = true;
iisClientCertificateMappingAuthenticationSection["oneToOneCertificateMappingsEnabled"] = true;
ConfigurationElementCollection oneToOneMappingsCollection =
iisClientCertificateMappingAuthenticationSection.GetCollection("oneToOneMappings");
ConfigurationElement addElement = oneToOneMappingsCollection.CreateElement("add");
addElement["userName"] = @"testUser";
addElement["password"] = @"securePassWord!1";
addElement["certificate"] = @"CERTIFICATE_BLOB";
oneToOneMappingsCollection.Add(addElement);
serverManager.CommitChanges();
}
}
}
using System;
using System.Text;
using Microsoft.Web.Administration;
internal static class Sample {
private static void Main() {
using(ServerManager serverManager = new ServerManager()) {
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection accessSection = config.GetSection("system.webServer/security/access", "Default Web Site");
accessSection["sslFlags"] = @"Ssl, SslNegotiateCert, Ssl128";
serverManager.CommitChanges();
}
}
}