Взаимодействие между html input type=file и java-апплетом

В настоящее время я разрабатываю веб-приложение, в котором я использую цифровую подпись форм, используя карту гражданина Португалии и java-апплеты.

С обычными формами все шло гладко, пока я не столкнулся с проблемой ввода файлов типа. Приложение поддерживает вложения, поэтому я создал отдельный менеджер вложений, где пользователь может отправлять или просматривать вложения. При отправке необходимо иметь два способа сделать это: обычная закачка или подписать файл и потом залить.

Моя первая идея состояла в том, чтобы позволить пользователю выбрать файл в типе ввода = "файл", и если он / она нажмет "подписать и загрузить", он запустит java-апплет для создания подписи, которая будет помещена в скрытый ввод. Проблема заключается в ограничениях безопасности html, которые делают выбранное значение файла недоступным для javascript (который также запрещает доступ к java-аплету) в некоторых браузерах.

Я также подумал о том, чтобы вычислить хэш файла, который будет подписан на стороне сервера, а затем подписать его на стороне клиента, но это также не вариант. Определение хэша и его подписи должно быть на стороне клиента (юридические причины).

Другая идея состояла в том, чтобы использовать что-то вроде JUpload, но он не поддерживает некоторые случаи, когда соединение осуществляется через канал SSL с сертификатом клиента (что может произойти в зависимости от того, как был выполнен вход в веб-приложение).

Наконец, у меня даже возникла абсурдная идея открыть файл в апплете, подписать его, а затем сохранить на скрытом вводе в base64. Очевидно, что это создает огромные ограничения на размер файла.

Итак, мой вопрос: каков наилучший подход к этой проблеме? Какие-либо предложения?

Заранее спасибо ;)


person RicardoSBA    schedule 09.08.2011    source источник


Ответы (1)


Очевидно, что доступ к выбранному в браузере файлу из JS или Flash невозможен. Таким образом, единственный способ — использовать доверенный апплет Java. Однако это не элегантный способ. Также, если у ваших пользователей есть клиентские сертификаты - зачем его подписывать, когда канал связи зашифрован??

person karevn    schedule 09.08.2011