2011-04-28 8 views
0

Je suis en train d'écrire une application pour signer et horodater des fichiers PDF en utilisant iText et Java. Parce que nous (en Slovénie) avons une approche différente pour obtenir l'horodatage de notre TSA (via le service web, en utilisant un certificat et un mot de passe) je ne peux pas utiliser ces méthodes d'iText. J'ai un script Perl pour ça. Alors ... comment, ou avec quelles parties du code puis-je écrire horodatage et digérer (à partir d'une réponse de service Web) à un fichier PDF?Problème avec l'horodatage d'un PDF en utilisant Java et iText

Répondre

1

Je ne suis pas si je suis exactement ce que vous demandez, mais il semble que vous vouliez ajuster la date qui est rapportée pour la signature du PDF.

En supposant que vous utilisez PdfStamper de signer le document, après avoir créé la signature essayer

pdfStamper.getSignatureAppearence().setSignDate(calendar) 

où le calendrier est une instance de calendrier que vous avez créé en utilisant une réponse de votre horodatage service Web. Obtenir iText pour inclure les informations TSA avec la signature est un peu plus complexe. C'est un peu en dehors de mon domaine de connaissances, mais d'après ce que je comprends, vous devez utiliser un certificat généré de l'extérieur, et la plupart des gens le font en utilisant BouncyCastle.

Cette discussion a un exemple de la façon de le faire. Vous voudrez éventuellement utiliser TSAClientBouncyCastle lors de l'obtention du certificat crypté. Ce page a un autre exemple incluant des informations OCSP.

Si cela vous convient, veuillez ajouter votre solution afin d'obtenir une réponse plus fiable sur stackoverflow.

+0

'si je mets ceci dans mon code, le lecteur de pdf dira toujours que la date et l'heure proviennent de l'ordinateur du signataire. de WS-réponse, je reçois: "#TimeStampInfo -..." -> dsig: DigestValue (dièse) "#TimeStampAuthority" -> dsig: DigestValue (dièse) dsig: SignedInfo -> dsig: SignatureValue (hash), dsig: X509Certificate (hash); TimeStampInfo -> ds: DigestValue (hash), ts: numéro de série (long), ts: CreationTime (horodatage), ts: Nonce (long); J'ai besoin d'ajouter ces valeurs au format PDF, que le lecteur reconnaîtra comme timestamp TSA. Quelles sont les métodonnées à remplacer? Est-ce que je peux voir ceci profondément dans le code? ' – TurboJupi

+0

D'accord, je vois où vous allez avec ceci maintenant. C'est un peu en dehors de mon domaine de connaissance, mais vérifiez les liens dans la réponse. Ils pourraient vous aider, et d'autres pourraient être en mesure d'élaborer. – tschaible

0

ici est un exemple

http://itextpdf.sourceforge.net/howtosign.html#signtsocspjava

vous devez remplacer

sap.setCrypto(null, chain, null, PdfSignatureAppearance.SELF_SIGNED); 

pour

sap.setCrypto(pk, chain, null, PdfSignatureAppearance.WINCER_SIGNED); 

et mettre ces version correcte de libs

- org.bouncycastle -> bcprov-jdk16 1.40 
- org.bouncycastle -> bctsp-jdk16 1.38 
+0

avertissement: vous utilisez la longue version obsolète itext 2 avec la chose Wincer_Signed depuis longtemps obsolète! –

Questions connexes