[30/12/2014]Lâutilisation des certificats est une chose un peu confidentielle, cela parait compliquĂ©, cher et nĂ©buleux. Pourtant câest trĂšs simple Ă condition de bien comprendre comment se servir du fichier fourni par lâautoritĂ© de certificationâŠ
Pourquoi des certificats ?
Les certificats sont les descendants modernes des sceaux que les autoritĂ©s gardaient jalousement et dont elles se servaient pour authentifier des documents. Ces sceaux pouvaient ĂȘtre des timbres pour crĂ©er une empreinte dans de la cire chaude ou des tampons encreurs ou gaufreurs comme lâadministration en utilise encore aujourdâhui. Ces sceaux permettaient de valider lâidentitĂ© du signataire dâun document. De lâĂ©dit royal au passeport en passant par le dĂ©cret ministĂ©riel ou le permis de conduire, lâextrait K-Bis du registre du commerce, lâextrait de casier judiciaire du ministĂšre de la justice, ⊠lâEtat a utilisĂ© et utilise encore des sceaux pour certifier des documents et en prouver lâauthenticitĂ©.
Il nâest pas possible de âgaufrĂ©â un mail, pas plus quâil nâest possible de mettre une empreinte de cire sur un logiciel ou dâencrer un setupâŠ
De lĂ est nĂ© lâidĂ©e de fabriquer des sceaux Ă©lectroniques basĂ©s sur la cryptographie pour garantir lâidentitĂ© de la source dâun logiciel ou celle dâun serveur Web.
Puisque ces sceaux Ă©lectroniques permettent de garantir lâidentitĂ© dâune personne (morale le plus souvent) il en dĂ©coule plusieurs utilisations qui bien Ă©videmment nâexistaient pas pour la version physique. Par exemple un certificat Ă©lectronique peut ĂȘtre utilisĂ© pour garantir et sĂ©curiser une connexion entre un poste client et un serveur sur Internet. Câest le fameux petit verrou ou cadenas affichĂ© par la plupart des browsers lorsque la connexion est ainsi validĂ©e.
SSL est une utilisation parmi dâautres et il est aussi possible de certifier une identitĂ© dans dâautres contextes. Câest le cas des logiciels.
Code ou installeur ?
Une application câest dâabord du code puis cela devient un exĂ©cutable. Ce dernier est gĂ©nĂ©ralement dĂ©ployĂ© au travers dâun installeur (setup).
Ces deux facettes donnent lieu Ă deux types de certification : la signature du code et la signature de lâinstallation.
Signer un installeur (setup) dans le monde Microsoft se fait en utilisant un certificat lorsquâon créé un dĂ©ploiement Click-Once.
Le fichier fourni par lâautoritĂ© de certification est utilisable directement pour peu quâon ait acquit un certificat de signature de code, ce qui diffĂšre des certificats pour SSL par exemple.
LâintĂ©rĂȘt est Ă©vident, un installeur signĂ© pourra ĂȘtre dĂ©ployĂ© chez des tiers qui, sâils font confiance Ă lâĂ©metteur, auront la certitude grĂące Ă la signature que le setup provient bien de ce dernier. Si vous faites confiance Ă Microsoft et si un fichier dâinstallation est signĂ© par un certificat vous assurant que ce setup provient bien de chez Microsoft et quâil nâa pas Ă©tĂ© modifiĂ© par un tiers alors vous pouvez installer le logiciel en toute confiance. Si lâinstalleur nâest pas signĂ© ou bien si la signature nâest plus valable, vous aurez raison de vous mĂ©fier.
Les certificats pouvant ĂȘtre installĂ©s dans un âmagasinâ sous Windows, il est ainsi possible de se crĂ©er une bibliothĂšque de certificats auxquels ont fait confiance systĂ©matiquement. DĂšs lors les logiciels provenant des sources utilisant ces certificats sâinstalleront facilement et sans question ni validation spĂ©ciale.
Il y a donc un grand intĂ©rĂȘt pour une entreprise Ă signer ces installeurs car cela permet aux clients dâĂȘtre certains de la source. Il y a aussi une question dâimage de marque : si un hacker peut glisser un virus ou autre ver dans un module dâinstallation qui ressemble Ă lâun de vos logiciels câest votre image de marque qui sera tĂąchĂ©e parfois pour toujours. Un installeur signĂ© ne peut pas ĂȘtre bricolĂ© et votre image de marque sera prĂ©servĂ©e.
Pour le code les raisons et lâutilisation mĂȘme de la signature sont trĂšs diffĂ©rentes.
Signer du code
Signer du code est une autre utilisation des certificats. Ici les raisons sont diffĂ©rentes, plus techniques. Notamment la signature dâun code .NET permet de crĂ©er des ânoms fortsâ (strong names) pour les espaces de noms.
Visual Studio permet de signer un code en fabricant un fichier âpfxâ automatiquement. Ce dernier est protĂ©gĂ© par un mot de passe. Alors pourquoi passer par un certificat ?
La diffĂ©rence se joue dans la âqualitĂ© de lâauthentificationâ. Nâimporte qui peut avec Visual Studio signer un code avec un âpfxâ. De lâĂ©diteur de logiciels trĂšs sĂ©rieux au bricoleur, de lâentreprise la plus sĂ©rieuse au premier margoulin venu..
En utilisant un certificat Ă©mis par une autoritĂ© de certification pour signer un code .NET on offre quelque chose de plus : lâassurance que lâidentitĂ© de lâĂ©metteur est validĂ©e. Et cela fait toute la diffĂ©rence.
Dans certains contexte les noms forts sont obligatoires, sur certaines machines seuls du code signĂ© peut ĂȘtre autorisĂ© Ă effectuer certaines opĂ©rations. Si la clĂ© de signature nâa pas de certification le code mĂȘme signĂ© ne sera pas autorisĂ© Ă sâexĂ©cuter. Seul du code signĂ© par un certificat Ă©mis par une autoritĂ© valide le pourra.
Typiquement il faut savoir quâon signe avec un nom fort ce qui doit ĂȘtre partagĂ©, donc des DLL et non un EXE. Et cela nâa dâintĂ©rĂȘt principalement que si les DLL en question doivent ĂȘtre dĂ©ployĂ©es dans le GAC ou bien sâil sâagit de ressources partagĂ©es entre plusieurs logiciels.
La signature dâun code .NET, la crĂ©ation de noms forts nâest pas le sujet de cet article je nâirais pas plus loin sur ce sujet ici. Ce qui compte câest de comprendre la diffĂ©rence qui peut exister entre un nom fort créé avec une clĂ© âpfxâ gĂ©nĂ©rĂ©e sous VS et un nom fort signĂ© par un certificat Ă©mis par une autoritĂ© de certification.
Est-ce cher ?
Prenons lâautoritĂ© Digicert, pour un certificat de signature de code le prix est de $223/an pour une annĂ©e et de $178.33/an si on achĂšte un certificat valable 3 ans.
Est-ce cher ? Oui et non. Si vous ĂȘtes juste un dĂ©veloppeur amateur ou un prestataire faisant de la sous-traitance cela ne vous servira pas Ă grand chose et donc oui câest cher jusque pour sâamuser chez soiâŠ
Si vous Ă©ditez des logiciels, si vous crĂ©ez des logiciels au sein dâune grande entreprise, dâun groupe, certifier les applications et les installations pour moins de 200 euros par an devient rĂ©ellement un investissement ridicule au regard du service rendu. Donc non, ce nâest pas cher.
Donc acheter un certificat nâest pas cher et devrait ĂȘtre systĂ©matique pour protĂ©ger les applications quâon distribue.
Est-ce compliqué ?
Chaque autoritĂ© de certification possĂšde ses propres mĂ©thodes dâenquĂȘte pour valider lâidentitĂ© dâun demandeur de certificat. Dans certains cas lâopĂ©ration peut ĂȘtre longue, tout dĂ©pend des preuves que le demandeur peut amener.
Jâai testĂ© le processus avec Digicert qui offre aux MVP la possibilitĂ© dâobtenir gratuitement un certificat. Ils sont intelligents car sans ce geste jâavoue que je nâaurais pas investi 200⏠juste pour Ă©crire un article ici, mĂȘme si jâaime mes lecteurs
.
Disposant dâune sociĂ©tĂ© (e-naxos) et ayant une prĂ©sence officielle attestĂ©e Ă©vidente, le processus de certification a Ă©tĂ© trĂšs rapide, en moins de 48h aprĂšs quelques Ă©changes de mails et dâinformations le certificat Ă©tait disponible et utilisable. Il faut dire que le profil MVP gĂ©rĂ© par Microsoft additionnĂ© au site e-naxos et ses informations liĂ©es au nom de domaine via le registrar et tout le reste me permettent de facilement prouver mon identitĂ©. Mais comme on suppose quâun certificat nâa dâintĂ©rĂȘt que pour une entreprise ou un Ă©diteur de logiciels, on peut affirmer que tous ces utilisateurs potentiels de certificat nâont aucune difficultĂ© Ă prouver leur identitĂ©.
Donc ce nâest pas compliquĂ© dâobtenir un certificat, câest mĂȘme plus rapide que je ne le pensais. En tout cas chez Digicert que jâai pu tester.
Est-ce vraiment utile ?
Est-ce cher ? non. Est-ce compliquĂ© ? non. Est-ce vraiment utile ? Poser la question ici ne sert quâĂ complĂ©ter logique la progression induite par les deux premiĂšres mais en rĂ©alitĂ© toute lâintroduction de cet article y rĂ©pond et la rĂ©ponse est Ă©vidente, oui câest vraiment utile.
Il est utile de pouvoir crĂ©er des noms forts .NET signĂ©s par une clĂ© issue dâun vrai certificat, il est tout aussi utile de signer un installeur ClickOnce pour prouver quâun logiciel est sain, dâorigine, non bricolĂ©, et que son crĂ©ateur est bien identifiĂ©.
Est-ce pérenne ?
Autre question intĂ©ressante. Puisque les certificats sâachĂštent Ă lâannĂ©e, comment la pĂ©rennitĂ© fonctionne-t-telle dans ce contexte ? Est-il nĂ©cessaire de re-signer tous les setups chaque annĂ©e ?
Il y a deux points de vue Ă considĂ©rer : le premier concerne lâimage de marque de lâĂ©metteur. Si lâutilisateur installe un logiciel dont le certificat nâest plus valable ce nâest pas un bon signal, lâĂ©metteur existe-t-il toujours, a-t-il encore une activitĂ© ? Installer un logiciel dâune sociĂ©tĂ© qui nâa pas les moyens de renouveler son certificat nâest pas une bonne UX. Donc de ce point de vue lĂ il faut renouveler le certificat pour que dâannĂ©e en annĂ©e il reste valide. Mais attention, renouveler le certificat ne signifie pas signer Ă nouveau les setups, câest juste un acte auprĂšs de lâautoritĂ© de certification.
Mais il existe un autre point de vue : signer un setup nâa rien Ă voir avec certifier une identitĂ© SSL pour un site Web. Un site Web dont le certificat nâest plus valide câest problĂ©matique car câest toute la sĂ©curisation de la connexion qui peut ĂȘtre mise en doute. Avec un setup les choses sont diffĂ©rentes, ce qui compte câest de pouvoir prouver que ce setup lĂ a bien Ă©tĂ© Ă©mis par la sociĂ©tĂ© X. Il sâagit dâune vĂ©ritĂ© intemporelle : si le setup a bien Ă©mis par X, alors mĂȘme dans 10 ans, et mĂȘme si le certificat nâa pas Ă©tĂ© renouvelĂ©, la signature dira que câest bien X qui a Ă©mis le setup Ă lâĂ©poque et quâil sâagit donc bien dâun setup lĂ©gitime et intact.
Donc du point de vue technique un certificat de signature de code est toujours valide car ce quâil prouve est intemporel, il constate un acte historique qui ne peut changer avec le temps. Du point de vue de lâimage de marque un certificat non renouvelĂ© ne donne pas une excellente impression et il faut en tenir compte selon comment le logiciel doit ĂȘtre exploitĂ© (vendu Ă des clients ou utiliser en interne dâun groupe ou dâune entreprise).
Un peu de lecture
Il existe un bon article sur MSDN qui précise comment et pourquoi signer un code ou un installeur avec un certificat, le lecteur intéressé par le sujet y trouvera donc une information fort utile :
ClickOnce Manifest Signing and Strong-Name Assembly Signing Using Visual Studio Project Designer's Signing Page
Un autre article du blog de Michael Johnson explique de façon rapide comment signer un logiciel WPF avec un certificat : Signing WPF software with an Authenticode Certificate
Astuces pratiques
il pourrait sâagir ici de rĂ©pondre Ă la question âest-ce facile ?ââŠ
La rĂ©ponse est oui et non Ă la fois. Oui une fois quâon sait comment se servir du fichier fourni, non quand on patauge avec VS qui refuse le fichier original !
Ayant testĂ© le processus je peux vous livrer quelques informations qui vous feront peut-ĂȘtre gagner du tempsâŠ
Une fois le certificat obtenu Digicert vous envoie une confirmation et une page de téléchargement. On peut y récupérer le fameux certificat.
On cherche partout sur son disque, mais aucun fichier nâa Ă©tĂ© tĂ©lĂ©chargé⊠Quâest-ce-qui câest passĂ© ? Le certificat est perdu ? ⊠Tant de questions angoissantes !
En rĂ©alitĂ© le certificat tĂ©lĂ©chargĂ© est installĂ© par le browser dans le magasin de certificats. On nâa donc rien rĂ©cupĂ©rĂ©, câest juste du vent, pas de fichier⊠rien de âpalpableâ si tant est quâun fichier informatique soit palpable !
En bricolant on arrive Ă extraire un fichier mais ce dernier nâest pas reconnu par Visual Studio pour signer un code. La clĂ© du certificat peut ĂȘtre exportĂ©e, dĂ©truite ou rĂ©importĂ©e grĂące Ă âcertmngr.mscâ, câest dĂ©jà ça, mais pourquoi VS refuse-t-il de sâen servir pour signer le code ?
Le message dâerreur est âImpossible de trouver le certificat et la clĂ© privĂ©e pour le dĂ©chiffrementâ.
Avec ça on est bien avancĂ©. jâadore ce genre de message dâerreur. Câest du français, on comprend chaque mot, mais la phrase⊠ne dit rien du tout car elle ne correspond pas rĂ©ellement Ă ce quâon vit ! Ici on a bien le certificat et on vient juste de le sĂ©lectionner dans le disque dur donc on sait que VS peut le trouver. Donc il faut tel le saumon qui remonte la riviĂšre pĂ©niblement tenter de remonter Ă la source de lâerreur pour en comprendre la nature.
Je vous ferai grĂące de mes recherches sur le Web souvent infructueuses (peu de gens visiblement signent avec des certificats et encore moins en parle !).
La version courte consiste Ă exporter la clĂ© en pfx mais SANS la chaĂźne de certificats. Juste une case Ă cocher convenablement donc. Une fois une telle clĂ© exportĂ©e VS peut sâen servir pour signer un code (nom fort).
Si on exporte avec la chaĂźne de certificats le fichier obtenu peut ĂȘtre utilisĂ© avec ClickOnce mais pas pour signer du code.
DerniĂšre astuce, Digicert met Ă disposition une application de gestion des certificats âDigiCertUtil.exeâ quâil faut rĂ©cupĂ©rer sur leur site. Câest plus agrĂ©able Ă utiliser que lâusine Ă gaz de Windows, et on peut ici aussi exporter les clĂ©s ce qui rend lâopĂ©ration plus âuser friendlyâ.
Conclusion
Un certificat de signature de code câest utile, ce nâest pas cher, pas compliquĂ© Ă obtenir et une fois quelques astuces connues câest trĂšs facile Ă utiliser.
Si on est dans une position oĂč on distribue du code, quâil sâagisse de composants sous forme de DLL, de fichiers Ă installer dans le GAC ou bien sâil sâagit de certifier un setup, il nây a aucune raison de ne pas utiliser un certificat. Cela concerne donc principalement les Ă©diteurs de logiciel mais aussi les entreprises ou les groupes au sein desquels on est amenĂ© Ă dĂ©ployer DLL ou applications.
Si câest juste pour faire joujou tout seul dans son coin, cela nâa aucun intĂ©rĂȘt. Mais ce nâest pas conçu pour ça, ça tombe bien !