| | | | |
| |||||||
| PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen |
|
| | LinkBack | Themen-Optionen | Thema bewerten |
| | |
| Benutzer Registriert seit: 16.01.2004
Beiträge: 54
![]() | hallo leute, wer mails digital signieren will kann einfach das script das ich weiter oben gepostet habe verwenden. man braucht dazu eigentlich nur ein fortgeschrittenes software zertifikat (für aut zbsp.: erhältlich bei www.a-cert.at) für € 120,- gültig für 5 Jahre. nun aber zum eigentlich problem ein: pdf signieren mit fortgeschrittenem zertifikat. hab für php keine lösung gefunden, allerdings gibts auf http://itextpdf.sourceforge.net/howtosign.html ein tut mit dem das relativ einfach geht. nötig dazu ist nur noch eine java lib (freeware) die sogenannte itext erhältlich unter http://www.lowagie.com/iText/. mit diese lib hab ich mir einfach eine server/client app geschrieben die mir das pdf unterschreibt. über php rufe ich lediglich den client auf und übergebe im den namen und den ort des zu unterschreibenden pdf's und fertig. vielleicht hilfts ja jemanden! so long zcmaster |
| | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Benutzer Registriert seit: 16.01.2004
Beiträge: 54
![]() | hi udo, so läuft der hase nicht, du mußt schließlich ein software-cert in die anwendung einbauen aus dem die signatur erstellt wird. mittels der itext lib wird danach die signatur in das pdf eingebettet. ausserdem ist java nicht so schwer wie es am ersten blick aussieht. am besten du sammelst erst mal erfahrung mit java dann liest du mal einiges über signaturen nach und dann codest du dir mit hilfe der beispiele unter http://itextpdf.sourceforge.net/howtosign.html deine java-app welches dir über die shell dein pdf signiert. um das von mir implementierte tool einzusetzen müßte ich dieses so umbauen das als paramter das cert-file, key-file, passphrase und das pdf-file übergeben werden kann. und irgendwie hab ich nicht die lust und zeit dies zu tun. schließlich lernt man am meisten wenn man es selber ausprobiert. versuchmal so, hab das mal gefunden, is doch echt einfach oder? Code: import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.*;
import java.io.*;
import java.security.*;
import java.util.Enumeration;
public class Main
{
public Main()
{
}
public static void main(String args[])
{
String s = "input.pdf";
String s1 = "output.pdf";
String s2 = "cert.pfx";
try
{
for(int i = 0; i < args.length; i++)
{
if(args[i].toLowerCase().equals("-in") && args[i + 1] != null)
s = args[i + 1];
if(args[i].toLowerCase().equals("-out") && args[i + 1] != null)
s1 = args[i + 1];
if(args[i].toLowerCase().equals("-pfx") && args[i + 1] != null)
s2 = args[i + 1];
}
}
catch(Exception exception)
{
System.out.println("Usage: command -in input.pdf -out output.pdf -key key.pfx");
}
sign(s, s1, s2);
}
public static void sign(String s, String s1, String s2)
{
try
{
KeyStore keystore = KeyStore.getInstance("pkcs12");
keystore.load(new FileInputStream(s2), "PASSPHRASE".toCharArray());
String s3 = (String)keystore.aliases().nextElement();
PrivateKey privatekey = (PrivateKey)keystore.getKey(s3, "PASSPHRASE".toCharArray());
java.security.cert.Certificate acertificate[] = keystore.getCertificateChain(s3);
PdfReader pdfreader = new PdfReader(s);
FileOutputStream fileoutputstream = new FileOutputStream(s1);
PdfStamper pdfstamper = PdfStamper.createSignature(pdfreader, fileoutputstream, '\0');
PdfSignatureAppearance pdfsignatureappearance = pdfstamper.getSignatureAppearance();
pdfsignatureappearance.setCrypto(privatekey, acertificate, null, PdfSignatureAppearance.WINCER_SIGNED);
pdfsignatureappearance.setContact("NAME");
pdfsignatureappearance.setLocation("ORT");
pdfsignatureappearance.setVisibleSignature(new Rectangle(450F, 60F, 650F, 80F), 1, null);
pdfsignatureappearance.setExternalDigest(new byte[128], new byte[20], "RSA");
pdfsignatureappearance.preClose();
MessageDigest messagedigest = MessageDigest.getInstance("SHA1");
byte abyte0[] = new byte[8192];
InputStream inputstream = pdfsignatureappearance.getRangeStream();
int i;
while((i = inputstream.read(abyte0)) > 0)
messagedigest.update(abyte0, 0, i);
byte abyte1[] = messagedigest.digest();
PdfPKCS7 pdfpkcs7 = pdfsignatureappearance.getSigStandard().getSigner();
Signature signature = Signature.getInstance("SHA1withRSA");
signature.initSign(privatekey);
signature.update(abyte1);
pdfpkcs7.setExternalDigest(signature.sign(), abyte1, "RSA");
PdfDictionary pdfdictionary = new PdfDictionary();
pdfdictionary.put(PdfName.CONTENTS, (new PdfString(pdfpkcs7.getEncodedPKCS7())).setHexWriting(true));
pdfsignatureappearance.close(pdfdictionary);
}
catch(Exception exception)
{
System.out.println("KeyStoreException aufgetreten.");
exception.printStackTrace();
}
}
}
|
| | |
| | ||
| Neuer Benutzer Registriert seit: 19.06.2006
Beiträge: 3
![]() | Hi zcmaster, großartig! Vielen Dank! Das erspart mir ne Menge Arbeit. Darf ich deinen Code in einer OS Software einsetzen ( http://www.lx-office.org ) unter der Gnu-GPL? Zitat:
einfach und intuitiv. Ich hätt wahrscheinlich Wochen gebraucht, um soetwas zustande zu bekommen und Java dannach nie wieder angefasst...Vielen dank nochmal Schöne Grüße Udo | |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| GnuPG E-Mails signieren. | greenrover | PHP-Fortgeschrittene | 3 | 09.12.2005 23:43 |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| pdf signatur freeware, php pdf signieren, pdf unterschreiben freeware, pdf signieren freeware, pdf signatur perl, php sign pdf, itext signatur, app pdf unterschreiben, pdf signatur java, pdfsignatureappearance, perl pdf signieren, php pdf signatur, itext pdf signieren, sign pdf php, pdf rsa signierung, pdf signatur server freeware, pdf unterschreiben, php sign pdf document, pdf signieren mit itext, search rectangle in pdf itextpdf sign |

Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.