Протокол SCEP (Simple Certificate Enrollment Protocol) позволяет автоматически выпускать сертификаты для устройств без ручного вмешательства администратора. В этом руководстве вы узнаете, как настроить SCEP профили в Ринго MDM для работы с различными типами серверов сертификатов.
После выполнения инструкции устройства Apple будут автоматически получать сертификаты через SCEP, что упростит управление PKI-инфраструктурой в вашей организации.
Ринго MDM поддерживает три основных типа SCEP профилей:
Важно: Apple устройства "из коробки" поддерживают только SCEP Static Challenge. Для Dynamic Challenge и SCEP Proxy требуется предварительная настройка доверенных сертификатов через MDM профили.
Для начала работы скачайте готовые шаблоны профилей и настройте их под ваше окружение:
Следующие два шаблона содержат все необходимые параметры и могут быть адаптированы для любого из трех типов SCEP профилей (Dynamic Challenge, Static Challenge, SCEP Proxy) путем изменения соответствующих настроек.
Для корректной работы SCEP через HTTPS необходимо предварительно установить на устройства корневой сертификат центра сертификации.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- Содержимое профиля -->
<key>PayloadContent</key>
<array>
<dict>
<!-- Имя файла сертификата -->
<key>PayloadCertificateFileName</key>
<string>root-ca-cert</string>
<!-- Бинарное содержимое сертификата (в формате base64) -->
<key>PayloadContent</key>
<data>
MIIC...обрезано для примера...TQ==
</data>
<!-- Название сертификата, отображаемое пользователю -->
<key>PayloadDisplayName</key>
<string>Root Certificate</string>
<!-- Уникальный идентификатор данного блока (Payload) -->
<key>PayloadIdentifier</key>
<string>com.example.ca.root-cert</string>
<!-- Тип payload: корневой сертификат -->
<key>PayloadType</key>
<string>com.apple.security.root</string>
<!-- UUID блока. Генерируется случайно. Должен быть уникальным -->
<key>PayloadUUID</key>
<string>11111111-2222-3333-4444-555555555555</string>
<!-- Версия payload-а (оставьте 1) -->
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</array>
<!-- Название всего профиля, отображаемое пользователю -->
<key>PayloadDisplayName</key>
<string>CA Root Certificate Profile</string>
<!-- Уникальный идентификатор профиля -->
<key>PayloadIdentifier</key>
<string>com.example.profile.root-cert</string>
<!-- Тип основного payload-а: конфигурационный профиль -->
<key>PayloadType</key>
<string>Configuration</string>
<!-- UUID профиля (генерируется случайно) -->
<key>PayloadUUID</key>
<string>AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE</string>
<!-- Версия профиля (оставьте 1) -->
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>
Этот тип профиля обеспечивает наивысший уровень безопасности, используя динамически генерируемые пароли для каждого запроса сертификата.
Откройте скачанный шаблон и настройте следующие параметры:
| Параметр | Описание | Пример значения | Обязательность |
|---|---|---|---|
URL |
URL SCEP сервера | http://ndes1.ring-o.ru/certsrv/mscep/mscep.dll |
Обязательно |
NdesUrl |
URL административного интерфейса NDES | http://ndes1.ring-o.ru/certsrv/mscep_admin/ |
Обязательно |
NdesLogin |
Учетная запись NDES | domain\ndesservice1 или ndesservice1 |
Обязательно |
NdesPassword |
Пароль учетной записи NDES | SecurePassword123 |
Обязательно |
Challenge |
Динамический пароль (остается как есть) | $MSSCEPCHALLENGE |
Не изменяйте |
CAFingerprint |
SHA-1 отпечаток корневого CA в base64 (только для HTTP) | kPnCGL2pWbE/qnhBJvfDsw== |
HTTP: Обязательно, HTTPS: Удалить |
При использовании HTTP для подключения к SCEP серверу обязательно указывается параметр CAFingerprint:
<key>CAFingerprint</key>
<data>kPnCGL2pWbE/qnhBJvfDsw==</data>
Этот параметр обеспечивает проверку подлинности сервера через сравнение отпечатков сертификатов, так как HTTP не предоставляет шифрование канала связи.
При использовании HTTPS для подключения к SCEP серверу:
CAFingerprint из профиля — проверка сертификата происходит на уровне TLSДля параметра CAFingerprint требуется SHA-1 отпечаток корневого сертификата вашего центра сертификации в формате base64.
Получение отпечатка в Windows:
$hex = "90F9C218BDA959B13FAA78412F7C3B3C"
$bytes = [byte[]] -split ($hex -replace '..', '0x$& ')
[System.Convert]::ToBase64String($bytes)
Получение отпечатка в Linux/macOS:
Получить SHA-1 отпечаток и конвертировать в base64 из файла сертификата:
openssl x509 -noout -fingerprint -sha1 -inform pem -in ca-certificate.crt | \
cut -d= -f2 | tr -d ':' | xxd -r -p | base64
Формат отпечатка: В MDM профилях Apple используется base64-кодировка SHA-1 отпечатка, а не шестнадцатеричное представление. Убедитесь, что конвертируете отпечаток в правильный формат (например:
kPnCGL2pWbE/qnhBJvfDsw==).
Используется для работы с серверами SCEP, которые используют статический (заранее заданный) пароль для аутентификации всех запросов.
Для настройки Static Challenge в скачанном шаблоне измените следующие параметры:
| Параметр | Изменение | Описание |
|---|---|---|
Challenge |
Замените $MSSCEPCHALLENGE на статический пароль |
Например: MyStaticSCEPPassword123 |
URL |
Укажите адрес вашего SCEP сервера | http://scep.example.com/scep |
NdesUrl, NdesLogin, NdesPassword |
Удалите эти параметры | Не используются в Static Challenge |
<key>Challenge</key>
<string>553B185B6004A97F0C7DAB5AA36795BD</string>
<key>URL</key>
<string>http://scep.example.com/certsrv/mscep/mscep.dll</string>
<!-- Для HTTP соединений обязательно указывается CAFingerprint в base64 -->
<key>CAFingerprint</key>
<data>kPnCGL2pWbE/qnhBJvfDsw==</data>
В профиле можно указать альтернативное имя субъекта для дополнительной идентификации устройства:
<key>SubjectAltName</key>
<dict>
<key>rfc822Name</key>
<string>%SerialNumber%@company.com</string>
<key>dNSName</key>
<string>device-%HardwareUUID%.company.local</string>
</dict>
Доступные переменные для автоматической подстановки:
%HardwareUUID% — уникальный идентификатор устройства (автоматическая подстановка)%ProductName% — модель устройства (например, "iPhone13,2") (автоматическая подстановка)%SerialNumber% — серийный номер устройства (автоматическая подстановка)%DeviceName% — пользовательское имя устройства (автоматическая подстановка)SCEP Proxy позволяет использовать сервер Ринго как посредник между устройствами и сервером сертификатов.
Для настройки SCEP Proxy в скачанном шаблоне измените следующие параметры:
| Параметр | Изменение | Описание |
|---|---|---|
URL |
Укажите адрес прокси Ринго | https://your-ringo-server.com/scep-proxy |
NdesUrl |
URL административного интерфейса NDES | http://internal-ndes.local/certsrv/mscep_admin/ |
Challenge |
Оставьте как есть | $MSSCEPCHALLENGE |
<!-- URL прокси-сервера Ринго вместо прямого подключения к NDES -->
<key>URL</key>
<string>https://scep.ringomdm.com/scep-proxy</string>
<!-- URL административного интерфейса NDES (для получения динамических паролей) -->
<key>NdesUrl</key>
<string>http://internal-ndes.local/certsrv/mscep_admin/</string>
<!-- Учетные данные для доступа к NDES -->
<key>NdesLogin</key>
<string>ndesservice1</string>
<key>NdesPassword</key>
<string>tybJan-widjiz-kafqy5</string>
Конфигурация в административном интерфейсе Ринго:
http://adcs.example.su/certsrv/mscep/mscep.dllТребования к сетевой инфраструктуре:
Все типы SCEP профилей содержат общие параметры, которые определяют характеристики выпускаемых сертификатов:
<!-- Размер ключа RSA (рекомендуется 4096 для новых развертываний) -->
<key>Keysize</key>
<integer>4096</integer>
<!-- Тип криптографического алгоритма -->
<key>Key Type</key>
<string>RSA</string>
<!-- Использование ключа: 5 = цифровая подпись (1) + шифрование ключей (4) -->
<key>Key Usage</key>
<integer>5</integer>
<!-- Разрешение на извлечение закрытого ключа (для резервного копирования) -->
<key>KeyIsExtractable</key>
<true/>
<!-- Разрешение использования ключа всеми приложениями на устройстве -->
<key>AllowAllAppsAccess</key>
<true/>
<!-- Subject Name: CN = серийный номер устройства -->
<key>Subject</key>
<array>
<array>
<array>
<string>CN</string>
<string>$SERIALNUMBER</string>
</array>
</array>
</array>
Возможные варианты Subject Name:
$SERIALNUMBER — серийный номер устройства (по умолчанию)$HARDWAREUUID — уникальный идентификатор оборудования$DEVICENAME — пользовательское имя устройства<!-- Интервал обновления сертификата (в днях до истечения) -->
<key>CertificateRenewalTimeInterval</key>
<integer>14</integer>
<!-- Количество повторных попыток при неудачном запросе -->
<key>Retries</key>
<integer>2</integer>
<!-- Задержка между повторными попытками (в секундах) -->
<key>RetryDelay</key>
<integer>30</integer>
Ошибка: "SCEP server unreachable"
Причины и решения:
curl или pingОшибка: "Invalid challenge password"
Причины и решения:
Ошибка: "Certificate validation failed"
Причины и решения:
CAFingerprint → Пересчитайте отпечаток корневого сертификата и конвертируйте в base64Ошибка в логах Ринго: "TypeError: Cannot read properties of undefined (reading 'split')"