Вы хотите, чтобы пользователь загрузил закрытый ключ своего сертификата на веб-сервер, чтобы он мог подписывать PDF-файлы? Если это так, то это в корне нарушено с точки зрения безопасности.
Я думаю, вы, возможно, упустили момент, когда открытый сертификат! = Закрытый ключ. (Большинство из нас небрежны и используют слово «сертификат» для обозначения одного (или обоих) из этих вещей, так что это не совсем удивительно). Исходя из памяти, у CryptoAPI есть только выбранный набор методов, которые позволят вам получить доступ к ключу. Среди них должен быть метод «экспортировать как PFX», чтобы вы могли заставить свой дизайн работать, если вы действительно этого хотите, но я бы не рекомендовал это. (Риск отправки закрытых ключей на веб-сервер, неработоспособность и т. Д. И т. Д.).
Если вам действительно необходимо выполнить подпись на сервере [я не совсем понимаю ваш аргумент, подпись не должна добавлять много данных к загрузке], тогда вам, вероятно, следует рассмотреть многоуровневую архитектуру и механизм условного депонирования ключей. , Таким образом, вы можете, по крайней мере, минимизировать некоторые проблемы безопасности (но вы все равно потеряете безотказность ... и будете вводить другие риски. Бесплатный обед здесь).
Итак ... вам, вероятно, нужно подумать о перестройке вашего приложения, чтобы подпись PDF возникала на клиенте (в вашем элементе управления ActiveX), прежде чем файл PDF будет загружен. Я полагаю, вам понадобится сторонняя библиотека для этапа подписи, как описано в этом SO-потоке .