dstucrypt/agent

Помилка перевірки підпису: хибний підпис

Opened this issue · 24 comments

Добрий день. Хочу дістати облікові дані платника за адресою https://cabinet.tax.gov.ua/ws/public_api/payer_card. Для цього вимагається додати хедер Authorization ЄДРПОУ/РНОКПП підписаний внутрішнім підписом з додаванням сертифікату в BASE64.

  1. Для підпису ЄДРПОУ використовую наступну команду:
node index.js --sign
    --key key_path:password
    --cert certificate_sign_path
    --input input_path
    --output output_path
    --no-tax
    --include_chain
  1. Конвертую в base64
  2. У відповідь отримую помилку:
 {'error': 'Помилка', 'error_description': 'Помилка перевірки підпису:хибний підпис'}

Підкажіть, будь ласка, в чому проблема. Можливо, у когось є досвід роботи з приватною частиною ЕК. Дякую.


Прикріплюю підписаний файл:
34554363.txt
Опис API доступу до інформації приватної частини ЕК:
https://cabinet.tax.gov.ua/help/api-registers-int.html

Там з АПІ не дуже зрозуміло шо і як взагалі треба підписувать, тому йой. Можливо треба просто додати tsp та/або ocsp, можливо взагалі не ті дані підписуєте.

На доу пишуть шо треба підписати свій ІПН/ЄДР і включить TSP, але це не точно. Якщо підписуєте файл -- там десь може бути зайвий \n

Подививсь на файл і можу тількі сказати шо починаєтся він з UA1_SIGN, це значить шо параметр --no-tax або не спрацював або команда не зовсім та шо в написана. Підписано наче те шо треба, але ручки --no-tax і --tsp треба посмикать туди-суди

Ок, дякую! Буду пробувати різні варіанти!

Підписав за допомогою ІІТ, з такими параметрами:

image

Тепер наступна помилка:

{'error': 'Помилка', 'error_description': 'Помилка перевірки підпису: хибний підписант'}

П.С. А який аналог для 'використовувати внутрішній підпис' та 'додавати сертифікат до внутрішнього підпису' у Jkurwa?

@Tarasila розібралися з даною проблемою?

Мені теж цікава ця тема

@sdemonses @nester-sky тоді так нічого і не вдалося. Залишив на потім.

@tarantelot У вас вийшло щось зробити із цим?

tarantelot Скажіте а как Ви полпісалі с помощью IIT Это с помощью EsingJava Можно пример кода ?

Є версія, що проблема проявляється, якщо у сертифікаті немає значення EDRPOU. Ось два ключі, один пропускається податковою і надходить потрібна відповідь, по другому помилка "Помилка перевірки підпису:хибний підпис'"
Цей працює
'organizationName': 'ФОП ШЕВЧЕНКО', 'title': 'КЕРІВНИК', 'commonName': 'ШЕВЧЕНКО'
': {'ipn': {'EDRPOU': '3173911188', 'DRFO': '3173911188', '1,2,804,2,1,1,1,11,1,4,7,1': '0'}

А тому помилка
{'organizationName': 'ФІЗИЧНА ОСОБА', 'commonName': 'ШЕВЧЕНКО'
{'ipn': {'DRFO': '3231901452', '1,2,804,2,1,1,1,11,1,4,7,1': '0'}

@muromec Чи можна додати в підпис вручну EDRPOU=DRFO якщо його немає?

@p2p-sys можна робити отак: agent --sign --edrpou ...

В принципі edrpou це частина трапспортного пакету (того шо формується з --tax) і не є частиною підпису, то я не дуже розумію що тут коїться взагалі.

Якщо base64 починається з MII, як на скріншоті -- це нормальний CMS без оцих обгорток податкової.

@muromec Ні, це все при відправці на апі кабінету, там немає транспортного пакета

якщо немає транспортного пакету, то куди ви хочете писати ЄДР?

Я не знаю алгоритму на стороні податкової, але дуже схоже, що вони шукають у підписі поле EDRPOU, і якщо його немає воно йде в виняток. Можливо можна якось додати до підписаного документа це поле. Це лише припущення...

Покажіть мені, де в підписі є ЄДРПОУ

Відправив на пошту

@p2p-sys то в чому причина, розібрались?

Привіт, поділюся з вами своїм рішенням, можливо ви підкажете що не так або як це зробити простіше.
Дійсно такі налаштування вірні, але важливо підтягнути сертифікат з властивостями до вашого ключа
Тип: ДСТУ-4145
Призначення: ЕЦП, Неспростовність

image
тут сертифікат не вказаний з зрозумілих причин
image

Основна проблема заключається в тому, що підписувати потрібно не стрінгу в ASCII-8BIT, а ІПН перевести в UTF-16LE і отримане значення вже підписати.
image

І це чомусь працює
image

Якщо у вас є ідеї, як підписувати ІПН в ASCII-8BIT, велком

Ну то підписуйте в UTF-16, якщо їм треба.

Є версія, що проблема проявляється, якщо у сертифікаті немає значення EDRPOU. Ось два ключі, один пропускається податковою і надходить потрібна відповідь, по другому помилка "Помилка перевірки підпису:хибний підпис'" Цей працює 'organizationName': 'ФОП ШЕВЧЕНКО', 'title': 'КЕРІВНИК', 'commonName': 'ШЕВЧЕНКО' ': {'ipn': {'EDRPOU': '3173911188', 'DRFO': '3173911188', '1,2,804,2,1,1,1,11,1,4,7,1': '0'}

А тому помилка {'organizationName': 'ФІЗИЧНА ОСОБА', 'commonName': 'ШЕВЧЕНКО' {'ipn': {'DRFO': '3231901452', '1,2,804,2,1,1,1,11,1,4,7,1': '0'}

@muromec Чи можна додати в підпис вручну EDRPOU=DRFO якщо його немає?

А в мене чомусь з підписаним ІПН все працює, а з ЄДРПОУ - помилка.

Ось таку помилку отримую від ДПС для приватівської печатки фопа з ЄДРПОУ:

Помилка
Помилка перевірки підпису: хибний підписант, не має права підпису

Чи можна додати в підпис вручну EDRPOU=DRFO якщо його немає?

не можна, але можна обрати інший ключ з пакету

В пріватовських контейнерах лежить по чотири, шість, або вісім ключів, тому треба вказувати role в параметрах щоб воно обрало який надо.

Тут тільки 2:
image

  1. Digital Signature, Non-Repudiation
    image

  2. Key Agreement
    image

Підписую 1-им, ну і сам ЄДРПОУ з 1-го:
image

Якщо в сертифікати отакоє потрачено, то з цим зробить нічого не можна.