Первый пример документа
Мне не удалось воспроизвести сообщение об ошибке «Неожиданные значения диапазона байтов, определяющие область подписанных данных» с первый пример документа, Foxit просто пожаловался, что подпись недействительна. И это действительно так, потому что вы забыли декодировать строку подписи с помощью base64, прежде чем вводить ее в PDF - PDF требует встроенных контейнеров подписи в формате DER.
Второй пример документа
Второй пример документа был опубликован в комментарии:
Теперь я больше не получаю ошибку о диапазоне байтов, но получаю новые ошибки: документ был изменен или поврежден с момента применения подписи. Идентификация подписывающей стороны недействительна, поскольку срок ее действия истек или еще не действителен. и Подпись включает встроенную временную метку, но ее не удалось проверить. Не уверен, что сейчас делаю правильно. Это новый файл: https://drive.google.com/file/d/1vsa7thwCsi04r68cdcIsfJG7cT2__-d9/view?usp=sharing
Действительно, контейнер подписи теперь вводится в формате DER, поэтому Foxit Reader может его проверить. Относительно новых сообщений об ошибках:
Документ был изменен или поврежден с момента применения подписи. Здесь это указывает на несоответствие значения дайджеста.
Вычисление и извлечение рассматриваемых значений дайджеста показывает, что значение дайджеста SHA256 диапазонов байтов со знаком документа равно
6CB28A1F84A85A820908B657A967BFE21C1BA7304D39AE2C8D64F9A15E5BFDB4
в то время как атрибут дайджеста сообщения в контейнере подписи содержит
75C31E9E948D41DE19F668CF4A5BE28128CB0BE8D1E4502A795FF9CA9FE54639
поэтому ваша подпись действительно не соответствует подписанным диапазонам байтов.
Интересно, однако, что это точно такой же дайджест, который был подписан в контейнере подписи в первом файле. На самом деле весь контейнер подписи идентичен. Судя по всему, вы просто повторно использовали контейнер подписи, полученный вами для предыдущего теста. Поскольку время подписания в новом документе отличается, это не сработает, однако вам придется заново вычислять дайджест подписанных диапазонов байтов и запрашивать для него подпись.
Тем не менее, даже для вашего первого документа этот дайджест неверен. Итак, у вас, по-видимому, есть проблема с вычислением значений дайджеста.
Идентификатор подписывающей стороны недействителен, поскольку срок его действия истек или еще не действителен. Я не получаю это сообщение об ошибке даже после обновления Foxit Reader вручную. Сначала мне сообщили, что сертификат не привязан к якорю доверия, и после явного доверия корневому сертификату я получаю Идентификатор подписывающей стороны действителен. Вы выбрали какие-то нестандартные настройки в своем Foxit Reader? Или дата вашего локального компьютера полностью отключена?
Подпись включает встроенную отметку времени, но ее невозможно проверить. Я тоже это понял, но здесь мне снова нужно было просто доверять корневому сертификату сертификата TSA, чтобы начать работу.
Комментарии
В комментариях вы спросите:
Где я могу найти атрибут дайджеста сообщения в подписи?
Атрибут дайджеста сообщения — это подписанный атрибут одиночного SignerInfo
в контейнере подписи.
Если вы проверяете свой контейнер подписи с помощью средства просмотра ASN.1 (например, http://lapo.it/asn1js/) поищи это
SEQUENCE (2 elem)
OBJECT IDENTIFIER 1.2.840.113549.1.9.4 messageDigest (PKCS #9)
SET (1 elem)
OCTET STRING (32 byte) 75C31E9E948D41DE19F668CF4A5BE28128CB0BE8D1E4502A795FF9CA9FE54639
Если вы хотите понять детали того, что видите, изучите RFC 5652 и спецификации оттуда.
И как я могу явно доверять корневому сертификату?
Для сертификата подписывающей стороны в Foxit Reader откройте диалоговое окно Свойства подписи, выберите Показать сертификат, выберите сертификат, которому вы хотите доверять (корневой ЦС/промежуточный ЦС/конечный объект), откройте на вкладке Доверие и нажмите Добавить в доверенные сертификаты.
Для сертификата TSA в Foxit Reader откройте диалоговое окно Свойства подписи, внизу нажмите Дополнительные свойства, выберите Показать сертификат в сведениях о метке времени, выберите сертификат, которому вы хотите доверять (корневой ЦС / промежуточный ЦС / конечный объект), откройте вкладку Доверие и нажмите Добавить в доверенные сертификаты.
person
mkl
schedule
16.11.2020