Как добавить атрибут метки времени в сведения о сертификации при подписании PDF-файла

#pdf #timestamp #digital-signature #signature

Вопрос:

Я хочу отобразить атрибут метки времени в сертификате, как показано на рисунке

введите описание изображения здесь

Что я должен указать в Подписи?

Это мой код для добавления информации о знаке:

 private SignerInformation signTimeStamp(SignerInformation signer) throws IOException, TSPException {
    AttributeTable unsignedAttributes = signer.getUnsignedAttributes();

    ASN1EncodableVector vector = new ASN1EncodableVector();
    if (unsignedAttributes != null) {
        vector = unsignedAttributes.toASN1EncodableVector();
    }

    byte[] token = this.tsaClient.getTimeStampToken(signer.getSignature());

    ASN1ObjectIdentifier oid = PKCSObjectIdentifiers.id_aa_signatureTimeStampToken;
    ASN1Encodable signatureTimeStamp = new Attribute(oid, new DERSet(ASN1Primitive.fromByteArray(token)));

    vector.add(signatureTimeStamp);
    Attributes signedAttributes = new Attributes(vector);
    // replace unsignedAttributes with the signed once
    return SignerInformation.replaceUnsignedAttributes(signer, new AttributeTable(signedAttributes));
}
 

Комментарии:

1. Пожалуйста, поделитесь pdf-файлом, подписанным вашим кодом.

2. @mkl mkl. ДА. Пожалуйста, проверьте это для меня. Спасибо. drive.google.com/file/d/12LZFn-sveKrcVvagk7QbhKf7a4Lxo-7Q/…

3. @mkl, пожалуйста, проверьте, помогите мне. Огромное спасибо.

4. @KJ «Интересные старые отчеты Acrobat о недопустимом типе действия: URI …» — Ну, есть одна ссылка, указывающая на внешнее местоположение. Запретить это очень сомнительно. Вероятно, именно поэтому это больше не запрещено.

5. @mkl да. Я вижу это.

Ответ №1:

Чтобы подвести итог комментариям…

Изучив ваш пример документа, стало ясно, что метка времени, которую вы применили, в порядке. В частности, вы должны получить нижнее сообщение, которое вы отметили на снимке экрана диалогового окна просмотра сертификатов:

Проверка пути и проверка отзыва были выполнены по состоянию на безопасное (отметка времени) время.

С другой стороны, ваш код не влияет на то, получите ли вы другую запись, которую вы отметили на этом снимке экрана:

Данные сертификата: Метка времени - URI = http://aatl-timestamp.globalsign.com/tsa/v4v5effk07zor410rew22z

Эта запись является расширением сертификата подписавшего X. 509, в котором эмитент этого сертификата предоставляет адрес службы отметок времени, которая может использоваться для подписей с отметками времени, созданных закрытым ключом, связанным с этим сертификатом.

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

Поэтому, если поле на снимке экрана, которое соединяется с двумя маркерами, указывает на некоторую необходимую связь между отмеченным URL-адресом TSA и ссылкой на безопасную отметку времени, это неправильно.