Signature d'Assembly avec Certificat Authenticode

Depuis Windows Vista, une application qui n'est pas signée, téléchargée sur le Web, provoquera une alerte de sécurité.

Cela pénalise votre application car l'utilisateur aura une alerte de sécurité de la part de Windows. Politique de Microsoft pour relancer la vente de Certificats comme certains le prétendent ou simplement volonté de l'éditeur de renforcer la sécurité au maximum... Il est préférable de signer vos applications avec un certificat.

1) Obtenir un certificat

Pour cela vous devrez vous tourner vers un organisme tel Verisign, GlobalSign, Comodo...
La plupart des organismes proposent des tarifs très avantageux (à partir de 100$ / an) si vous souhaitez un certificat à titre individuel. Pour une entreprise en revanche il faudra sortir un peu plus. De 200$ à 500$ pour une année, des remises sont proposées pour la souscription sur 2 ou 3 ans.

Après avoir choisi une authorité de certification, vous devrez compléter un formulaire en ligne et fournir un maximum d'informations sur votre identité ou celle de votre entreprise. Adresse, numéro de téléphone, numéro d'inscription au RCS, numéro de TVA, etc... Vous devrez choisir un mot de passe pour votre compte et aussi pour votre certificat. A ne pas perdre ! Vraiment pas, à moins de vouloir griller votre certificat. Même si généralement, les organismes vous permettent de recréer un certificat en cas d'oublis, il ne le feront pas forcément 10 fois de suite.

L'organisme que vous solliciterez prendra quelques jours (3 à 7) pour vérifier votre identité. Ils sont cette obligation bien évidemment.

Pour un particulier, vous devrez adresser des documents justifiant qui vous êtes : Passeport, carte d'Identité, Permis de Conduire etc...

Pour une entreprise, il y aura forcément une prise de contact par téléphone et vous devrez fournir un numéro de téléphone référencés dans un annuaire public (pages jaunes par exemple...), sinon une facture de téléphone stipulant votre numéro, les coordonnées de l'entreprise sera demandé. Et sinon enfin, si vous ne pouvez pas justifier de ce numéro de téléphone, un courrier d'un "homme de loi" (avocat, huissier, comptable...) attestant que le numéro vous appartient sera aussi demandé.

Les vérifications réalisées, vous pourrez télécharger le certificat PFX sur le site Web de l'organisme sélectionné. Vous devrez vous rappeler de vos mots de passe !

2) Utilisation du certificat

Le certificat pfx désormais copié sur votre ordinateur, vous pouvez l'utiliser pour signer vos Assemblies. Et pour cela vous aurez besoin de l'utilisateir signtool.exe de Microsoft. Si cet utilitaire a été distribué avec plusieurs éditions de Visual Studio, dans les dernières versions depuis la 2008, ce n'est plus le cas ! Et il est donc probable que signtool.exe soit absent de votre ordinateur. Vous devrez dans ce cas télécharger le SDK Windows ici et procéder à l'installation des utilitaires .NET. Vous voilà équipé de l'indispensable !

Vous pouvez signer votre application en ligne de commandes MS-DOS :
[CheminVersSigntool]\signtool.exe sign /t [UrlTimeStamp] /f [CheminVersCertificatPFX] /p [MotDePasseCertificatPFX] [CheminAssemblyASigner]
exemple :
"c:\program files\microsoft sdks\windows\v7.1\bin\signtool.exe" sign /t http://timestamp.globalsign.com/scripts/timestamp.dll  /f "c:\certificats\124ARI.pfx" /p password "c:\projets\MonProjet\bin\Release\MonProgramme.exe"

L'URL de serveur Time Stamp permet de dater la signature. C'est un horodatage indispensable.

On peut signer de cette façon, EXE, DLL, SETUP...

3) Signature automatique pendant le Build avec Visual Studio 2010

Il est possible de faire procéder à la signature des programmes générés pendant la compilation avec Visual Studio. Cela vous assurera de ne jamais oublier de signer les assemblys qui doivent l'être.

Pour un projet (DLL, EXE autre) :
Dans l'Explorateur de Solutions, clic Droit sur le projet concerné et clic sur Propriétés.
Dans le menu de gauche de la fenêtre ouverte, cliquez sur Signature et décochez []Signer les manigestes ClickOnce.
Dans le menu de gauche, cliquez sur Evénements de build et ajoutez dans la zone de texte Ligne de commande de l'événement Post-Build la ligne de commande vu précédemment en (2) en l'adaptant un peu :
[CheminVersSigntool]\signtool.exe sign /t [UrlTimeStamp] /f [CheminVersCertificatPFX] /p [MotDePasseCertificatPFX] "$(TargetPath)"
exemple :
"c:\program files\microsoft sdks\windows\v7.1\bin\signtool.exe" sign /t http://timestamp.globalsign.com/scripts/timestamp.dll  /f "c:\certificats\124ARI.pfx" /p password "$(TargetPath)"

A chaque compilation, votre fichier de sortie sera signé.

Pour un projet de SETUP :
Dans l'Explorateur de Solutions, clic gauche sur le projet de Setup. Dans les Propriétés du projet (fenêtre de propriétés traditionnelle), vous verrez le paramètre PreBuildEvent. Cliquez sur le bouton ... pour faire apparaître une fenêtre de saisie acceptable et saisir comme précédemment, l'instruction de signature un peu adaptée :
[CheminVersSigntool]\signtool.exe sign /t [UrlTimeStamp] /f [CheminVersCertificatPFX] /p [MotDePasseCertificatPFX] /d "Description obligatoire - (c)MonEntreprise" "$(BuiltOuputPath)"   (et oui c'est bien BuiltOuputPath avec Ouput et non pas Output !)
exemple :
"c:\program files\microsoft sdks\windows\v7.1\bin\signtool.exe" sign /t http://timestamp.globalsign.com/scripts/timestamp.dll  /f "c:\certificats\124ARI.pfx" /p password /d "Description obligatoire - (c)MonEntreprise" "$(BuiltOuputPath)"

Le /d "description" est nécessaire pour le setup, sans quoi votre setup afficherait un nom aléatoire au moment de l'installation et ce ne sera pas très appréciable.

4) Conclusion

Il est finalement simple de générer des applications signées authentifiées et donc d'apporter plus de sécurité aux utilisateurs. Cela a un coût, mais si vous distribuez des applications vous n'avez plus vraiment la possibilité de vous passer de ces certificats qui permettent simplement à un utilisateur de votre application d'avoir la quasi certitude que vous en êtes bien l'auteur. Si cela peut sembler inutile, en y réfléchissant bien, c'est plutôt très pratique.

A propos de l'auteur

 

Développeur depuis plus de 10 ans, j'ai commencé la programmation dès l'âge de 9 ans sur un PC 8088 !!

GW-Basic, Pascal, Turbo Pascal, Delphi ont fait mes bases... Puis Java , bien plus tard... Pour enfin avoir découvert le C#... Quel plaisir de développer avec ce langage des solutions ASP.NET... Le développement Web comme jamais je ne pouvais l'imaginer possible :)

Aujourd'hui titulaire du MCSD VS 6.0, MCAD .NET, et MCT ...

Sur ce blog, je souhaite partager des choses simples mais efficaces... Des problèmes de tous les jours que l'on peut rencontrer et qu'il est simple de régler :)

Mes certifications

Month List