Реализация ЭЦП в браузере на стороне клиента. Реально?
Для внутренних целей в компании нужна возможность подписывать записи в БД с помощью клиентского сертификата.
Как вижу я - создается запись в БД, по набору полей берем md5 и подписываем сертификатом на стороне клиента в браузере.
В браузере клиент должен иметь возможность получить доступ к хранилищу ключей, выбрать необходимый сертификат, подписать им запись, полученный хэш записать в БД.
Далее, любой пользователь, просматривающий запись из БД должен видеть - верна ли подпись и кому принадлежит.
Вопрос 1 -
Получить возможность на стороне клиента получить доступ к хранилищу и средствами javascript уже дальше подписывать.
Сертификат может быть как файлом, как токеном.
Не на всех компьютерах есть админские права для установки расширений, т.е. решение должно быть без плагинов к браузерам и кросплатформенное.
Предвижу решение через java апплет, но решил разобраться с этим - готовых решений не нашел (может подскажете куда смотреть?), а свой писать, так понимаю, возникает вопрос в подписи апплета, т.к. самооподписанные браузерами уже не воспринимаются.
Вопрос 2
Как должна выглядеть система в теории - ключ закрытый у клиента, открытый заносится пользователем в систему и хранится на сервере для последующей проверки имеющихся подписей, верно?
Отлично, со вторым вопросом разберусь. По поводу первого - реализация подобного java апплета индивидуальна или есть общие решения? Для java принципиально хранилище? Т.е. у меня в системе есть сертификаты с токена, файловые сертификаты. В windows яя вижу их в одном окне при выборе. В linux не сталкивался. В итоге, для java - это просто инициализация доступа к общему хранилищу или для каждого свой механизм? Апплет занимается подписью или через него можно получить ключ, которым можно затем подписать через javascript и передать на сервер? На JS есть Крипто API, но в черновика API для доступа к хранилищу сертификатов. С java знаком плохо.
Я с Java тоже плохо знаком. Очень плохо. Но с технической точки зрения, и с точки зрения безопастности подпись должна происходить на стороне клиента, ведь не совсем правильно будет закрытый ключ по сети гонять :)
Советую изучить подход и опыт Mega(файлообменник Тима Доткома) в этой области, гуглится много и критики и решений некоторых проблем, возможно поможет продумать свою платформу на базе их опыта