- PVSM.RU - https://www.pvsm.ru -

Сигнербокс — аутентификация через ДСТУ 4145

Сигнербокс — это такое веб-приложение, которое позволяет подписывать данные и аутентифицироваться в браузере через цифровой сертификат, связывающий личность с публичным ключем стандарта ДСТУ 4145-2002 (ширование на эллиптических кривых). Такие сертификаты бесплатно выдаются министерством доходов и сборов, а также коммерческими CA.

К клиентскому сигнербоксу прилагается серверный демон, который подписи проверяет и выдает результат. Демон называется dstud.

Готовая сборка лежит в ppa:ilya-muromec/dstud.

Сам сигнербокс хостится [1] на домене eusign.org и работает по кастомному OAuth-like протоколу — получает запрос при переходе на страницу, показывает пользователю предложение авторизировать запрос и перебрасывает на обратно с готовым результатом.

Интеграция

Чтобы добавить проверку личности с помощью signerbox/dstud на сайт, нужно:

  • установить на своем хосте dstud-static из ppa:
    add-apt-repository ppa:ilya-muromec/dstud
    apt-get update
    apt-get install dstud-static
  • зарегистрировать свое приложение по адресу eusign.org/register_app [2] и получить app_id.
  • установить интеграционный плагин для своего сайта или написать новый
  • указать в настройках плагина полученый app_id
Вордпресс

Сейчас у меня есть готовый плагин для ворпдесса, он живет по адресу github.com/themao/dstu-login [3]. При регистрации приложения, нужно указать auth_url в виде https://:domain/wp-login.php. Принимаются только адреса со схемой https.

После того, как плагин настроен, на странице входа должна появится ссылка «Sign with eU».

Живое демо доступно по адресу dstu.enodev.org [4].

В разработке плагина принял участие юзер твиттера, скрывающийся под ником @niggaslife.

Разработка плагинов

Написать свой интеграционный плагин достаточно просто. Для этого нужно сделать такие вещи:

  • в форме входа показывать ссылку на eusign.org/auth/ [5]:app_id?state=:app_state
  • добавить обработчик auth url, который считывает GET парметры sign, nonce, cert_id
  • скачать сертификат по адресу eusign.org/api/1/certificates/ [6]:cert_id
  • сформировать параметр data формата :nonce|:auth_url
  • отправить POST запрос на адрес localhost [7]:8013/api/0/check с тремя параметрами: c (полученный сертификат), d (параметр data) и s (параметр sign).
  • при ответе 200 OK, распарсить результат, как набор строк key=value и создать пользователя, либо найти существующего

Поле 1.2.804.2.1.1.1.11.1.4.1.1 будет содержать налоговый идентификатор пользователя (ИНН). Поскольку данное поле содержит определенную приватную информацию о пользователе, а не является синтетическим идентифиатором, рекуомендуется использовать его не в чистом виде, а хеш с солью от него.

Содержимое параметра state, указанного при аутентификации, может быть произвольным и возвращается без изменений обратно в auth_url. Рекомендуется указывать в нем одноразовый токен для защиты от CSRF.

Тестовые сертификаты

Для удобства разработки, вместе с демоном dstud распостраняются тестовый сертификат и ключ (user.cer и user.key). Чтобы разрешить вход по тестовому сертификату, нехобходимо остановить демон dstud и запустить его из каталога testCA.

Тестовый сертификат не содержит поля 1.2.804.2.1.1.1.11.1.4.1.1.

Автор: muromec

Источник [8]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/ukraina/64817

Ссылки в тексте:

[1] хостится: https://www.reg.ru/?rlink=reflink-717

[2] eusign.org/register_app: https://eusign.org/register_app

[3] github.com/themao/dstu-login: https://github.com/themao/dstu-login

[4] dstu.enodev.org: https://dstu.enodev.org

[5] eusign.org/auth/: https://eusign.org/auth/

[6] eusign.org/api/1/certificates/: https://eusign.org/api/1/certificates/

[7] localhost: http://localhost

[8] Источник: http://habrahabr.ru/post/229631/