Ответ на вопрос № 2 зависит от того, какую технологию вы используете и, что более важно, где хранится сертификат.
В Java Key Storage (JKS) сертификаты защищены паролями, и эти пароли передаются в коде.
В хранилище сертификатов Windows (расположение, которое используют классы криптографии .NET) сертификаты защищены с помощью PIN-кода, который не может быть установлен кодом для большинства криптопровайдеров (есть команда расширения для установки PIN-кода, но большинство поставщиков не поддерживают его), Пользователь должен подтвердить доступ к закрытому ключу вручную.
Если вы используете сертификат, хранящийся в файле PKCS12, то пароль для файла также устанавливается в коде.
И, если вам интересно, мы предлагаем компоненты для подписи офисных документов в .NET ( отметьте здесь ). Они поддерживаются и поддерживаются, в отличие от большинства примеров кода.