Здесь очень много аспектов и подвопросов, как в тексте вопроса, так и в комментариях к нему. Этот ответ освещает, но некоторые из них после первого представления некоторых фонов.
Некоторые фоны
Встроенная подпись PDF подразумевает наличие ряда структур в PDF:
Поле формы подписи AcroForm. Это поле формы может иметь аннотацию виджета (визуализацию, которая может содержать любую информацию, которую вы хотите вставить в нее), но не обязательно иметь ее.
Значение в этой форме подписиполе. В отличие от других полей формы, значение поля подписи - это не просто строка, а словарь пар ключ-значение. Содержание зависит от типа подписи. В случае взаимодействующих типов, тем не менее, всегда есть запись Contents , значение которой является двоичной строкой, содержащей фактическую подпись PKCS1 / PKCS7 / CMS / RFC3161 или отметку времени, которая охватывает весь файл, кроме этой двоичной строки.
(Эскиз немного вводит в заблуждение: разделители шестнадцатеричных строк '<' и '>' являются , а не частьподписанных данных.)
В случае типа adbe.x509.rsa_sha1 запись Contents содержит подпись PKCS1. Словарь значения подписи дополнительно должен содержать запись Cert , содержащую сертификат подписи.
В случае типа ETSI.RFC3161 Содержимое Запись содержит маркер времени RFC 3161.
Для типов ETSI.CAdES.detached , adbe.pkcs7.detached и adbe.pkcs7.sha1 запись Contents содержит контейнер подписи CMS. Поскольку контейнер подписи может содержать сертификат подписи, нет необходимости в записи Cert для сертификата подписи.
Контейнер подписи CMS может содержать структуру «подписанных атрибутов». Если это так, один из этих атрибутов должен быть хэшем подписанных байтов PDF (см. Выше, всего, кроме Contents value ) и фактические байты подписи, заключенные в контейнер, подписывают этиподписанные атрибуты. Разрешен ли вариант без подписанных атрибутов и какие атрибуты требуются дополнительно, зависит от точного типа подписи.
В случае ETSI.CAdES.detached контейнер CMS должен содержать подписанные атрибуты. Кроме того, один из подписанных атрибутов должен быть атрибутом подписи-сертификата ESS или подписи-сертификата-v2, ссылающимся на сертификат подписавшего.
Информация о LTV в этом случае может быть добавлена позже в пошаговом режиме. при обновлении до PDF они не должны присутствовать в подписанном PDF.
В случае adbe.pkcs7.detached и adbe.pkcs7.sha1 там вообще не нужно подписывать атрибуты. Тем не менее, в зависимости от точной политики подписания (предписанной законом или договором), тем не менее, могут потребоваться подписанные атрибуты и, в частности, подписанный атрибут сертификата подписи ESS.
Эти типы подписей уже определены в ISO 32000-1. Если политика подписи основана только на ISO 32000-1, информация о LTV должна храниться в атрибуте adbe-revocationInfoArchival, который должен быть атрибутом со знаком.
Требуется ли сертификат подписи перед подписанием?
В комментариях вы ссылаетесь на электронную книгу iText «PDF и цифровые подписи», в которой, как представляется, сказано, что достаточно получить сертификат подписи вместе с подписью.
В свете объясненных предпосылоквыше, однако, мы понимаем, что
В случае adbe.x509.rsa_sha1 подписей, сертификат подписи должен быть в значении Cert словаря словаря значений подписи. Поскольку эта запись отсутствует в записи Contents , этот сертификат является частью подписанных данных. Таким образом, он должен быть известен до подписания.
В случае ETSI.CAdES.detached подписанные атрибуты должны содержать ESSАтрибут подписи-сертификата или подписи-сертификата-v2. Этот атрибут ссылается на сертификат подписавшего. Таким образом, он должен быть известен до подписания.
В случае adbe.pkcs7.detached и adbe.pkcs7.sha1 это зависит от фактической политики подписи, которой нужно придерживаться, требуется ли атрибут подписи-сертификата ESS или подписи-сертификата-v2. Таким образом, это зависит от того, должен ли сертификат подписи быть известен до подписания.
В случае политики подписи, основанной только на ISO 32000-1, информация LTV должна храниться в подписанном атрибуте, если ввсе, и для получения информации LTV, очевидно, нужно знать сертификаты, для которых они пытаются получить их, в частности сертификат подписавшего.
Чтобы ответить на вопрос в заголовке этой темы,поэтому: только в контексте слабой политики подписи вы можете избежать знания неизвестного сертификата перед подписанием, если вам не нужно добавлять информацию LTV.
А в случае подписей PAdES?
В комментарии вы упоминаете, что необходимо использовать PAdES и LTV . Значит ли это, что вам нужен сертификат подписавшего перед подписанием?
Ну, это зависит.
Если с использованием PAdES означает использование базовых профилей PAdES или расширенных профилей PAdES (BES / EPES), вам необходимо создать ETSI.CAdES.detached подписи. Таким образом, вам нужно сертификат подписывающего лица перед подписанием.
Но если для этого требуется только профиль PAdES для цифровых подписей CMS в PDF (по сути, профиль совместимости ISO 32000-1), вы не нужно сертификат подписывающего лица перед подписанием.
Но этот профиль, в частности, подразумевает: Если он присутствует, любая информация об отзыве должна быть подписанным атрибутом подписи PDF. Таким образом, для «PAdES и LTV» вам снова нужно сертификат подписывающего лица перед подписанием.