Как сделать цифровую подпись 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 будет выглядеть следующим образом:
- Пользователь нажал кнопку FileReturn в браузере.
- Вызовите метод для загрузки GSTR3B Резюме возврата - ApiAction "RETSUM"
- Вызовите метод вычисления хэша ResponsePayload из шага 2 выше.
- Отправьте хэш на шаге выше для подписи, где вышеупомянутый метод JavaScript получит хэш возврата GSTR, подписанный с использованием метода расширения SigherDigital.
- Верните подпись (как показано выше в JavaScript) на сервер веб-приложений, который продолжит вызов API GSTR3B Filing на сервер GSTN.
Если вы используете бесплатную библиотеку TaxProGST.API для файла псевдокод GSTR3B будет выглядеть следующим образом:
- Пользователь нажал кнопку FileReturn в браузере.
- Вызовите метод GSTR3BAPI.GetGstr3BDataSchedulePayloadAsync - чтобы загрузить GSTR3B Сводка возврата - ApiAction "RETSUM"
- Вызовите метод GSTR3BAPI.ComputeReturn3BHash(ResponsePayload из шага 2 выше)
- Отправьте хэш на шаге выше для подписи, где вышеупомянутый метод JavaScript получит хэш возврата GSTR, подписанный с использованием метода расширения SigherDigital.
- Возврат подписи (как показано в JavaScript выше) на сервер веб-приложений
- Серверное приложение продолжит вызов API GSTR3B Filing к серверу GSTN, используя метод GSTR3BAPI.FileReturn3BFromBrowser
Хотя webcrypto не предоставляет доступ к смарт-картам, существует приложение под названием FortifyApp, которое предоставляет полифилл webcrypto, который работает через тот же интерфейс.
Вы можете прочитать о том, как это работает здесь.
Документация для интерфейса находится здесь: https://peculiarventures.github.io/webcrypto-local/docs/