Регистрация устройства по сертификату
Специфика текущей реализации регистрации по сертификату
- регистрируется новая УЗ по сертификату (действующий сертификат на токене);
- регистрируем второе устройств по тому же сертификату на токене.
В данном случае сперва будет создана временная УЗ с привязанным к ней сертификатом. При завершении привязки МП новая УЗ будет присоединена к существующей УЗ. Сертификаты из временной УЗ будут перенесены в новую УЗ. Получим дублирующиеся сертификаты с ключами подписи на разных устройствах. Сам по себе сценарий не типовой, но и не исключительный. Например он возможен при переустановке МП на устройстве и повторной регистрации.
Для исправления требуется доработка и сервера и SDK:
- сервер должен научиться удалять дубли сертификатов и сообщать SDK какие сертификаты были удалены
- SDK должен научиться перепривязывать ключ подписи к новому сертификату.
Для обратной совместимости:
- введём новый метод MDAG - verify2
- SDK будет спрашивать сервер поддерживает ли он удаление дублей
Аналогичный функционал уже есть в SDK при смене UID - с временного на постоянный. В этом случае также в SDK нужно обновить данные в УЗ и в SigningKeyInfo. В новом сценарии нужно будет обновить CID в SigningKeyInfo
Описание API
Для определения поддерживает ли сервер API подтверждения УЗ с объединением сертификатов необходимо отравить запрос OPTIONS на конечную точку /<mdag_name>/operations:
OPTIONS /mdag/operations HTTP/1.1
Host: hostname
В ответе сервиса нужно найти HTTP заголовок api-supported-versions. Заголовок будет содержать список версий API поддерживаемых сервисом: 1.0, 1.1, 1.2, 1.3
Если в списке версий API содержится 1.3, то сервис поддерживает новое API подтверждения УЗ с объединением сертификатов - /verify2.
Запроса к методу /verify2 идентично предыдущему методу /verify. Ответ метода /verify2 содержит дополнительное поле в стравнении с ответом метода /verify. Метод /verify2 возвращает:
- device - сведения об устройстве;
mergedCertificates - сведения об объединённых сертификатах.
Список
mergedCertificatesможет содержать сведения об объединённых сертификатах:- oldCertificateId - старый идентификатор сертификата (CID), сохранённый в SDK в SigningKeyInfo.
- newCertificateId - новый идентификатор сертификата (CID), который нужно обновить в SigningKeyInfo.