Du temps de Delphi7, c’était facile de déployer un ActiveX (OCX) en cliquant simplement sur “Déployer pour le web”. Avec Delphi 2010, ce n’est pas possible directement. Il faut faire le boulot à la main.
Fabriquer le .CAB
On commence par fabriquer le .CAB, ça c’est facile, cabarc.exe est livré avec Delphi (répertoire \bin) et donc :
cabarc -s 6114 n monprojet.cab monproject.ocx
Le -s 6114 est censé réserver de l’espace dans le .CAB pour la signature.
Pour industrialiser ça, il suffit d’aller dans Projet/Options/Événements de construction et de mettre cette ligne dans les commandes à effectuer après la construction :
cabarc -s 6114 n monprojet.cab monproject.ocx
Installer les programmes Microsoft
Mais voilà, Internet explorer indique que le composant n’est pas signé et qu’il pourrait être dangereux, blablabla, donc il faut le signer. Pour cela il faut utiliser les outils Microsoft (issus du kit de développement .NET) :
- signcode.exe
- makecert.exe
- cert2spc.exe
Les deux derniers servent à fabriquer un certificat de test. La vraie solution consiste à acheter un certificat “Microsoft authenticode” par exemple chez Thawte moyennant 200€/an. Pour l’instant on va faire à la main.
Tant que j’y suis, il peut être bon de récupérer cet outil pour savoir clairement dans quel état est notre fichier : Magenta Systems Code Signing Trust and Certificate Check component. Il contient surtout trustcheck.exe. C’est un freeware.
D’abord installer le Microsoft .NET framework 1.1 Redistributable puis le Kit de développement .NET framework 1.1
Les 3 programmes se trouvent dans C:\Program Files\Microsoft.NET\SDK\v1.1\Bin
Analyse du .CAB par trustcheck avant traitement :
Verify Trust for K:\monprojet\monprojet.cab - Unsigned Code
Création du certificat
makecert -sk TFC -n "CN=TheFreeCat.org" TFC.cer Succeeded cert2spc.exe TFC.cer tfc.spc Succeeded cabarc n mycab.cab monprojet.ocx Microsoft (R) Cabinet Tool - Version 1.00 Copyright (c) Microsoft Corp 1996. All rights reserved. Creating new cabinet 'monprojet.cab': -- adding monprojet.ocx Completed successfully signcode /spc TFC.spc /k TFC k:\monprojet\monprojet.cab Warning: This file is signed, but not timestamped. Succeeded
Vérification avec trustcheck :
Verify Trust for K:\monprojet\monprojet.cab - Signed Code But With Untrusted Test Certificate
On peut faire un peu mieux…
… en auto-signant notre certificat (noter le -r dans le makecert) et en ajoutant un timestamp :
makecert -sk TFC -r -n "CN=TheFreeCat.org" TFC2.cer Succeeded cert2spc.exe TFC2.cer tfc2.spc Succeeded signcode /spc TFC2.spc /k TFC -t http://timestamp.verisign.com/scripts/timstamp.dll monprojet.cab Succeeded
Note : Parfois il faut que j’exécute 2 fois signcode car la première fois ça fail :
Error: Signing Failed. Result = 8007000b, (-2147024885)
Que nous dit trustcheck ?
Verify Trust for K:\monprojet\monprojet.cab - Signed Code But With Untrusted Test Certificate Check Cert Failed for K:\monprojet\monprojet.cab Signed Code But Certificate Root Not Trusted Signed by: TheFreeCat.org Issued by: TheFreeCat.org Cert Expires: 01/01/2040 UTC Timestamp: 30/01/2013 12:52:27 Timestamped by: Symantec Time Stamping Services Signer - G4
Forcer Windows à reconnaître notre autorité
(J’adore ce sous-titre)
Ça a l’air facile mais comme je n’ai pas réussi du premier coup, je ne peux pas garantir un fonctionnement les yeux fermés.
A priori, il suffit d’ouvrir le fichier TFC2.cer (par double-clic) : Windows propose d’installer le certificat :
Cliquer sur “Installer le certificat”, puis “Suivant” sur la page de Bienvenue, puis choisir “Placer tous les certificats dans le magasin suivant” (pas le mode automatique) et cliquer sur “Parcourir”.
Là, apparaît une liste dont seul Microsoft a le secret avec des entrées dupliquées qui ne font pas la même chose. Donc cocher en bas “afficher les magasins physiques”. Ce qui nous intéresse, c’est les “autorités de certification racines de confiance” (oui je trouve la traduction assez claire aussi) :
Il semblerait (conditionnel) que le choix “Ordinateur local” soit pertinent (en tout cas c’est celui qui marche chez moi).
Puis “Suivant” et “Terminer”. Fermer la fenêtre du certificat et rouvrez le certificat pour vérifier qu’il n’y a plus la croix blanche sur fond rouge (la “croix rouge” dans le langage de Mme Michu) :
Bingo.
Maintenant on re-teste notre page web contenant le .CAB et :
Tada !