демо-стенд · сторінка WordPress

Два підписи на одному документі — і вони різні за природою

Страхувальник підписує одноразовим ідентифікатором. Страховик — електронним підписом із позначкою часу, автоматично, без участі працівника. Нижче обидва шляхи працюють по-справжньому: пройдіть їх.

Сторона клієнта одноразовий ідентифікатор

Договір добровільного страхування № 2026/0914

Документ підписано електронним підписом / підписом одноразовим ідентифікатором, про що Сторони Договору погодились у встановленому порядку (відповідно до Закону України «Про електронну комерцію»)

   ______      Прізвище, ініціали Страхувальника
(підпис)
ПІДПИСАНО
1
Ідентифікація підписанта
номер телефону, на який піде код
2
Одноразовий код
6 цифр, діє 5 хвилин, блокується після 5 невдалих спроб
3
Фіксація хешу документа
SHA-256 знімається ДО відправки коду
SMS на : код підтвердження
канал доставки фіксується в журналі · у бою це шлюз SMS або e-mail
Сторона страховика підпис + позначка часу

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

1
Автоматичне накладання підпису страховика
ключ поза вебом, підпис усередині PDF
2
Запит електронної позначки часу
час від довірчого сервісу, не від системи
3
Перевірка ланцюжка та архівування
підписаний PDF + протокол у сховище
✓ Документ підписано обома сторонами
UUID документа Хеш документа Підпис клієнтаодноразовий ідентифікатор (OTP), канал SMS OTP ID ПідписувачТОВ «Страхова компанія», уповноважений підписувач Сертифікатсерійний № 3B7A…E41C, дійсний до 14.09.2027 Формат підписуPAdES-LTV — довгострокова перевірка Позначка часу Джерело часудовірчий сервіс, не системний час Статус перевіркиланцюжок сертифікатів дійсний
Журнал подій доказова база
очікування дій підписанта

Журнал — це і є те, чим у спорі доводять факт підписання: хто, коли, з якої IP, яким каналом отримав код, яку саме версію документа бачив. Без нього підпис є, а доказу немає.

Чому саме так

Три речі, які вирішують долю такого проєкту

Два підписи мають різну юридичну вагу

Підпис одноразовим ідентифікатором тримається на Законі «Про електронну комерцію» — саме тому договір можна підписати без КЕП, і саме тому в PDF має бути той інформаційний блок із посиланням на нього. Підпис страховика — уже з довірчих послуг. Зводити їх в інтерфейсі в одну кнопку «підписати» не можна.

ЗУ «Про електронну комерцію» · ЗУ «Про електронну ідентифікацію та електронні довірчі послуги»

Підпис прив'язується до хешу, а не до файлу

Хеш фіксується до відправки коду. Якщо PDF перегенерувати після підтвердження — хоча б зміниться дата всередині — підпис перестане сходитись. Саме тут ламається більшість саморобних рішень на WordPress.

PAdES · підпис усередині PDF

Позначка часу — зовнішня послуга, не системний час

Час сервера доказом не є: його можна перевести. У вашому ТЗ це сказано прямо — час визначається за даними довірчого сервісу, а не за системним часом. Саме позначка доводить, що документ існував у такому вигляді в такий момент.

електронна позначка часу · довірчий сервіс
Чесно про межу стенда. Тут імітовані два зовнішні сервіси: шлюз SMS і служба позначок часу. Усе інше — фіксація хешу, порядок кроків, ліміт спроб, анулювання коду, склад журналу — працює так, як працюватиме на бою. Підпис страховика потребує ключа та договору з надавачем довірчих послуг з боку вашої компанії: ключ і доступ до служби часу видає він, підключення до нього — моя частина роботи.

Що ставиться на WordPress

Склад рішення

ВузолЩо робитьДе живе
Плагін підписаннясторінка документа, кроки підписанта, шорткод для вставки в будь-яку сторінкуWordPress
Сервіс OTPгенерація коду, ліміт спроб і часу життя, канал SMS або e-mailWordPress + шлюз
Підписувач страховиканакладання підпису на хеш, запит позначки часуокремий сервіс, ключ поза вебом
Сховище та журналпідписаний PDF, протокол, повна історія подійWordPress + файлове сховище

Ключ підпису страховика свідомо винесений із WordPress окремим сервісом: сайт на WP оновлюється плагінами й темами, і тримати в цьому периметрі ключ, яким підписуються договори, не можна. Це ж закриває вимогу «неможливість використання ключа неавторизованими особами».

Критерії приймання — і як кожен закривається

Критерій із ТЗЧим закривається
Договір можна підписати без КЕПпідпис одноразовим ідентифікатором на підставі ЗУ «Про електронну комерцію»
OTP використовується лише один разкод анулюється в момент успішної перевірки, повторна перевірка відхиляється
Документ після підписання неможливо змінити без зміни хешуSHA-256 знімається до відправки коду і входить у підпис
Журнал містить усі юридично значимі подіїIP, User-Agent, канал, OTP ID, UUID, час відправки й підтвердження, хеш
Клієнт отримує підписаний PDFвідправка на вказану ним пошту одразу після накладання позначки часу
Адміністратор може перевірити автентичністьсторінка перевірки: завантажити PDF — отримати звірку хешу й статус сертифікатів