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 для передачі сторінки та скриптів у браузер. Але все ж залишається вектор атаки — якщо хтось зламає сервер та підмінить скрипти на ньому.
Щоб захиститися від цієї можливої проблеми, в майбутньому буде додана можливість роботи з ключем через мобільне приложеніє.
Згідно із законом України про електронний підпис, юридично значимим є підпис, зроблений сертифікованим або який пройшов експертизу ПЗ. Сигнербокс і використовувані бібліотеки не проходили сертифікацію або експертизу, тому у разі судового розгляду ви можете мати проблеми з тим, щоб довести зв'язок між юзером та особою. Якщо вам це важливо — допоможіть проекту пройти сертифікацію або проконсультуйтеся з юристами.
Написати свій інтеграційний плагін досить просто. Для цього треба зробити такі речі:
https://eusign.org/auth/:app_id?state=:app_statehttps://eusign.org/api/1/certificates/:cert_iddata формату :nonce|:auth_urlhttp://localhost:8013/api/0/check з параметрами c (отриманий сертифікат), d (параметр data) та s (параметр sign)Поле 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.