Déployer un ActiveX avec Delphi 2010

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

Sélection_032

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 :

Espace de travail 2_035

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) :

Espace de travail 2_036

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 Espace de travail 2_037Mme Michu) :

 

Bingo.

Maintenant on re-teste notre page web contenant le .CAB et :

Sélection_034

Tada !