IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API, COM et SDKs Delphi Discussion :

Lire par programme une signature certifée dans un PDF


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 73
    Par défaut Lire par programme une signature certifée dans un PDF
    Bonjour,

    Les PDF signés (par l'intermédiaire d'une autorité légalement reconnue, genre GlobalSign etc.) ont une valeur juridique équivalente à celle d'une signature manuelle.
    Je trouve aisément de la documentation sur le processus de signature proprement dit, mais ce qui m'intéresse, c'est à l'autre bout de la chaîne : l'entreprise pour laquelle je travaille reçoit un PDF signé (une souscription à un contrat quelconque, pour faire simple) : à l'œil, avec Acrobat Reader, on voit qu'il est signé, tout est OK... Oui mais comment automatiser le processus ?

    Autrement dit, je voudrais savoir comment faire pour récupérer par programme les informations liées à la signature qui sont "incrustées" dans un PDF signé.
    C'est évidemment faisable (puisque la plupart des lecteurs un peu avancés de fichiers PDF le font), mais je ne vois pas du tout comment on peut y arriver avec Delphi (XE8). Il doit bien exister des toolkit, API ou que sais-je qui le permettent...
    Des gens ici ont-ils une expérience dans ce domaine ?

    Merci d'avance pour vos réponses,

    Paul Rambeaux

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 635
    Billets dans le blog
    65
    Par défaut
    Bonsoir,
    Marrant, moi c'est la partie amont qui me manque à savoir comment signer un PDF par programme (et bien évidement obtenir un certificat)

    Il doit bien exister des toolkit, API ou que sais-je qui le permettent...
    je n'ai pas fait l'expérience (par manque de PDF signé) dès que j'en ai un sous la main, je testerai avec PDFium

  3. #3
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    je ne sais pas comment sont signés les PDF, mais je suppose qu'il y a une balise qui contient un hash signé et la clé publique au format ASN1.0 (DER) qu'on peut décoder avec l'API WinCrypt et notamment CertCreateCertificateContext puis CertGetCertificateChain ... je suis en plein sur les signatures XML en ce moment
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 635
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    j'ai réussi à signer un PDF avec le composant TMS Cryptography. J'ai testé plusieurs méthodes CADES, PADES mais Adobe n'apprécie pas cette dernière
    De même, comme il s'agit d'un test, la signature autosignée CADES n'est pas reconnue par Adobe donc pas d'indication de signature

    J'ai aussi créé un document PDF signé via ADOBE Reader (évidemment, celui-là est reconnu )
    Je vais tâcher d'y voir plus clair avec ces trois types de documents (tout trois pouvant s'ouvrir avec le composant PDFium)

    Pour résumer tout va dépendre de la méthode utilisée, pour peu que le document ne soit pas en plus compressé
    CADES les informations se trouvent en fin de fichier après la chaine %%EOF
    PADES les informations se trouvent en fin de fichier entre deux chaines %%EOF

    pour la signature via Adobe je n'ai pas trouvé, étant donné qu'il y a une norme il va falloir fouiller dedans https://www.adobe.com/content/dam/ac...erence_1-7.pdf
    Sinon, il semblerait que cette bibliothèque puisse correspondre au besoin (sous réserve que ce soit pour Windows ou pour la pomme)

  5. #5
    Membre éclairé Avatar de delagoutte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 42
    Par défaut
    Pour tout ce qui est crypto,
    j'utilise les composants eldos, je n'ai pas eu l'occasion d'utiliser la partie concernant la signature pdf mais il y a ce qu'il faut pour ton besoin:
    https://www.secureblackbox.com/sbb/PDFBlackbox/

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 635
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Pour l'instant, j'ai utilisé du BABA pour le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    procedure TForm7.Button2Click(Sender: TObject);
    var F1 : TFileName;
        F : TextFile;
        ALine : String;
        SigFound : Boolean;
        ARegEx : TRegEx;
    begin
    if OpenDialog1.Execute then F1:=OpenDialog1.FileName;
    AssignFile(F,F1);
    FileMode := fmOpenRead;
    Reset(F);
    ARegEx:=TregEx.Create('.*Sig.*');
    SigFound:=False;
    repeat
       Readln(F,ALine);
       SigFound:=Aregex.IsMatch(ALine);
    until EOF(F) OR SigFound;
    CloseFile(F);
    if SigFound then Showmessage('Signé');
    end;
    cela fonctionne pour PADES mais, bien évidemment, dès qu'il y a compression ça


    une autre solution qui permet de "mieux" tester (Pades et AdobeSignature)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    function isSigned(AStream : TmemoryStream) : Boolean;
    var
        Buffer : Array [0..1023] of AnsiChar;
        i : Integer;
        TempStr : String;
    begin
    result:=False;
    AStream.Position:=0;
    while (AStream.Position < AStream.Size) OR sigFound do
      begin
        AStream.Read(Buffer, 1024);
        for I := Low(buffer) to High(buffer) do
         if buffer[i]=#0 then buffer[i]:=#144;
        TempStr:=Buffer;
        result:=pos('Sig',TempStr)>=0;
        if result then Break;
        if AStream.Position<AStream.Size then AStream.Position:=AStream.Position-5;
      end;
    end;

Discussions similaires

  1. Gérér par programme une icône dans la barre des tâches
    Par dmganges dans le forum Windows 7
    Réponses: 0
    Dernier message: 20/11/2018, 04h35
  2. Réponses: 2
    Dernier message: 13/03/2008, 16h33
  3. Comment modifier par programmation une form crée lors de l'execution
    Par Fab.asia dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 31/07/2007, 14h47
  4. Ajouter, par programme, un compte POP dans Outlook
    Par Fares BELHAOUAS dans le forum Outlook
    Réponses: 3
    Dernier message: 06/07/2007, 17h30
  5. Insérer par programmation une valeur dans une colonne d'un Datagrid.
    Par Jean_dick15 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 12/04/2007, 15h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo