Как создать GlobalSign Timestamp Digest?

364
Austin

Я пытаюсь использовать API-интерфейс Global Sign Digital Signing Service для подписи документа PDF. Я получил некоторые из их документации. Но я не могу понять их просьбу предоставить «дайджест». Документация предполагает, что я создаю дайджест с помощью SHA256, HEX кодирую его и помещаю его заглавными буквами. Однако я не уверен, что они хотят закодировать. Все, что он говорит, это «Объект», но не то, что входит в объект.

Страница документации:

https://downloads.globalsign.com/acton/media/2674/digital-signing-service-api-documentation#timestamp__digest__get

У них есть две ссылки в их API подписи:

  • / идентичность / / знак / ; Подписать хэш: после того как закрытый ключ и сертификат созданы и действительны в течение одного сеанса подписи, их можно использовать для выполнения нескольких операций подписания. Дайджест должен быть в верхнем регистре дайджестом сообщения SHA256 в шестнадцатеричном формате. Возвращенная подпись также будет закодирована в шестнадцатеричном формате.
  • / метка времени / ; Отметка времени запроса. Этот API-интерфейс предоставляет отметку времени, соответствующую RFC3161, для включения в подпись.

У меня есть полномочия для работы с GlobalSign. Я смог успешно использовать их вызов API "/ login". Следующим шагом было использование их API "/ timestamp / ". Что идет в дайджесте?

1

2 ответа на вопрос

1
Tyler Dacus

Для того чтобы создать дайджест, вам нужно хэшировать pdf, который вы хотите подписать. Ожидается, что это будет верхний регистр. Вот как я это сделал.

$pdf = file_get_contents("chicken.pdf"); $digest = strtoupper(hash('sha256', $pdf)); 

Также убедитесь, что ваши заголовки верны. Он должен содержать токен-носитель, полученный от вызова / login:

$headers = array('Authorization: Bearer '. $access_token); 

Если вы оставите ненужную информацию в заголовках, вы получите тайм-аут 504.

Усовершенствованием этого принятого ответа может быть `hash_file ()` вместо комбинации `file_get_contents ()` и `hash ()`. Jan Slabon 5 лет назад 0
0
grawity

Вы должны выполнить большую часть процесса подписания локально - единственное отличие состоит в том, что вы вызываете API вместо использования локального файла crt / pem / key (или смарт-карты).

Если вы пытаетесь создать подпись, которая была бы видна в приложениях, таких как Adobe Reader (на их панели «Подписи»), вам нужно будет сделать это в соответствии с этими документами:

Первый документ (спецификация PDF) сообщает вам, какие именно байтовые диапазоны включены в дайджест, а также как полученная подпись внедряется обратно в документ PDF.

Обратите внимание, что PDF требует, чтобы временные метки были связаны с цифровой подписью - у вас не может быть только временной метки.

PDF может иметь только подпись с отметкой времени в PDF 2.0 (ISO / DIS 32000-2 - 12.8.5.2 Исходный словарь отметок времени документа) или в PDF 1.7. через уровень расширения (см., например, профиль PAdES LTV). Вопрос, на который вы ссылаетесь, требует подписи PAdES только с отметкой времени. Jan Slabon 5 лет назад 1

Похожие вопросы