Это очень сложная задача, включающая клиентский модуль (ActiveX или Java-апплет).Причина в том, что ни одно решение JavaScript не является надежным по причинам, описанным здесь .
Вкратце - модуль будет принимать данные JavaScript для подписи, показывать эти данные клиенту и просить еговыберите сертификат для подписи.Затем данные будут подписаны, а подписанный контент будет отправлен на сервер модулем (а не браузером).
Мы реализовали такую схему в нашей библиотеке SecureBlackbox, которую вы можете проверить, если вам нужно реализовать такую распределенную подпись.См. Описание модуля распределенной криптографии здесь .