Как сделать цифровую подпись GST Return или eReturn, используя JavaScript-браузер и USB-токен пользователя? Могу ли я использовать WebCrypto API?

Ищите код Javascript для подписи GST или eReturns подоходного налога из браузера с помощью USB-токена.

2 ответа

Решение

В последнее время много говорят об API WebCrypto, но на данный момент API WebCrypto не предоставляет доступ к (Windows) или любым другим хранилищам ключей или локальному устройству шифрования USB/Smartcard. Более старые методы - это Java-апплеты, Active X и т. Д., Которые постепенно или постепенно исключаются из предложений Modern Browser.

Большинство веб-приложений требуют цифровой подписи pdf-документов, файлов, электронных возвратов (XML или JSON) и т. Д. Из браузера пользователя с использованием хранилища ключей на локальном компьютере пользователя, USB-токена или смарт-карты.

Также в большинстве сценариев подписи для требования защиты данных в пределах границ сервера не рекомендуется отправлять полный файл PDF или данные в браузер или на сервер API подписи.

Таким образом, рекомендуется использовать JavaScript через расширение браузера для доступа к какому-либо приложению, работающему в локальной системе, для доступа к локальному хранилищу ключей, а также для создания подписи и отправки обратно (контейнер PKCS7 или CMS в случае подписи PDF) на сервер, где подпись может быть введена вернуться в PDF или eReturn, из которого хеш был создан для подписи и отправлен в браузер.

Для сценариев подписи на основе браузера одним из таких бесплатных расширений Chrome является расширение Signer.Digital chrome. Локальную систему (хост, работающий за браузером Chrome в Windows) можно загрузить с https://download.cnet.com/Signer-Digital-Chrome-Extension/3000-33362_4-78042540.html После установки этого хоста и перезапуска Chrome автоматически добавит Signer.Digital Chrome Extension

Фактическая работа этого расширения иллюстрируется здесь

Пример кода JavaScript и псевдокода на стороне сервера для подписи возврата GST с использованием расширения Signer.Digital:

function getSignature(hash){
       //Sign GSTR Return Hash using Signer.Digital Chrome Extension
       //This method returns CMS (PKCS7) Signature
       SignerDigital.signGstHash(hash)
    .then(function(signature){
           //send signature to return filing server
       },function(error){
           //send error to server and/or report error to user
       });
   }

//For Income Tax Return signing use method:
//This method returns SHA256 Signature
SignerDigital.signITHash(hash, PAN)

Пример псевдокода на стороне сервера для файла GSTR3B будет выглядеть следующим образом:

  1. Пользователь нажал кнопку FileReturn в браузере.
  2. Вызовите метод для загрузки GSTR3B Резюме возврата - ApiAction "RETSUM"
  3. Вызовите метод вычисления хэша ResponsePayload из шага 2 выше.
  4. Отправьте хэш на шаге выше для подписи, где вышеупомянутый метод JavaScript получит хэш возврата GSTR, подписанный с использованием метода расширения SigherDigital.
  5. Верните подпись (как показано выше в JavaScript) на сервер веб-приложений, который продолжит вызов API GSTR3B Filing на сервер GSTN.

Если вы используете бесплатную библиотеку TaxProGST.API для файла псевдокод GSTR3B будет выглядеть следующим образом:

  1. Пользователь нажал кнопку FileReturn в браузере.
  2. Вызовите метод GSTR3BAPI.GetGstr3BDataSchedulePayloadAsync - чтобы загрузить GSTR3B Сводка возврата - ApiAction "RETSUM"
  3. Вызовите метод GSTR3BAPI.ComputeReturn3BHash(ResponsePayload из шага 2 выше)
  4. Отправьте хэш на шаге выше для подписи, где вышеупомянутый метод JavaScript получит хэш возврата GSTR, подписанный с использованием метода расширения SigherDigital.
  5. Возврат подписи (как показано в JavaScript выше) на сервер веб-приложений
  6. Серверное приложение продолжит вызов API GSTR3B Filing к серверу GSTN, используя метод GSTR3BAPI.FileReturn3BFromBrowser

Хотя webcrypto не предоставляет доступ к смарт-картам, существует приложение под названием FortifyApp, которое предоставляет полифилл webcrypto, который работает через тот же интерфейс.

Вы можете прочитать о том, как это работает здесь.

Документация для интерфейса находится здесь: https://peculiarventures.github.io/webcrypto-local/docs/

Другие вопросы по тегам