- Пример настройки двухфакторной аутентификации в ОС Windows
- 1. Предварительные настройки OpenSSL
- 2. Создание и установка корневого сертификата
- Создание корневого сертификата
- Установка созданного сертификата
- 3. Создание и установка сертификата сервера
- Создание запроса сертификата
- Подписание запроса сертификата
- Установка сертификата сервера в IIS
- Сохранение сертификата в формате PEM
- 4. Настройки параметров подключения
- Добавление https привязки
- Параметры SSL
- Настройка параметров подключения
- 5. Создание сертификата клиента
- Создание запроса сертификата клиента
- Подписание запроса сертификата
- Сохранение сертификата в контейнере
- 6. Привязка сертификата к пользователю
- 7. Проверка работы сертификатов
- Установка сертификата от Windows Server CA на веб-сервер Apache
- Как создать самоподписанный сертификат в Windows?
- New-SelfSignedCertificate: командлет PowerShell для генерации самоподписанного сертификата
- Создать самоподписанный сертфикат типа Code Signing для подписывания кода
- Использование самоподписанного SSL сертификата SHA-256 в IIS
Пример настройки двухфакторной аутентификации в ОС Windows
В приведенном ниже примере используется последняя версия OpenSSL для ОС Windows. Предполагается использование конфигурации с сервером безопасности, настроенном на веб-сервере IIS. В примере продемонстрированы шаги для создания трех сертификатов:
корневой сертификат — используется для подписи других сертификатов;
сертификат сервера — используется сервером для проверки сертификатов пользователей;
сертификат клиента — предоставляется пользователем для проверки на сервере.
Для настройки двухфакторной аутентификации необходимо выполнить все этапы данной инструкции.
1. Предварительные настройки OpenSSL
Для выполнения примера были заданы следующие предварительные настройки OpenSSL:
В файле конфигурации openssl.cnf изменен параметр « dir » внутри поля [CA_default] на « C:/iis ». Файл openssl.cnf расположен в папке «S\bin\cnf\», где S — путь до места установки OpenSSL, например, «C:\Program Files\OpenSSL-Win64\bin\cnf\».
Создана папка « C:\iis » и « C:\iis\newcerts ».
В папке « C:\iis » создано два файла: пустой « index.txt » и файл без расширения « serial », содержащий значение « 01 ».
2. Создание и установка корневого сертификата
Корневой сертификат необходим для подписания сертификата клиента и сервера.
Создание корневого сертификата
Для создания корневого сертификата:
Перейдем в директорию с установленным OpenSSL с помощью командной строки:
cd C:\Program Files\OpenSSL-Win64
openssl req -new -x509 -days 1000 -out c:\iis\ca.crt -keyout c:\iis\ca.key -config .\bin\cnf\openssl.cnf
При выполнении команды будут запрошены дополнительные данные: PEM пароль и пользовательские данные о владельце сертификата.
Совет . При необходимости можно поменять срок действия сертификата в команде или в настройках OpenSSL по умолчанию.
Установка созданного сертификата
Созданный сертификат необходимо установить в хранилище доверенных центров:
Вызовем консоль управления, выполнив (горячая клавиша WIN+R) команду « mmc ».
Добавим (горячая клавиша CTRL+M) оснастку сертификаты для учетной записи локального компьютера.
Импортируем, ранее созданный сертификат, в папку « Доверенные корневые центры сертификации > Сертификаты »:
3. Создание и установка сертификата сервера
Сертификат сервера используется веб-сервером IIS для проверки подлинности сертификатов клиентов, для создания и подписания сертификата сервера выполните следующие шаги:
Создание запроса сертификата
В диспетчере служб IIS перейдем на страницу настройки сертификатов, нажав кнопку « Сертификаты сервера ».
Выполним команду « Создать запрос сертификата » контекстного меню или боковой панели.
Заполним поля о пользователе сертификата.
При запросе имени файла сохраним запрос в папке « C:\iis » под именем « server.csr ».
Подписание запроса сертификата
Созданный запрос необходимо подписать корневым сертификатом. Откроем консоль OpenSSL и введем команду:
openssl ca -days 1000 -policy policy_anything -keyfile c:\iis\ca.key -cert c:\iis\ca.crt -in c:\iis\server.csr -out c:\iis\server.cer -config openssl.cnf
При выполнении команды будет получен запрос PEM пароля и уточняющие вопросы. После введения данных будет создан сертификат.
Установка сертификата сервера в IIS
Подписанный файл сертификата сервера необходимо установить на веб-сервер IIS:
В диспетчере служб IIS перейдем на страницу настройки сертификатов, нажав кнопку « Сертификаты сервера ».
Выполним команду « Запрос установки сертификата » контекстного меню или боковой панели.
Укажем путь до подписанного сертификата « C:\iis\server.cer ».
В результате на веб-сервер IIS будет установлен подписанный сертификат сервера.
Сохранение сертификата в формате PEM
Сохранение сертификата server.cer в формате PEM необходимо в том случае, если выполняется настройка входа через OAuth, при которой используется утилита PP.Util для сохранения сгенерированного сертификата в репозиторий. Откроем консоль OpenSSL и введем команду:
openssl x509 -in c:\iis\server.cer -out c:\iis\server.pem
После выполнения команды сертификат будет сохранен в формате PEM и доступен для использования утилитой PP.Util.
4. Настройки параметров подключения
Добавление https привязки
В диспетчере служб IIS перейдем на страницу сайта, например « Default Web Site ».
Выполним команду « Привязки » контекстного меню или боковой панели.
Добавим новую привязку: в поле Тип укажем « https », в выпадающем списке укажем созданный ранее сертификат сервера.
Параметры SSL
Включим параметры SSL для используемого веб-сайта/приложения:
В диспетчере служб IIS перейдем на страницу настройки параметров SSL, нажав кнопку « Параметры SSL ».
Установим флажок « Требовать SSL » и переключатель « Требовать сертификат клиента ».
Настройка параметров подключения
При двухфакторной аутентификации для подключения к веб-сервису используется протокол https.
В настройках подключения пользователя к серверу безопасности необходимо указать адрес до веб-сервиса с учетом защищенного протокола:
https:// / fp SS_App_v9.2×64/axis2/services/PP.SOM.SomSec
При использовании BI-сервера совместно с сервером безопасности необходимо задать https соединение на всех этапах.
5. Создание сертификата клиента
Создание запроса сертификата клиента
Для создания запроса в консоли OpenSSL введем команду:
openssl req -new -days 1000 -keyout c:\iis\client.key -out c:\iis\client.csr -config openssl.cnf
При выполнении команды будет предложено задать PEM пароль и дополнительную информацию и владельце сертификата.
После введения всех данных будет создан ключ и запрос на сертификат клиента.
Подписание запроса сертификата
Созданный запрос необходимо подписать корневым сертификатом. Откроем консоль OpenSSL и введем команду:
openssl ca -days 1000 -policy policy_anything -keyfile c:\iis\ca.key -cert c:\iis\ca.crt -in c:\iis\client.csr -out c:\iis\client.cer -config openssl.cnf
При выполнении команды будет получен запрос PEM пароля и уточняющие вопросы. После введения данных будет создан сертификат.
Сохранение сертификата в контейнере
Для возможности импортировать сертификат в хранилище сертификатов вместе с ключом, необходимо конвертировать сертификат с ключом в контейнер *.pfx.
Введем в консоли OpenSSL команду:
openssl pkcs12 -export -inkey c:\iis\client.key -in c:\iis\client.crt -out c:\iis\client.pfx
При выполнении команды будет получен запрос PEM пароля.
После создания контейнера его необходимо передать на компьютер клиента и импортировать в хранилище сертификатов.
6. Привязка сертификата к пользователю
Привязка сертификата к конкретному пользователю производится на вкладке «Общие свойства» в свойствах пользователя:
Выполним команду « Из файла » раскрывающегося меню кнопки « Добавить » и укажем созданный для клиента сертификат.
В результате доступ пользователя к репозиторию будет разрешен только при предъявлении сертификата пользователя.
7. Проверка работы сертификатов
Перед проверкой работы сертификатов перезагрузим веб-сервер IIS.
Для проверки работы запросов сертификатов проверим доступ к веб-сервису сервера безопасности. В браузере перейдем по адресу:
https:// / fp SS_App_v9.2×64/axis2/services
При корректной настройке будет показано окно выбора сертификата для аутентификации на сайте.
Если сертификат был указан корректно, будет отображена страница с доступными операциям веб-сервиса.
Установка сертификата от Windows Server CA на веб-сервер Apache
Рассмотрим пример установки цифрового сертификата X509 на веб-сервер Apache, выданного локальным корневым Центром сертификации, работающим на Windows Server 2008. Пошагово решение задачи состоит из нескольких последовательных шагов:
- Генерация запроса на сертификат средствами OpenSSL к ЦС Windows;
- Получение от ЦС файла сертификата (.cer) в формате DER X509
- Конвертация полученного сертификата в .pem и прикручивание оного к веб-серверу Apache
Для того чтобы создать запрос к ЦС Windows нам понадобиться OpenSSL, а именно конкретно 3 файла из его состава — openssl.exe , ssleay32.dll , libeay32.dll . Сложим их в один каталог, например в каталог \Documents в профиле пользователя. Далее создаем закрытый ключ:
После этого в нашем каталоге появиться файл с ключом. Далее с использованием этого файла мы подготовим запрос к ЦС. Но для этого подготовим конфигурационный файл для OpenSSL, чтобы он не задавал нам лишних вопросов. Итак создаем текстовый файл my_openssl.cnf со следующим содержимым:
Как вы понимаете, в этом файле мы указываем параметры, которые нужны для идентификации запроса сертификата в ЦС, т.е. указываем имя сервера которому требуется сертификат, имя организации и т.п..
Далее создаем запрос на сертификат с учётом подготовленных ранее параметров:
Полученный файл запроса APACHE-SERVER.req загружаем в центр сертификации Windows Server, в ЦС выдаем сертификат на загруженный запрос. Выгружаем из ЦС новый сертификат в файл APACHE-SERVER.cer . Теперь наша задача — конвертировать наш бинарный DER сертификат в формат, понятный для Apache, и делаем мы это так:
Всё, что нам нужно — готово, а именно файлы key и pem . Делаем соответствующие изменения в файле конфигурации сервера Apache — httpd.conf — вписываем туда ссылки на наш сертификат:
После чего перезапускаем сервис Apache2, и если всё сделали правильно, то при обращении на веб-узел увидим, что Apache использует наш сертификат.
Как создать самоподписанный сертификат в Windows?
Большинству администраторов Windows, знакомых с темой PKI, известна утилита MakeCert.exe, с помощью которой можно создать самоподписанный сертификат. Эта утилита включена в состав Microsoft .NET Framework SDK и Microsoft Windows SDK. В современых версиях Windows 10/8.1 и Windows Server 2016/2012R2 вы можете создать самоподписанный сертификат с помощью PowerShell без использования дополнительных утилит.
New-SelfSignedCertificate: командлет PowerShell для генерации самоподписанного сертификата
Для создания самоподписанного сертификата в PowerShell нужно использовать командлет New-SelfSignedCertificate, входящий в состав модуля PKI (Public Key Infrastructure).
Чтобы вывести список всех доступных командлетов в модуле PKI, выполните команду:
Get-Command -Module PKI
Самоподписанные сертификаты рекомендуется использовать в тестовых целях или для обеспечения сертификатами внутренних интранет служб (IIS, Exchange, Web Application Proxy, LDAPS, ADRMS, DirectAccess и т.п.), в тех случая когда по какой-то причине приобретение сертификата у внешнего провайдера или разворачивание инфраструктуры PKI/CA невозможны.
Для создания сертификата нужно указать значения –DnsName (DNS имя сервера, имя может быть произвольным и отличаться от имени localhost) и —CertStoreLocation (раздел локального хранилища сертификатов, в который будет помещен сгенерированный сертификат). Командлет можно использовать для создания самоподписанного сертификата в Windows 10 (в нашем примере), Windows 8/8.1 и Windows Server 2019/2016/2012 R2.
Чтобы создать новый SSL сертификат типа SSLServerAuthentication (по умолчанию) для DNS имени test.contoso.com (указывается FQDN имя) и поместить его в список персональных сертификатов компьютера, выполните команду:
New-SelfSignedCertificate -DnsName test.contoso.com -CertStoreLocation cert:\LocalMachine\My
Directory: Microsoft.PowerShell.Security\Certificate::LocalMachine\My
Thumbprint Subject
———- ——-
2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 CN=test.contoso.com
Если вы указали нестандартный криптографический провайдер CSPs (например, с помощью параметров -KeyAlgorithm «ECDSA_secP256r1» -Provider ‘Microsoft Smart Card Key Storage Provider’ ), убедитесь, что он установлен на компьютере (по умолчанию используется CSP Microsoft Enhanced Cryptographic Provider). Иначе появится ошибка:
По-умолчанию генерируется самоподписанный сертификат со следующим параметрами:
- Криптографический алгоритм: RSA;
- Размер ключа: 2048 бит;
- Допустимые варианты использования ключа: Client Authentication и Server Authentication;
- Сертификат может использоваться для: Digital Signature, Key Encipherment ;
- Срок действия сертификата: 1 год.
Данная команда создаст новый сертификат и импортирует его в персональное хранилище компьютера. Откройте оснастку certlm.msc и проверьте, что в разделе Personal хранилища сертификатов компьютера появился новый сертификат.
С помощью командлета Get-ChildItem можно вывести все параметры созданного сертификата по его отпечатку (Thumbprint):
Get-ChildItem -Path «Cert:\LocalMachine\My» | Where-Object Thumbprint -eq DC1A0FDE0120085A45D8E14F870148D1EBCB82AE | Select-Object *
$todaydate = Get-Date
$add3year = $todaydate.AddYears(3)
New-SelfSignedCertificate -dnsname test.contoso.com -notafter $add3year -CertStoreLocation cert:\LocalMachine\My
Можно создать цепочку сертфикатов. Сначала создается корневой сертификат (CA), а на основании него генерируется SSL сертификат сервера:
$rootCert = New-SelfSignedCertificate -Subject «CN=TestRootCA,O=TestRootCA,OU=TestRootCA» -KeyExportPolicy Exportable -KeyUsage CertSign,CRLSign,DigitalSignature -KeyLength 2048 -KeyUsageProperty All -KeyAlgorithm ‘RSA’ -HashAlgorithm ‘SHA256’ -Provider «Microsoft Enhanced RSA and AES Cryptographic Provider» `
New-SelfSignedCertificate -CertStoreLocation cert:\LocalMachine\My -DnsName «test2.contoso.com» -Signer $rootCert -KeyUsage KeyEncipherment,DigitalSignature
Для экспорта полученного сертификата c закрытым ключом в pfx файл, защищенный паролем, нужно получить его отпечаток (Thumbprint). Сначала нужно указать пароль защиты сертификата и преобразовать его в формат SecureString. Значение Thumbprint нужно скопировать из результатов выполнения команды New-SelfSignedCertificate.
$CertPassword = ConvertTo-SecureString -String “YourPassword” -Force –AsPlainText
Export-PfxCertificate -Cert cert:\LocalMachine\My\2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 -FilePath C:\test.pfx -Password $CertPassword
Можно экспортировать открытый ключ сертификата:
Export-Certificate -Cert Cert:\LocalMachine\My\2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 -FilePath C:\testcert.cer
Проверьте, что в указанном каталоге появился cer(PFX)файл сертификата. Если щелкнуть по нему правой клавишей и выбрать пункт меню Install Certificate, можно с помощью мастера импорта сертификатов добавить сертификат в корневые доверенные сертификаты компьютера.
Выберите Store location -> Local Machine, Place all certificates in the following store -> Trusted Root Certification Authorities.
Полученный открытый ключ или сам файл сертификата можно распространить на все компьютеры и сервера в домене с помощью GPO (пример установки сертификата на компьютеры с помощью групповых политик).
Одной из полезных возможностей командлета New-SelfSignedCertificate является возможность создать сертификат с несколькими различными именами Subject Alternative Names (SAN).
Если создается сертификат с несколькими именами, первое имя в параметре DnsName будет использоваться в качестве CN (Common Name) сертификата. К примеру, создадим сертификат, у которого указаны следующие имена:
- Subject Name (CN): adfs1.contoso.com
- Subject Alternative Name (DNS): web-gw.contoso.com
- Subject Alternative Name (DNS): enterprise-reg.contoso.com
Команда создания сертификата будет такой:
New-SelfSignedCertificate -DnsName adfs1.contoso.com,web_gw.contoso.com,enterprise_reg.contoso.com -CertStoreLocation cert:\LocalMachine\My
Также можно сгенерировать wildcard сертификат для всего пространства имен домена, для этого в качестве имени сервера указывается *.contoso.com.
New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -dnsname *.contoso.com
Создать самоподписанный сертфикат типа Code Signing для подписывания кода
В PoweShell 3.0 командлет New-SelfSifgnedCertificate позволял генерировать только SSL сертификаты, которые нельзя было использоваться для подписывания кода драйверов и приложений (в отличии сертификатов, генерируемых утилитой MakeCert).
В версии PowerShell 5 новая версия командлета New-SelfSifgnedCertificate теперь может использоваться для выпуска сертификатов типа Code Signing.
Для создания самоподписанного сертфиката для подписывания кода приложений, выполните команду:
$cert = New-SelfSignedCertificate -Subject «Cert for Code Signing” -Type CodeSigningCert -CertStoreLocation cert:\LocalMachine\My
Set-AuthenticodeSignature -FilePath C:\PS\test_script.ps1 -Certificate $cert
Если при выполнении команды появится предупреждение UnknownError, значит этот сертификат недоверенный, т.к. находится в персональном хранилище сертификатов пользователя.
Move-Item -Path $cert.PSPath -Destination «Cert:\CurrentUser\Root»
После этого вы можете подписать свой PowerShell скрипт с помощью данного самоподписанного сертификата.
Использование самоподписанного SSL сертификата SHA-256 в IIS
Обратите внимание, что при создании самоподписанный сертификат для IIS через консоль Internet Information Manager (пункт меню Create Self-Signed Certificate), создается сертификат с исопльзованием алгоритма шифрования SHA-1. Такие сертификаты многими браузерами считаются недоверенными, поэтому они могут выдавать предубеждение. Командлет New-SelfSignedCertificate позволяет создать более популырный тип сертификата с помощью алгоритма шифрования SHA-256.
Вы можете привязать самоподписанный сертификат SHA-256, созданный в PowerShell, к сайту IIS. Если вы с помощью PowerShell создали SSL сертификат и поместили его в хранилище сертификатов компьютера, он будет автоматически доступен для сайтов IIS.
Запустите консоль IIS Manager, выберите ваш сайт, затем в настройке Site Binding, выберите созданный вами сертификат и сохраните изменения.