У нас есть веб-приложение C#, к которому пользователи будут подключаться с помощью цифрового сертификата, хранящегося в их браузерах.
Из примеров, которые мы видели, проверка их подлинности будет легкой, если мы включим SSL, поскольку мы можем получить доступ к полям в сертификате, используя Request.ClientCertificate, чтобы проверить имя пользователя.
Однако нас также попросили подписать данные, отправленные пользователем (несколько простых полей и двоичный файл), чтобы мы могли без сомнений доказать, какой пользователь ввел каждую запись в нашу базу данных.
Нашей первой мыслью было создать небольшую текстовую подпись, включающую поля (и, если возможно, md5 файла) и зашифровать ее приватным ключом сертификата, но...
Насколько я знаю, мы не можем получить доступ к закрытому ключу сертификата для подписи данных, и я не знаю, есть ли способ подписать поля в браузере, или у нас нет другого выбора, кроме как использовать Java апплет. И если последнее, то как бы мы это сделали (есть ли какой-нибудь апплет с открытым исходным кодом, который мы могли бы использовать? Было бы лучше, если бы мы создали его сами?)
Конечно, было бы лучше, если бы был какой-то способ «подписать» поля, полученные на сервере, используя данные, к которым мы можем получить доступ из сертификата пользователя. Но если нет, любая информация о лучшем способе решения проблемы будет оценена по достоинству.