Поскольку извлечь или отправить секретный ключ клиента невозможно или в любом случае безопасно, для подписи pdf-файлов на сервере необходимо установить «сеанс» с клиентом и позволить ему вычислить подпись.
Шаги должны быть примерно такими:
1 - клиент отправляет свой публичный сертификат для встраивания в подписанный pdf
2 - сервер генерирует PDF, встраивает сертификат и вычисляетхеш (например, sha1)
3 - сервер отправляет хеш клиентскому апплету
4 - апплет вычисляет цифровую подпись с помощью своего закрытого ключа
5-апплет отправляет подпись на сервер
6 - сервер встраивает цифровую подпись и закрывает pdf.
Чтобы сделать это с itext, вы должны будете использовать метод preclose последобавление сертификата, чтобы можно было вычислить хэш sha1 в итоговом документе.Затем, предварительно закрыв PDF-файл, вам нужно будет вычислить хеш PDF-файла и отправить его клиенту.Будьте осторожны: несмотря на это, вы должны будете хранить документ в памяти, например, во время сеанса на сервере.
Чтобы сгенерировать pdf, встроить сертификаты и подготовить документ, вы можете использовать itextsharp, порт c # для itext.библиотека.Чтобы вычислить хеш и создать конверты pkcs7, вы можете использовать .net crypto api.
Надеюсь, это поможет.