J'ai essayé de me faire à l'idée que Certificats Authenticode depuis une semaine maintenant. J'ai acheté un CSC chez Comodo et j'ai une application ClickOnce que j'aimerais signer pour que les avertissements du filtre SmartScreen disparaissent.
L'assemblage de mon application porte un nom fort et j'ai coché la case "Signer l'assemblage" dans les propriétés de mon projet. J'ai également coché la case " Signer le manifeste ClickOnce " dans les mêmes propriétés du projet. Enfin, j'ai configuré les exécutions suivantes comme cibles AfterCompile dans mon fichier de projet, afin de signer l'exécutable à la fois avec SHA1 et SHA256 :
<Target Name="AfterCompile">
<Exec Command=""C:\Program Files (x86)\Windows Kits\8.1\bin\x64\signtool.exe" sign /f "$(ProjectDir)certificate.pfx" /p mypassword /t http://timestamp.comodoca.com /v "$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)"" />
<Exec Command=""C:\Program Files (x86)\Windows Kits\8.1\bin\x64\signtool.exe" sign /f "$(ProjectDir)certificate.pfx" /p mypassword /fd sha256 /tr http://timestamp.comodoca.com/?td=sha256 /td sha256 /as /v "$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)"" />
</Target>
Ensuite, je lance la commande suivante pour publier le projet :
" C:\Program Fichiers (x86) \MSBuild\14.0\Bin\MSBuild.exe " /target:Publish /p:Configuration=Release /p:Platform=AnyCPU MyCoolApplication.csproj
Ce que j'ai remarqué, c'est que cette commande crée finalement trois versions distinctes de MyCoolApplication.exe :
- Il construit une copie dans le bac \Release qui est non signée
- Il construit une autre copie dans obj \Release qui est doublement signé
- Il construit une copie finale dans le bac \Release\app.publish qui n'est signée qu'une seule fois et à laquelle il manque un horodatage.
Malheureusement, c'est la copie dans la poubelle \Release\app.publish qui doit fonctionner, mais pour une raison quelconque, cette version supprime la double signature. D'après ce que j'ai compris - qui peut être erroné -, les choses étaient construites dans obj. \Release et les a copiés dans la poubelle \Release\app.publish et a ensuite signé le manifeste. Cependant, il est clair que quelque chose d'autre se passe, car la signature numérique sur l'exécutable final est clairement modifiée. Voici les propriétés de ces deux fichiers côte à côte :
Le problème avec la version finale à signature unique et horodatage manquant est que l'application est toujours signalée par le filtre SmartScreen, ce qui rend l'ensemble du processus inutile. Comment puis-je résoudre ce problème ?
UPDATE : Après avoir lu ce guide Si j'ai signé correctement, il semble que même si je signe les documents, je risque de me heurter au filtre SmartScreen parce que ma "réputation" n'est pas suffisante pour mon application. Cependant, j'aimerais confirmer que j'ai bien signé les choses et que je ne suis pas en train de m'enfuir. (Ou si c'est le signe d'une défaillance dans le processus de construction, je veux y remédier).
EDITAR: Voici la fin de la sortie de MSBuild.exe, que @CodeFuller a demandé :
Après la compilation :
"signtool.exe" sign /f "certificate.pfx" /p mypassword /t http://timestamp.comodoca.com /v "MyCoolApplication \obj\Release\MyCoolApplication.exe "
Le certificat suivant a été sélectionné :
...
Terminé Ajout d'un magasin supplémentaire
Signé avec succès : MyCoolApplication \obj\Release\MyCoolApplication.exe
Nombre de fichiers signés avec succès : 1
Nombre d'avertissements : 0
Nombre d'erreurs : 0
"signtool.exe" sign /f "MyCoolApp lication \certificate.pfx " /p monmotdepasse /fd sha256 /tr http://timestamp.comodoca.com/?td=sha256 /td sha256 /as /v "MyCoolApplication \obj\Release\MyCoolApplication.exe "
Le certificat suivant a été sélectionné :
...
Terminé Ajout d'un magasin supplémentaire
Signé avec succès : MyCoolApplication \obj\Release\MyCoolApplication.exe
Nombre de fichiers signés avec succès : 1
Nombre d'avertissements : 0
Nombre d'erreurs : 0
_DeploymentComputeClickOnceManifestInfo :
Création du répertoire "bin \Release\app.publish ".
Copie du fichier de "obj \Release\MyCoolApplication.exe "à "bin \Release\app.publish\MyCoolApplication.exe ".
_CopyAppConfigFile :
Copie du fichier de "App.config" à "bin". \Release\MyCoolApplication.exe.config ".
_CopyManifestFiles :
Copie du fichier de "obj \Release\MyCoolApplication.exe.manifest "à "bin \Release\MyCoolApplication.exe.manifest ".
MonApplicationCool -> C:\Users\Gordon\Documents\Visual Studio 2015 \Projects\MyCoolApplication\MyCoolApplication\bin\Release\MyCoolApplication.exe.manifest
Copie du fichier de "obj \Release\MyCoolApplication.application "à "bin \Release\MyCoolApplication.application ".
MonApplicationCool -> C:\Users\Gordon\Documents\Visual Studio 2015 \Projects\MyCoolApplication\MyCoolApplication\bin\Release\MyCoolApplication.application
Copier les fichiers dans le répertoire de sortie :
Copie du fichier de "obj \Release\MyCoolApplication.exe "à "bin \Release\MyCoolApplication.exe ".
MonApplicationCool -> C:\Users\Gordon\Documents\Visual Studio 2015 \Projects\MyCoolApplication\MyCoolApplication\bin\Release\MyCoolApplication.exe
Copie du fichier de "obj \Release\MyCoolApplication.pdb "à "bin \Release\MyCoolApplication.pdb ".
_CopyFilesToPublishFolder :
Création du répertoire "bin \Release\app.publish\Application Fichiers \MyCoolApplication_1_0_0_0 ".
Copie du fichier de "bin \Release\MyCoolApplication.exe.manifest "à "bin \Release\app.publish\Application Fichiers \MyCoolApplication_1_0_0_0\MyCoolApplication.exe.manifest ". Copie du fichier de "bin \Release\app.publish\MyCoolApplication.exe "à "bin \Release\app.publish\Application Fichiers \MyCoolApplication_1_0_0_0\MyCoolApplication.exe.deploy ". Copie du fichier de "App.config" vers "bin \Release\app.publish\Application Fichiers \MyCoolApplication_1_0_0_0\MyCoolApplication.exe.config.deploy ". Copie du fichier "triforce.ico" vers "bin". \Release\app.publish\Application Fichiers \MyCoolApplication_1_0_0_0\triforce.ico.deploy ". Projet de construction terminé " C:\Users\Gordon\Documents\Visual Studio 2015 \Projects\MyCoolApplication\MyCoolApplication\MyCoolApplication.csproj " (Publier la ou les cibles).
Construction réussie. 0 Avertissement(s) 0 erreur(s)
Temps écoulé 00:00:06.53