Доступ к считывателю смарт-карт из веб-браузера?

Можно ли получить доступ к устройству чтения смарт-карт, подключенному к компьютеру, через веб-браузер, работающий на том же компьютере, то есть из ActionScript, JavaScript или любого другого скрипта, работающего на нем?

Например, я прочитал кое-что о классе flash.external.ExternalInterface в ActionScript. Можно ли использовать его для доступа к устройству чтения смарт-карт или песочница непроницаема?

Ответы

Ответ 1

Q: возможно ли доступ к считывателю смарт-карт, подключенному к компьютеру, из веб-браузера, запущенного на том же компьютере?

A: Да, это возможно. Я смог сделать это, используя подписанный JAVA-апплет. Java-апплет должен быть подписан, так как он потребует от пользователя разрешения на доступ к системным файлам/аппаратным средствам (таким же, как если бы апплет записывал/редактировал/удалял текстовый файл).

Почему Java? у читателя смарт-карт, который я использовал, уже есть JAVA API, у него также есть примеры доступа к нему с помощью java. Но примеры закодированы в качелях. (например, автономное настольное приложение). Я просто переносил java swing-код в апплет в браузере. Я успешно использовал этот апплет для входа в систему и выхода на веб-сайт/webapp, требуя смарт-карт, имени пользователя и пароля. Я бы сказал, насколько я уверен.

Исходный код? Насколько я хотел бы поделиться им, но я связан с контрактом компании, чтобы не делиться кодом. Просто найдите образец смарт-карты с помощью java и просто поместите ее в апплет (для Интернета)

Я надеюсь, что это поможет

Ответ 2

Вы также можете посмотреть этот платный плагин:

https://github.com/ubinity/webpcsc-firebreath

Это кросс-браузерный/кросс-pltaform-плагин на основе инфраструктуры firebreath, отображающий подмножество API PCSC.

Ответ 4

Я работал над тем же около 2012 года, тогда я работал над предыдущей работой, которая обеспечивала Java-апплет.

В настоящее время [декабрь 2015 года], использование "Java-апплета" в связи с "недавними" проблемами безопасности, а также после увольнения поддержки Java-апплетов, еще меньше смысла, и также прекращаются также технологии родных плагинов.

Независимо от текущей полезности Java-апплета, набрав ответ на @Glen Allen, я не связан контрактом, и вот открытый исходный код примера Applet: https://github.com/ist-dsi/signature

Он был основан на работе над диссертацией, и он создает документы в этом формате: http://www.w3.org/TR/xmldsig-core/ больше информации о том, почему можно найти в аннотация этой тезисов MsC https://fenix.tecnico.ulisboa.pt/downloadFile/395139415358/resumo.pdf (автор, пожалуй, лучший инженер, чем автор тезисов, но, возможно, неплохо было бы начать, если вы хочу знать состояние искусства, хотя оно и старое)

Есть больше требований, которые на задним числом и без знания сделали некоторые странные варианты технологий на коде, который я вам даю, просто не обращайте внимания на эту часть:)

Один из ответов здесь намекнул на PKCS_11 и открытые стандарты. Возможно, трюк находится в драйвере для чтения смарт-карт, который автоматически настраивает инфраструктуру сертификата на стороне клиента, я помню, что мне пришлось пройти через множество обручей, хотя для настройки смарт-карты с ID-картой с помощью считывателя на Mac OS X с Chrome [AFAIK было нелегко настроить считыватель смарт-карт с помощью хранилища ключей Apple, и, возможно, также не так просто настроить Chrome таким образом, чтобы он использовал аутентификацию клиента и запросил доступ к хранилищу ключей Apple.

Или, может быть, NFC + SmartCard и мобильное приложение будут доступны.

Просто такая трата, чтобы иметь целые страны с идентификаторами с SmartCards, множество государственных услуг уже с webapps, и нет простого способа подключения этих двух.

Приветствия.

Ответ 5

Вы можете использовать подписанный Java-апплет для доступа к читателю. Подписанные апплеты имеют доступ к периферийным устройствам аппаратного обеспечения, к считывателю смарт-карт можно получить доступ через API Java Crypto.

Надеюсь, что это поможет.

Ответ 6

Если вы можете получить доступ к смарт-карте в своей файловой системе, например, когда USB-накопитель подключен и выглядит как отдельный диск, вы можете просто использовать flash.net.FileReference.

Ответ 7

Вы не сможете добиться этого с помощью ActionScript/Flash, если будете придерживаться браузера.

Adobe AIR может сделать это, но тогда вам придется создать приложение, которое пользователь должен установить перед использованием.

Примерно так (AIR): http://cookbooks.adobe.com/post_Mass_Storage_Device_Detection_AIR_2_0-16747.html

Ответ 8

WebUSB был многообещающим, пока они не решили добавить устройства чтения смарт-карт в список классов устройств, и его не стало.

Ответ 9

На сегодняшний день лучшим вариантом является использование расширений браузера

Методы, такие как java-апплеты, Active X и т.д., Которые постепенно или постепенно прекращаются из новых предложений Modern Browser.

https://www.java.com/en/download/faq/chrome.xml

Плагин Java для веб-браузеров опирается на кроссплатформенную архитектуру плагинов NPAPI, которая поддерживается всеми основными веб-браузерами уже более десяти лет. В Google Chrome версии 45 и выше прекращена поддержка NPAPI, поэтому плагин Java больше не работает в этих браузерах.

В последнее время много говорят об API WebCrypto, но на данный момент API WebCrypto не предоставляет доступ к (Windows) или любым другим хранилищам ключей или локальному устройству шифрования USB/Smartcard.

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

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

Для сценариев подписи на основе браузера одним из таких бесплатных расширений Chrome является расширение Signer.Digital chrome. Установку локальной системы (хост, работающий за браузером Chrome в Windows) можно загрузить с https://signer.digital/downloads/Signer.Digital.Chrome.Host.Setup.zip. При установке и перезапуске Chrome автоматически добавляется Signer.Digital. Расширение Chrome

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

JavaScript для вызова метода из расширения:

    //Calculate Sign for the Hash by Calling function from Extension SignerDigital
    SignerDigital.signPdfHash(hash, $("#CertThumbPrint").val(), "SHA-256")      //or "SHA256"
     .then(
            function (signDataResp) {
              //Send signDataResp to Server
        },
            function (errmsg) {
                //Send errmsg to server or display the result in browser.
              }
     );

В случае успеха: возвращает подпись pkcs7 в кодировке Base64 - используйте любую подходящую библиотеку или библиотеку, предоставленную Signer.Digital для вставки знака в pdf

Если не удалось: возвращает сообщение об ошибке, начиная с "SDHost Error:"