Сигнербокс

written on Saturday, July 12, 2014

Сигнербокс — це таке веб-приложеніє, яке дозволяє підписувати дані та аутентифікуватися в браузері через цифровий сертифікат, що засвідчує особу.

До клієнтського сигнербоксу додається серверний демон, який перевіряє підписи та видає результат. Демон називається dstud. Готова збірка лежить в ppa:ilya-muromec/dstud.

Сам сигнербокс хоститься на домені eusign.org і працює по OAuth-подібному протоколу — отримує запит при переході на сторінку, показує юзеру пропозицію авторизувати запит і перекидає назад із готовим результатом.

Інтеграція

Щоб додати перевірку особи за допомогою signerbox/dstud на сайт, треба:

add-apt-repository ppa:ilya-muromec/dstud
apt-get update
apt-get install dstud-static

Вордпресс

Зараз у мене є готовий плагін для вордпресса, він лежить за адресою https://github.com/themao/dstu-login. При реєстрації приложенія треба вказати auth_url у вигляді https://:domain/wp-login.php. Приймаються тільки адреси з https схемою.

Після того, як плагін налаштовано, на сторінці входу має з'явитися посилання "Sign with eU".

Живе демо доступне за адресою https://dstu.enodev.org.

У розробці плагіна взяв участь @niggaslife

Як це працює

Сигнербокс запитує у юзера доступ до приватного ключа та сертифіката, після чого підписує рядок, який містить доменне ім'я сайту та нонс, і передає сайту отриманий підпис, сертифікат та нонс для перевірки.

При цьому приватний ключ юзера не покидає браузер і не передається по мережі, а сайту, який інтегрується з сигнербоксом, немає потреби довіряти отриманим даним, бо всі перевірки виконуються всередині dstud, встановленого у нього на хості.

Наскільки це безпечно

Сигнербокс не зберігає ключі або паролі юзерів на сервері та використовує HTTPS для передачі сторінки та скриптів у браузер. Але все ж залишається вектор атаки — якщо хтось зламає сервер та підмінить скрипти на ньому.

Щоб захиститися від цієї можливої проблеми, в майбутньому буде додана можливість роботи з ключем через мобільне приложеніє.

Сертифікація

Згідно із законом України про електронний підпис, юридично значимим є підпис, зроблений сертифікованим або який пройшов експертизу ПЗ. Сигнербокс і використовувані бібліотеки не проходили сертифікацію або експертизу, тому у разі судового розгляду ви можете мати проблеми з тим, щоб довести зв'язок між юзером та особою. Якщо вам це важливо — допоможіть проекту пройти сертифікацію або проконсультуйтеся з юристами.

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

Написати свій інтеграційний плагін досить просто. Для цього треба зробити такі речі:

Поле 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.

This entry was tagged