none
Suppression de l'avertissement à l'installation

    Question

  • Bonjour à tous,

    Je souhaite diffuser un programme. Lors de l'installation, l'utilisateur (que je ne connais évidemment pas, et inversément) voit cet avertissement :

    Voulez-vous autoriser le programme suivant provenant d'un éditeur inconnu à apporter des modifications à cet ordinateur.

    Que faut-il faire pour devenir un éditeur connu, et que les utilisateurs ne voient plus ce message plutôt inquiétant ?

    Merci pour votre réponse.

    vendredi 11 mars 2011 09:42

Réponses

  • Le vendredi 11/03/2011 10:42:33, Pyanepsion a écrit dans le message <news:f7f273a1-ba60-4938-a9d4-cf89e635343f@communitybridge.codeplex.com> ce qui suit :

    Bonjour à tous,
    Je souhaite diffuser un programme. Lors de l'installation, l'utilisateur (que je ne connais évidemment pas, et inversément) voit cet avertissement :

    Voulez-vous autoriser le programme suivant provenant d'un éditeur inconnu à
    apporter des modifications à cet ordinateur. 

    Que faut-il faire pour devenir un éditeur connu, et que les utilisateurs ne voient plus ce message plutôt inquiétant ?

    Cela n'a rien d'inquiétant !
    C'est tout simplement parce que l'exécutable n'a pas été CERTIFIÉ.

    Donc, inversement, si on veut que ce message n'apparaisse pas, il faut et il suffit que l'exécutable soit authentifié par un CERTIFICAT  assurant que le logiciel provient d'un éditeur de logiciels.

    http://www.cijoint.fr/cj201103/cij7UaaCYh.jpg

    Dans mon cas, pour certifier les logiciels GRATUITS que je développe tels que "Superexec", vu que je n'avais vraiment pas l'intention d'acheter un tel certificat auprès de sociétés comme "Verisign", "Thawte", ... (c'est très onéreux, et de plus temporaire car il faut renouveler - et donc payer - périodiquement, ...), je suis passé par une "auto-certification".

    La différence par rapport à un certificat officiel est que par défaut Windows ne connaît pas l'éditeur (logique!), et donc affiche un avertissement en jaune - au lieu de rouge s'il n'y a pas de certificat du tout - qui demande si on fait confiance à cet éditeur (dans mon cas c'est "JCB-Softwares").

    On peut alors demander l'installation du certificat (qui sera alors "homologué" par Windows)

    http://www.cijoint.fr/cj201103/cijGJJpCka.jpg
     Afin de se prémunir contre une usurpation d'identité et/ou de certificat, il suffit de comparer la clef de hachage (= "empreinte numérique") du certificat
    http://www.cijoint.fr/cj201103/cijGlJ4t9b.jpg

    avec la clef publiée par ailleurs, p.ex. sur mon site ou encore ici :
       1494 3a78 05a3 1d30 2ad4 9635 01e0 79d9 826e 3421

    Microsoft a mis à disposition des développeurs des outils GRATUITS pour créer ces autocertificats avec lesquels on signera des exécutables.
    Ils s'appellent :
       makecert (le principal)
       cert2spc
       pvk2pfx
       signtool
       ...

    http://msdn.microsoft.com/fr-fr/library/dd233106.aspx

    J'ai créé un script VBS qui automatise la création d'un tel certificat (car la syntaxe des outils Microsoft n'est pas des plus conviviale!!)
     Fichier "CreateSEcert.vbs"
    On lui passe en paramètre le mot de passe que l'on veut attribuer au certificat.
    --------------- couper ici ---------------
    ' Script de création d'auto-certificat
    ' JC BELLAMY © 2011
    '
    Set Shell = WScript.CreateObject("WScript.Shell")
    Set args  = Wscript.Arguments
    Set fso=WScript.CreateObject("Scripting.FileSystemObject")
    nbargs=args.count
    if nbargs<1 then
        wscript.echo "Syntaxe :"
        wscript.echo "  CreateSECert <pwd>"
        wscript.quit
        end if
    root="xxxxxxxxxxxxxxxxxxxxx"
    ' on indique ci-dessus le dossier racine dans lequel
    ' seront placés tous les fichiers certificat et autres
    ' par exemple : root="d:\delphi\superexec\superexec"

    name="xxxxxxxxxxxxxxxx"
    ' on indique ci-dessus le nom (arbitraire) attribué
    ' au certificat
    ' par exemple : name="JCB-Softwares"

    pwd=args(0)
    EKU="1.3.6.1.5.5.7.3.3"
    URL="http://xxxxxxxxxxxxxxxxxxxx"
    ' on indique ci-dessus l'URL éventuel des clauses légales
    ' liées au certificat
    ' par exemple : URL="http://www.bellamyjc.org/fr/legal.html"

    NomCer=root & ".cer"
    NomPvk=root & ".pvk"
    NomSpc=root & ".spc"
    NomPfx=root & ".pfx"
    Set env=Shell.Environment("System")

    env.Item("xxxxxxxxxxxxx")
    ' on indique ci-dessus le nom de la variable d'environnement
    ' que l'on va créer et qui contiendra le nom du fichier PFX
    ' contenant le certificat
    ' par exemple : env.Item("CertifSuperExec")=NomPfx

    env.Item("PWD")=pwd
    If fso.FileExists(NomPvk) Then fso.DeleteFile NomPvk,true
    wscript.echo "Création fichier " & NomCer
    D1=Date
    D2=DateAdd("yyyy",100,D1)

    ' ATTENTION : la commande qui suit est très longue et a été
    ' tronçonnée en 4 lignes
    cmd="makecert -r -pe -a sha1 -n ""CN=" & name & """ -b " _
      & D1 & " -e " & D2 & " -eku " & EKU _
      & " -ss root -sr localMachine -sky signature -sv " _
      & NomPvk & " -$ individual -l " & URL & " " & nomcer
    wscript.echo "commande : " & cmd
    shell.Run cmd, SW_SHOWNORMAL
    Titre1="Création du mot de passe de clé privée"
    Titre2="Saisie du mot de passe de clé privée"
    While not shell.AppActivate(Titre1)
        WScript.Sleep 100
        Wend
    shell.SendKeys pwd
    shell.SendKeys "{TAB}"
    shell.SendKeys pwd
    shell.SendKeys "~"
    While not shell.AppActivate(Titre2)
        WScript.Sleep 100
        Wend
    shell.SendKeys pwd
    shell.SendKeys "~"
    WScript.Sleep 100
    wscript.echo "Création fichier " & NomSpc
    cmd="cert2spc " & NomCer & " " & NomSpc
    CodeRet=shell.Run(cmd, SW_SHOWNORMAL,true)
    wscript.echo "Code retour=" & CodeRet
    WScript.Sleep 100
    wscript.echo "Création fichier " & NomPfx
    cmd="pvk2pfx -pvk " & NomPvk & " -pi " & pwd & " -spc " & NomSpc & " -pfx " & NomPfx & " -po " & pwd & " -f"
    Coderet=shell.Run(cmd, SW_SHOWNORMAL, true)
    wscript.echo "Code retour=" & CodeRet
    wscript.quit
    --------------- couper ici ---------------

    Une fois que le script a été exécuté, on peut alors signer les exécutables que l'on veut, et là aussi j'ai créé un script pour faciliter la tâche :
     Fichier "certif.cmd"
    On lui passe en paramètre le fichier exécutable à certifier

    --------------- couper ici ---------------
    @echo off
    if not exist %1 goto fin
    set url=xxxxxxxxxxxxxxxxxxxx
    REM on indique ci-dessus l'URL éventuel de description
    REM du logiciel concerné
    REM par exemple : set url=http://www.bellamyjc.org/fr/superexec.html

    set t=http://timestamp.verisign.com/scripts/timstamp.dll
    REM on indique ci-dessus l'URL éventuel d'un site certificateur
    REM de la date de signature du logiciel
    REM J'ai choisi Verisign car il est toujours disponible
    REM et est gratuit pour cette fonctionnalité.

    signtool sign /f %xxxxxxxxxx% /p %PWD% /d yyyyyyyyy /du %url% /t %t% /v %1
    REM on indique ci-dessus :
    REM %xxxxxxxxxx% : le nom de la variable d'environnement créée
    REM    dans le script VBS et qui contient le nom du fichier PFX
    REM    contenant le certificat
    REM yyyyyyyyy    : un nom arbitraire attribué au logiciel
    REM par exemple  : signtool sign /f %CertifSuperExec% /p %PWD%
    REM                  /d SuperExec /du %url% /t %t% /v %1

    pause
    :fin
    --------------- couper ici ---------------

    Ouf !!!!
    Et bonne certification ...



    May the Force be with You!
    La Connaissance s'accroît quand on la partage
    ----------------------------------------------------------
    Jean-Claude BELLAMY [MVP Expert IT Pro]
    http://www.bellamyjc.org  ou http://jc.bellamy.free.fr

    vendredi 11 mars 2011 13:17

Toutes les réponses

  • Bonjour,

    Peut-être un fichier .manifest ?
    http://msdn.microsoft.com/en-us/library/aa375632(v=VS.85).aspx


    Cordialement
    Aski MVP Desktop Experience - Forum_Aski
    vendredi 11 mars 2011 10:49
    Modérateur
  • Le vendredi 11/03/2011 10:42:33, Pyanepsion a écrit dans le message <news:f7f273a1-ba60-4938-a9d4-cf89e635343f@communitybridge.codeplex.com> ce qui suit :

    Bonjour à tous,
    Je souhaite diffuser un programme. Lors de l'installation, l'utilisateur (que je ne connais évidemment pas, et inversément) voit cet avertissement :

    Voulez-vous autoriser le programme suivant provenant d'un éditeur inconnu à
    apporter des modifications à cet ordinateur. 

    Que faut-il faire pour devenir un éditeur connu, et que les utilisateurs ne voient plus ce message plutôt inquiétant ?

    Cela n'a rien d'inquiétant !
    C'est tout simplement parce que l'exécutable n'a pas été CERTIFIÉ.

    Donc, inversement, si on veut que ce message n'apparaisse pas, il faut et il suffit que l'exécutable soit authentifié par un CERTIFICAT  assurant que le logiciel provient d'un éditeur de logiciels.

    http://www.cijoint.fr/cj201103/cij7UaaCYh.jpg

    Dans mon cas, pour certifier les logiciels GRATUITS que je développe tels que "Superexec", vu que je n'avais vraiment pas l'intention d'acheter un tel certificat auprès de sociétés comme "Verisign", "Thawte", ... (c'est très onéreux, et de plus temporaire car il faut renouveler - et donc payer - périodiquement, ...), je suis passé par une "auto-certification".

    La différence par rapport à un certificat officiel est que par défaut Windows ne connaît pas l'éditeur (logique!), et donc affiche un avertissement en jaune - au lieu de rouge s'il n'y a pas de certificat du tout - qui demande si on fait confiance à cet éditeur (dans mon cas c'est "JCB-Softwares").

    On peut alors demander l'installation du certificat (qui sera alors "homologué" par Windows)

    http://www.cijoint.fr/cj201103/cijGJJpCka.jpg
     Afin de se prémunir contre une usurpation d'identité et/ou de certificat, il suffit de comparer la clef de hachage (= "empreinte numérique") du certificat
    http://www.cijoint.fr/cj201103/cijGlJ4t9b.jpg

    avec la clef publiée par ailleurs, p.ex. sur mon site ou encore ici :
       1494 3a78 05a3 1d30 2ad4 9635 01e0 79d9 826e 3421

    Microsoft a mis à disposition des développeurs des outils GRATUITS pour créer ces autocertificats avec lesquels on signera des exécutables.
    Ils s'appellent :
       makecert (le principal)
       cert2spc
       pvk2pfx
       signtool
       ...

    http://msdn.microsoft.com/fr-fr/library/dd233106.aspx

    J'ai créé un script VBS qui automatise la création d'un tel certificat (car la syntaxe des outils Microsoft n'est pas des plus conviviale!!)
     Fichier "CreateSEcert.vbs"
    On lui passe en paramètre le mot de passe que l'on veut attribuer au certificat.
    --------------- couper ici ---------------
    ' Script de création d'auto-certificat
    ' JC BELLAMY © 2011
    '
    Set Shell = WScript.CreateObject("WScript.Shell")
    Set args  = Wscript.Arguments
    Set fso=WScript.CreateObject("Scripting.FileSystemObject")
    nbargs=args.count
    if nbargs<1 then
        wscript.echo "Syntaxe :"
        wscript.echo "  CreateSECert <pwd>"
        wscript.quit
        end if
    root="xxxxxxxxxxxxxxxxxxxxx"
    ' on indique ci-dessus le dossier racine dans lequel
    ' seront placés tous les fichiers certificat et autres
    ' par exemple : root="d:\delphi\superexec\superexec"

    name="xxxxxxxxxxxxxxxx"
    ' on indique ci-dessus le nom (arbitraire) attribué
    ' au certificat
    ' par exemple : name="JCB-Softwares"

    pwd=args(0)
    EKU="1.3.6.1.5.5.7.3.3"
    URL="http://xxxxxxxxxxxxxxxxxxxx"
    ' on indique ci-dessus l'URL éventuel des clauses légales
    ' liées au certificat
    ' par exemple : URL="http://www.bellamyjc.org/fr/legal.html"

    NomCer=root & ".cer"
    NomPvk=root & ".pvk"
    NomSpc=root & ".spc"
    NomPfx=root & ".pfx"
    Set env=Shell.Environment("System")

    env.Item("xxxxxxxxxxxxx")
    ' on indique ci-dessus le nom de la variable d'environnement
    ' que l'on va créer et qui contiendra le nom du fichier PFX
    ' contenant le certificat
    ' par exemple : env.Item("CertifSuperExec")=NomPfx

    env.Item("PWD")=pwd
    If fso.FileExists(NomPvk) Then fso.DeleteFile NomPvk,true
    wscript.echo "Création fichier " & NomCer
    D1=Date
    D2=DateAdd("yyyy",100,D1)

    ' ATTENTION : la commande qui suit est très longue et a été
    ' tronçonnée en 4 lignes
    cmd="makecert -r -pe -a sha1 -n ""CN=" & name & """ -b " _
      & D1 & " -e " & D2 & " -eku " & EKU _
      & " -ss root -sr localMachine -sky signature -sv " _
      & NomPvk & " -$ individual -l " & URL & " " & nomcer
    wscript.echo "commande : " & cmd
    shell.Run cmd, SW_SHOWNORMAL
    Titre1="Création du mot de passe de clé privée"
    Titre2="Saisie du mot de passe de clé privée"
    While not shell.AppActivate(Titre1)
        WScript.Sleep 100
        Wend
    shell.SendKeys pwd
    shell.SendKeys "{TAB}"
    shell.SendKeys pwd
    shell.SendKeys "~"
    While not shell.AppActivate(Titre2)
        WScript.Sleep 100
        Wend
    shell.SendKeys pwd
    shell.SendKeys "~"
    WScript.Sleep 100
    wscript.echo "Création fichier " & NomSpc
    cmd="cert2spc " & NomCer & " " & NomSpc
    CodeRet=shell.Run(cmd, SW_SHOWNORMAL,true)
    wscript.echo "Code retour=" & CodeRet
    WScript.Sleep 100
    wscript.echo "Création fichier " & NomPfx
    cmd="pvk2pfx -pvk " & NomPvk & " -pi " & pwd & " -spc " & NomSpc & " -pfx " & NomPfx & " -po " & pwd & " -f"
    Coderet=shell.Run(cmd, SW_SHOWNORMAL, true)
    wscript.echo "Code retour=" & CodeRet
    wscript.quit
    --------------- couper ici ---------------

    Une fois que le script a été exécuté, on peut alors signer les exécutables que l'on veut, et là aussi j'ai créé un script pour faciliter la tâche :
     Fichier "certif.cmd"
    On lui passe en paramètre le fichier exécutable à certifier

    --------------- couper ici ---------------
    @echo off
    if not exist %1 goto fin
    set url=xxxxxxxxxxxxxxxxxxxx
    REM on indique ci-dessus l'URL éventuel de description
    REM du logiciel concerné
    REM par exemple : set url=http://www.bellamyjc.org/fr/superexec.html

    set t=http://timestamp.verisign.com/scripts/timstamp.dll
    REM on indique ci-dessus l'URL éventuel d'un site certificateur
    REM de la date de signature du logiciel
    REM J'ai choisi Verisign car il est toujours disponible
    REM et est gratuit pour cette fonctionnalité.

    signtool sign /f %xxxxxxxxxx% /p %PWD% /d yyyyyyyyy /du %url% /t %t% /v %1
    REM on indique ci-dessus :
    REM %xxxxxxxxxx% : le nom de la variable d'environnement créée
    REM    dans le script VBS et qui contient le nom du fichier PFX
    REM    contenant le certificat
    REM yyyyyyyyy    : un nom arbitraire attribué au logiciel
    REM par exemple  : signtool sign /f %CertifSuperExec% /p %PWD%
    REM                  /d SuperExec /du %url% /t %t% /v %1

    pause
    :fin
    --------------- couper ici ---------------

    Ouf !!!!
    Et bonne certification ...



    May the Force be with You!
    La Connaissance s'accroît quand on la partage
    ----------------------------------------------------------
    Jean-Claude BELLAMY [MVP Expert IT Pro]
    http://www.bellamyjc.org  ou http://jc.bellamy.free.fr

    vendredi 11 mars 2011 13:17
  • Le vendredi 11/03/2011 11:49:27, Aski. _ [MVP] a écrit dans le message <news:dfe7749a-d9aa-4b01-8e83-0741b27d4044@communitybridge.codeplex.com> ce qui suit :

    Bonjour,

    Peut-être un fichier .manifest ?
    http://msdn.microsoft.com/en-us/library/aa375632(v=VS.85).aspx

    Non, cela n'a rien à voir !
    Un fichier .manifest est un fichier XML qui permet de définir la plate-forme et surtout, depuis VISTA et UAC, le niveau de privilèges requis.
    P.ex. :
      ...
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
           <requestedPrivileges>
               <requestedExecutionLevel level="requireAdministrator"/>
           </requestedPrivileges>
        </security>
      </trustInfo>
      ...
     Ce qu'il faut ici, c'est que l'exécutable soit SIGNÉ par un certificat.

    cf. ma (longue) réponse postée précédemment



    May the Force be with You!
    La Connaissance s'accroît quand on la partage
    ----------------------------------------------------------
    Jean-Claude BELLAMY [MVP Expert IT Pro]
    http://www.bellamyjc.org  ou http://jc.bellamy.free.fr

    vendredi 11 mars 2011 13:25
  • > Non, cela n'a rien à voir !
    > Ce qu'il faut ici, c'est que l'exécutable soit SIGNÉ par un certificat.

    Merci pour le script.
    Je viens de le tester sur un exemple que je joins dans le zip.
    http://www.cijoint.fr/cjlink.php?file=cj201103/cijsd8fpNX.zip

    Si j'ai bien interprété tes indications, il y ait une erreur déclenchée par la commande
    shell.Run cmd, SW_SHOWNORMAL
    Pourtant cmd semble correct dans le première capture.
    Le fichier spécifié est déclaré introuvable.

    Le dossier M:\Docs\Certificats existe bien !

    Ai-je raté une étape ?


    Cordialement
    Aski MVP Desktop Experience - Forum_Aski
    vendredi 11 mars 2011 16:55
    Modérateur
  • Bonjour,

    L'erreur Le fichier spécifié est déclaré introuvable concernait l'exécutable makecert.exe

    Ce fichier, de même que cert2spc.exe, pvk2fx.exe et signtool peuvent être copiés dans Microsoft Windows SDk v.7.1 disponible au téléchargement à partir de cette page
    http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx

    Ces exécutables sont à copier dans un dossier figurant dans le PATH.


    Cordialement
    Aski - MVP Windows Expert-Consumer
    Forum_Aski
    mercredi 11 mai 2011 15:00
    Modérateur
  • Bonjour,

    J'espère qu'il y a encore quelqu'un dans les parages ...

    J'ai le même problème que "Pynepsion" et j'essaye de le résoudre avec ce qui semble être une excellente solution de "Jean-Claude BELLAMY" (merci d'ailleurs!). Je ne suis vraiment pas un expert en VBS, par contre il me semble avoir trouvé une erreur ici :

    NomCer=root & ".cer"
    NomPvk=root & ".pvk"
    NomSpc=root & ".spc"
    NomPfx=root & ".pfx"


    je suppose qu'il faudrait que le nom du certificat y figure : 

    NomCer=root & name & ".cer"
    NomPvk=root & name & ".pvk"
    NomSpc=root & name & ".spc"
    NomPfx=root & name & ".pfx"

    Ensuite il y a un piège à cette ligne :

    env.Item("xxxxxxxxxxxxx")
    ' on indique ci-dessus le nom de la variable d'environnement
    ' que l'on va créer et qui contiendra le nom du fichier PFX
    ' contenant le certificat
    ' par exemple : env.Item("CertifSuperExec")=NomPfx

    la 1ère ligne qu'il faut adapter doit avoir un "=NomPfx" à la fin non ?

    Finalement, et la raison de mon commentaire, j'ai une boucle infinie ici :

    Titre1="Création du mot de passe de clé privée"
    Titre2="Saisie du mot de passe de clé privée"
    While not shell.AppActivate(Titre1)
        WScript.Sleep 100
        Wend
    shell.SendKeys pwd
    shell.SendKeys "{TAB}"
    shell.SendKeys pwd
    shell.SendKeys "~"
    While not shell.AppActivate(Titre2)
        WScript.Sleep 100
        Wend
    shell.SendKeys pwd
    shell.SendKeys "~"
    WScript.Sleep 100

    Je dois avouer que je ne comprends pas ce code ... mais est-ce qu'il ne faudrait pas que "Titre1" et "Titre2" contiennent des informations sur le programme qui doit être lancé ??

    Merci d'avance !

    mardi 27 mars 2012 08:14
  • 2017 et sujet encore plus d'actualité avec l'arrivée de Windows 10 ! 

    Et pour ne pas baisser le niveau de sécurité (car UAC USer Account Control  very important  très important ! Contrôle de compte utilisateur CCU) 

    Merci Jean-Claude ! 

    script VBS contenant des erreurs en 2011 et cijoint n'existe plus 

    dimanche 27 août 2017 16:30