php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 19.12.2005, 09:47  
Benutzer
 
Registriert seit: 16.01.2004
Beiträge: 54
zcmaster
Standard

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
zcmaster ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 19.06.2006, 13:11  
Neuer Benutzer
 
Registriert seit: 19.06.2006
Beiträge: 3
udono
Standard Magst du dein Skript posten?

Hi zcmaster,

bin auf der Suche nach einer Perl Implementierung von itextpdf, leider bin ich nicht fündig geworden...
Magst du dein Skript posten, vielleicht finde ich ja einen Ansatz den ich brauchen kann, weil von Java hab ich überhaupt keine Ahnung...

Viele Grüße udo
udono ist offline   Mit Zitat antworten
Alt 19.06.2006, 14:44  
Benutzer
 
Registriert seit: 16.01.2004
Beiträge: 54
zcmaster
Standard

hi udo,

meinst du das script zum e-mail signieren oder um pdf's zu signieren.

wenn du pdf's signieren willst wirst du um java nicht herumkommen.

zcmaster
zcmaster ist offline   Mit Zitat antworten
Alt 20.06.2006, 11:04  
Neuer Benutzer
 
Registriert seit: 19.06.2006
Beiträge: 3
udono
Standard

hi zcmaster,
ich meine das Teil um pdfs zu signieren. Vielleicht kann ich mir aus deinem Server ohne Java Kenntnisse ein Kommandozeilentool zurecht frickeln, oder einen perl client dafür bauen...

Schöne Grüße Udo
udono ist offline   Mit Zitat antworten
Alt 20.06.2006, 12:00  
Benutzer
 
Registriert seit: 16.01.2004
Beiträge: 54
zcmaster
Standard

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();
        }
    }
}
grüße zcmaster
zcmaster ist offline   Mit Zitat antworten
Alt 20.06.2006, 12:43  
Neuer Benutzer
 
Registriert seit: 19.06.2006
Beiträge: 3
udono
Standard

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:
Zitat von zcmaster
versuchmal so, hab das mal gefunden, is doch echt einfach oder?
Dein Skript liest sich wie die heilige Schrift 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
udono ist offline   Mit Zitat antworten
Alt 20.06.2006, 13:06  
Benutzer
 
Registriert seit: 16.01.2004
Beiträge: 54
zcmaster
Standard

hi udo,

dann viel spaß.

wie gesagt das prog. ist nicht von mir, hab das mal in netz gefunden.
aber nachdem ich mir meine eigen app für den server geschrieben habe.

der wesentliche teil darin (code für die signatur ist eigentlich gleich wie unter der url). die anpassung an die kommando zeile ist easy.

solong zcmaster
zcmaster ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ä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

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:46 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.