Partager via


Configuration des éditeurs approuvés ClickOnce

 

Brian Noyes
Microsoft MVP

Avril 2005

S’applique à :
   Visual Studio 2005

Résumé: La sécurité ClickOnce vous permet de tirer parti des protections de sécurité d’exécution fournies par Code Access Security, tout en permettant une détermination dynamique des autorisations pour une application particulière au moment où l’application est déployée via ClickOnce. (11 pages imprimées)

Contenu

Éditeurs approuvés et signature d’application ClickOnce 101
Vérifications de sécurité ClickOnce au lancement
Accéder à la zone
Éditeurs approuvés ClickOnce en action
Automatisation du processus
Conclusion
À propos de l’auteur

La sécurité ClickOnce permet l’élévation automatique des privilèges pour une application déployée par ClickOnce en fonction de l’invite de l’utilisateur ou des éditeurs approuvés. Lorsque vous déployez une application avec ClickOnce, les opérations effectuées par l’application ou les ressources auxquelles elle tente d’accéder peuvent nécessiter des autorisations CAS (Code Access Security) supérieures à ce qui lui serait accordé en fonction de la stratégie actuelle. Si tel est le cas, par défaut, le runtime .NET Framework sur l’ordinateur client invite l’utilisateur et lui demande s’il souhaite installer l’application et lui accorder un niveau de confiance élevé.

Dans un environnement d’entreprise où les administrateurs possèdent le bureau et où le contrôle de configuration sur chaque bureau est possible, il est généralement préférable d’éviter d’avoir à inviter l’utilisateur à prendre des décisions d’approbation. La plupart des utilisateurs n’ont pas la sophistication pour comprendre les implications de leurs décisions de confiance et ne savent pas quand ils doivent ou ne doivent pas accorder des autorisations d’application. ClickOnce vous permet de contrôler ce problème en autorisant les applications ClickOnce à élever automatiquement leurs propres privilèges sans invite de l’utilisateur, si les manifestes d’application ont été signés par un éditeur approuvé.

Éditeurs approuvés et signature d’application ClickOnce 101

Qu’est-ce qui constitue un éditeur approuvé ? Tout d’abord, vous devez toujours signer les manifestes de déploiement et d’application ClickOnce avec un certificat d’éditeur. Ensuite, le certificat utilisé pour signer une application ClickOnce doit être configuré dans le magasin de certificats Éditeurs approuvés sur l’ordinateur de l’utilisateur. Enfin, l’autorité de certification qui a émis le certificat doit être configurée dans le magasin de certificats d’autorité de certification racine de confiance sur l’ordinateur de l’utilisateur. Je vais éplucher les couches de chacune de ces trois pièces à tour de rôle.

Lorsque vous créez une application Windows Forms dans Visual Studio 2005 et que vous la publiez avec ClickOnce, Visual Studio génère automatiquement un certificat d’éditeur pour vous et l’utilise pour signer votre application lors de sa publication. Dans ce cas, il génère un fichier de certificat personnel (fichier .pfx) et l’ajoute à votre projet Visual Studio avec une convention de nommage de <fichier par défaut de Nom_>Projet_TemporaryKey.pfx. Visual Studio ajoute également ce certificat à votre magasin de certificats personnel et active les paramètres de projet qui définissent ce certificat comme celui à utiliser pour signer les manifestes d’application ClickOnce. Étant donné que tout cela se produit automatiquement, vous ne savez peut-être même pas qu’il se produit.

Note La version bêta 1 vous a permis de nommer vos manifestes de manière forte à l’aide d’un fichier de clé de nom fort (fichier .snk par convention). Les versions bêta 2 et RTM ne prennent plus en charge cette fonctionnalité, et vous devez signer vos manifestes avec un certificat d’éditeur, généralement un fichier .pfx qui peut être protégé ou non par mot de passe.

Le processus de signature utilise les clés publiques et privées du certificat pour appliquer une signature numérique XML aux fichiers manifeste XML de déploiement et d’application générés pour une application ClickOnce. Cette approche de signature numérique garantit que vous savez qui a signé un déploiement d’application ClickOnce donné en fonction de la clé publique qui est incorporée dans le fichier manifeste, et que le fichier n’a pas été falsifié ou que son contenu a été modifié de quelque manière que ce soit depuis sa signature. Cela empêche une partie malveillante d’ajouter des paramètres ou des fichiers involontaires à une application ClickOnce après sa publication par une autorité approuvée.

Les certificats d’éditeur sont fournis en deux versions : autogénéisées ou vérifiées par un tiers (par Verisign, par exemple). Un certificat est émis par une autorité de certification, qui dispose elle-même d’un certificat qui l’identifie en tant qu’autorité émettrice du certificat. Un certificat auto-généré est un certificat que vous créez à des fins de développement, et vous devenez essentiellement à la fois l’autorité de certification et l’éditeur que le certificat représente. Pour être utilisé à des fins de production, vous devez utiliser un certificat généré par un tiers, soit une société externe comme Verisign, soit une autorité interne telle que votre administrateur de domaine dans un environnement d’entreprise.

Pour être considéré comme un éditeur approuvé, le certificat d’éditeur doit être installé dans le magasin de certificats Éditeurs approuvés sur l’ordinateur de l’utilisateur, et l’autorité émettrice du certificat d’éditeur doit avoir son propre certificat installé dans le magasin de certificats autorité de certification racine de confiance. Vous pouvez utiliser le certificat certmgr.exe console de gestion dans Windows pour gérer et installer des certificats dans les magasins de votre ordinateur, et vous pouvez également les installer à l’aide de Visual Studio 2005. Je vous guiderai tout au long du processus d’utilisation de Visual Studio plus loin dans cet article.

Vérifications de sécurité ClickOnce au lancement

Lorsqu’une application ClickOnce est lancée pour la première fois sur le bureau d’un utilisateur, le runtime .NET Framework case activée d’abord pour s’assurer que les manifestes de l’application n’ont pas été falsifiés puisqu’ils ont été signés avec le certificat d’éditeur utilisé pour la signature. S’ils réussissent cette case activée, le runtime examine ensuite le magasin d’autorité de certification racine de confiance et vérifie si le certificat de l’émetteur du certificat de l’éditeur est installé dans ce magasin. Il examine ensuite qui est l’éditeur sur le certificat et vérifie si son certificat se trouve dans le magasin Éditeurs approuvés. Si ces deux éléments sont vrais, l’utilisateur ne sera pas invité par défaut et l’application recevra les privilèges spécifiés dans le fichier manifeste de l’application. Une approbation d’application pour cette application est ajoutée à la stratégie de sécurité .NET Framework de l’utilisateur, l’application se lance et s’exécute simplement, et si les autorisations ont été spécifiées correctement dans le manifeste de l’application, l’utilisateur ne doit jamais voir une invite ou une exception de sécurité.

Si l’émetteur du certificat et l’éditeur représenté par le certificat sont inconnus sur l’ordinateur client (en fonction des certificats installés dans les magasins), l’utilisateur est invité à utiliser la boîte de dialogue indiquée dans la figure 1 et peut décider d’autoriser l’application à obtenir les privilèges requis, selon la zone à partir de laquelle l’application est lancée. S’ils cliquent sur le lien Plus d’informations... en bas, ils obtiennent la boîte de dialogue affichée dans la figure 2, ce qui donne à l’utilisateur un peu plus de détails sur ce qui va se produire s’il clique sur le bouton Installer , mais en général va probablement lui faire peur ( comme la plupart des boîtes de dialogue de sécurité le font ) car il donne très peu d’informations sur ce qui se passe réellement.

Figure 1. Invite d’utilisateur de l’éditeur et de l’autorité de certification non approuvés

Figure 2 : Boîte de dialogue Informations supplémentaires

Si le certificat utilisé pour signer les manifestes d’application est généré par une autorité de certification racine approuvée, mais que le certificat d’éditeur spécifique ne se trouve pas dans le magasin d’éditeurs approuvés, l’utilisateur est toujours invité, mais avec une invite légèrement plus conviviale que lorsque l’émetteur du certificat d’éditeur est inconnu (voir la figure 3). L’invite plus conviviale indique que l’éditeur organization, car avec la technologie de certificat Authenticode et les racines approuvées, vous pouvez au moins vous assurer que le organization de publication est celui qu’ils disent être en fonction de l’émetteur du certificat. Si vous faites confiance à l’autorité émettrice, vous pouvez être confiant que l’éditeur ne prétend pas être quelqu’un qu’il n’est pas.

Figure 3. Invite utilisateur de l’autorité de certification approuvée

Une fois qu’une approbation d’application a été créée pour une application donnée, soit en raison d’une configuration automatique basée sur un certificat d’éditeur approuvé, soit en fonction de l’invite de l’utilisateur et de l’autorisation de l’installation de l’application, les versions ultérieures de la même application n’auront pas besoin d’y inviter à nouveau, sauf si les autorisations de sécurité demandées changent.

Accéder à la zone

Il existe cinq zones de sécurité intégrées qui sont utilisées dans LE CAS pour les décisions d’approbation basées sur l’origine : MyComputer, LocalIntranet, Internet, TrustedSites et UntrustedSites. Ces mêmes zones sont utilisées pour déterminer le type d’invite qui doit être autorisé pour les utilisateurs en ce qui concerne l’élévation des autorisations d’application ClickOnce. Chaque zone correspond au contexte à partir duquel une application ClickOnce est lancée, qui est déterminé par l’adresse de chemin d’accès complète utilisée pour le manifeste de déploiement (fichier .application) pour l’application ClickOnce.

Le tableau 1 présente quelques exemples de zones de lancement basées sur l’adresse utilisée pour le manifeste de déploiement. En fait, si l’adresse est un chemin d’accès de fichier local à un lecteur non réseau, l’application est lancée dans la zone MyComputer. Si l’adresse utilise un protocole réseau (partage de fichiers HTTP ou UNC) et que la partie serveur de l’adresse est un nom de machine unique, elle est évaluée comme provenant de la zone LocalIntranet. Si la partie nom du serveur de l’adresse contient des points, elle est évaluée comme provenant de la zone Internet. TrustedSites et UntrustedSites dépendent des adresses individuelles configurées dans le cadre des paramètres de sécurité sites de confiance et sites restreints d’Internet Explorer.

Tableau 1. Exemples de zone de lancement ClickOnce

Adresse de lancement Zone de lancement
http://deploymentserver/MyClickOnceApp/MyClickOnceApp.application LocalIntranet
\\deploymentserver\MyClickOnceApp\MyClickOnceApp.application LocalIntranet
http://some.dotted.servername/Apps/MyClickOnceApp.application Internet
\\127.0.0.1\sharefolder\MyClickOnceApp.application Internet
C:\inetpub\wwwroot\MyClickOnceApp\MyClickOnceApp.application MyComputer

Par défaut, les sites MyComputer, LocalIntranet et TrustedSites sont configurés pour permettre à l’utilisateur d’élever les privilèges de sécurité d’une application ClickOnce si cette application n’est pas signée par un éditeur approuvé. La zone Internet par défaut est que si le manifeste d’application est signé par un certificat d’éditeur émis par une autorité racine approuvée, cette application peut demander à l’utilisateur des autorisations élevées si nécessaire (autrement dit, le certificat d’éditeur n’est pas également installé dans le magasin Éditeurs approuvés). Si une application lancée par interne n’est pas signée avec un certificat émis par une autorité racine approuvée, l’application ne sera pas autorisée à s’exécuter. La zone UntrustedSites par défaut est que si l’application n’est pas signée par un certificat d’éditeur approuvé émis par une autorité racine approuvée, l’application ne sera pas autorisée à s’exécuter (en d’autres termes, aucune invite de l’utilisateur n’est autorisée).

Ces paramètres peuvent être modifiés si vous le souhaitez pour votre entreprise en configurant une clé de Registre obscure qui sera vérifiée par ClickOnce pour déterminer la stratégie d’invite de l’utilisateur. Chacun des comportements décrits ci-dessus correspond à une valeur que vous pouvez définir pour chacune des zones via cette clé de Registre.

Clé de Registre \HKLM\Software\Microsoft\. NETFramework\Security\TrustManager\PromptingLevel est celui qui vous permet de personnaliser le comportement d’invite. Cette clé n’étant pas présente par défaut après une installation de .NET Framework 2.0, vous devrez la créer manuellement si vous souhaitez personnaliser ces paramètres.

Sous cette clé de Registre, vous pouvez ajouter l’une des 5 valeurs de chaîne nommées MyComputer, LocalIntranet, Internet, TrustedSites et UntrustedSites. Ceux-ci correspondent à leurs zones respectives. Pour ces valeurs, vous pouvez définir l’une des trois chaînes suivantes : Enabled, Disabled ou AuthenticodeRequired. Enabled est la valeur par défaut pour les zones MyComputer, LocalIntranet et TrustedSites. La valeur par défaut d’Internet est AuthenticodeRequired, et la valeur par défaut UntrustedSites est Désactivée. Le tableau 2 présente les valeurs que vous pouvez définir pour chaque zone et leurs effets. La figure 4 montre les valeurs de clé de Registre définies sur leur comportement par défaut, mais gardez à l’esprit que cette clé n’existe pas par défaut. En général, vous ne la créez que si vous voulez les définir sur des valeurs différentes des valeurs par défaut.

Tableau 2. Effets de lancement de la valeur de clé de Registre PromptingLevel

Valeur Autorité racine non approuvée Certificat émis par l’autorité racine de confiance Autorité racine approuvée et certificat d’éditeur approuvé
activé Invite utilisateur non amicale Invite utilisateur conviviale Aucune invite ; autorisations accordées et lancements d’applications
AuthenticodeRequired Application désactivée Invite utilisateur conviviale Aucune invite ; autorisations accordées et lancements d’applications
Désactivé Application désactivée Application désactivée Aucune invite ; autorisations accordées et lancements d’applications

Figure 4. Invite de l’utilisateur aux valeurs de clé de Registre

Éditeurs approuvés ClickOnce en action

Pour tester cela, vous devez configurer des certificats sur votre ordinateur de développement. La première étape consiste à avoir un certificat à utiliser pour signer vos applications ClickOnce et à configurer ce certificat dans les magasins de certificats souhaités sur votre machine de développement ou de test. Comme mentionné précédemment, Visual Studio génère un nouveau certificat pour chaque projet ClickOnce, sauf si vous configurez un certificat à utiliser pour la signature des manifestes ClickOnce avant de publier l’application pour la première fois. Je vous recommande de générer un nouveau certificat de test, de l’enregistrer dans un emplacement connu, puis de l’utiliser pour signer tous vos projets ClickOnce de développement afin que vous n’ayez pas à jeter vos magasins de certificats avec un ensemble de certificats de test. Le certificat généré automatiquement n’est pas protégé par mot de passe, et je vous recommande vivement d’utiliser uniquement des fichiers de certificat protégés par mot de passe.

Pour générer un nouveau fichier de certificat dans Visual Studio 2005 protégé par mot de passe, accédez à la fenêtre propriétés du projet (double-cliquez sur le nœud Propriétés dans Explorateur de solutions, ou cliquez avec le bouton droit sur le nœud du projet et sélectionnez Propriétés dans le menu contextuel). Sélectionnez l’onglet Signature, case activée la zone Signer les manifestes ClickOnce case activée, puis cliquez sur le bouton Créer un certificat de test... (voir figure 5). Vous serez invité à entrer un mot de passe et un nouveau fichier pfx avec un nom par défaut sera ajouté à votre projet. Ce certificat sera également défini comme certificat utilisé pour signer les manifestes, et il sera installé dans votre magasin de certificats personnel dans Windows. Vous pouvez ensuite renommer le fichier, le copier dans un emplacement réutilisable, puis configurer ce certificat en tant que certificat pour n’importe quelle application en appuyant sur le bouton Sélectionner à partir du fichier... sous l’onglet Signature .

Figure 5. Propriétés du projet de signature

Une fois que vous disposez d’un certificat et que vous avez identifié celui à utiliser pour signer vos manifestes ClickOnce dans les propriétés du projet Signature, vous pouvez publier votre application à partir de Visual Studio et les manifestes sont signés avec ce certificat. Si vous disposez d’un « vrai » certificat d’éditeur (c’est-à-dire, verisign, ou que votre organization de développement utilise signé par une autre autorité racine approuvée), vous pouvez l’utiliser à la place, soit à partir d’un fichier comme décrit ci-dessus, soit en pointant vers le certificat dans votre magasin de certificats personnel à l’aide du bouton Sélectionner à partir du magasin... dans les propriétés du projet signature.

Pour savoir comment éviter une invite utilisateur avec un déploiement d’éditeur approuvé, vous devez configurer le certificat d’éditeur sur l’ordinateur sur lequel l’application sera lancée avec ClickOnce, qui est souvent votre machine de développement pour les premiers essais et le développement. Si vous avez généré le certificat vous-même comme décrit ci-dessus (ou à l’aide de l’utilitaire de ligne de commande makecert.exe fourni avec Visual Studio), vous devez ajouter ce certificat au magasin Autorités de certification racines de confiance. Cela est dû au fait que vous n’êtes pas seulement l’éditeur, mais également l’émetteur du certificat. Vous souhaiterez ensuite installer le même certificat dans le magasin Éditeurs approuvés, qui est la dernière étape qui permet à l’application de se lancer sans invite.

Pour rendre tout cela concret, passons en revue un exemple par les nombres. Démarrez un nouveau projet d’application Windows dans Visual Studio 2005 et nommez-le ClickOnceTrustedPub. Une fois le projet créé, accédez aux propriétés du projet en double-cliquant sur le nœud Propriétés dans l’arborescence Explorateur de solutions sous le nœud du projet, puis sélectionnez l’onglet Signature.

Ensuite, cochez la case pour signer les manifestes ClickOnce. Appuyez sur le bouton Créer un certificat de test... et entrez un mot de passe pour le certificat. Le fichier qui sera créé et ajouté au projet sera nommé ClickOnceTrustedPub_TemporaryKey.pfx. Renommez-le en devcert.pfx dans Explorateur de solutions. Ce serait également le moment de copier le fichier dans un dossier de développement commun sur votre ordinateur afin que vous puissiez le réutiliser pour les projets suivants et que vous n’ayez pas à poursuivre la régénération et la configuration de vos certificats. Lors de la création du fichier de certificat, Visual Studio l’a également installé dans votre magasin personnel de certificats.

Pour ajouter ce certificat aux magasins Autorité de certification racine de confiance et Éditeur approuvé, cliquez sur le bouton Plus de détails dans l’onglet Propriétés du projet signature. La boîte de dialogue informations sur le certificat s’affiche (voir la figure 6). Cliquez sur le bouton Installer le certificat... en bas de l’onglet Général . L’Assistant Importation de certificat s’affiche.

Figure 6. Boîte de dialogue d’informations sur le certificat

Dans la deuxième étape de l’Assistant, sélectionnez la case d’option Placer tous les certificats dans le magasin suivant, puis appuyez sur le bouton Parcourir (voir figure 7). Une boîte de dialogue s’ouvre dans laquelle vous pouvez effectuer une sélection dans la liste des magasins de certificats (voir la figure 8).

Figure 7. Sélection du magasin de l’Assistant Certificat

Figure 8. Boîte de dialogue sélection du magasin de certificats

La première fois dans ce processus, sélectionnez le magasin Autorités de certification racines de confiance , cliquez sur Suivant, puis sur Terminer dans l’Assistant. Vous serez invité à entrer une boîte de dialogue d’avertissement de sécurité détaillée sur les risques liés à l’installation d’un certificat d’autorité racine. Cliquez sur Oui , sinon vous ne pourrez pas essayer la fonctionnalité d’éditeur approuvé de ClickOnce, mais assurez-vous de comprendre le risque qu’elle décrit. Si quelqu’un d’autre a obtenu votre certificat, signé une application avec celui-ci, puis l’a lancé sur votre ordinateur, Windows traiterait cette application comme ayant été publiée par une entreprise qui a été vérifiée par une autorité approuvée.

Répétez le processus décrit en commençant par le bouton Plus de détails , mais installez cette fois le même certificat dans le magasin Éditeurs approuvés.

Une fois cette opération effectuée, vous pouvez publier votre application avec ClickOnce. Pour ce faire, sélectionnez Publier<projectName> dans le menu Générer de Visual Studio, puis cliquez sur Terminer dans l’Assistant qui s’affiche. Cela générera votre application, la publiera avec les paramètres de publication ClickOnce par défaut et vous présentera une page Web à partir de laquelle vous pouvez tester l’installation en tant que client en cliquant sur le bouton Installer sur la page Web. Si vous cliquez sur ce bouton, l’application doit télécharger et s’exécuter sur le bureau sans aucune forme d’invite. Les autorisations par défaut demandées par une application ClickOnce sont illimitées (confiance totale), et le lien par défaut du bouton Installer présenté utilise une URL de zone LocalIntranet. Par conséquent, si vous répétiez ce même processus sans avoir configuré le certificat d’éditeur approuvé, vous auriez été invité à utiliser la boîte de dialogue indiquée dans la figure 1.

Automatisation du processus

Dans un environnement opérationnel avec un grand nombre d’ordinateurs utilisateur à gérer, vous n’aurez pas Visual Studio disponible sur chaque ordinateur pour configurer les certificats d’éditeur. Vous devrez donc utiliser le certificat console de gestion (certmgr.exe) inclus dans Windows. Si vous exécutez simplement certmgr.exe sans arguments à partir d’une ligne de commande, une fenêtre MMC (Microsoft Management Console) s’affiche pour vous permettre d’ajouter ou de supprimer des certificats de l’un des magasins sur l’ordinateur local. Mais même avec cela, vous n’aurez peut-être pas besoin d’utiliser tous les ordinateurs pour configurer les certificats. Le processus peut également être automatisé à l’aide de certmgr.exe avec certains paramètres de ligne de commande.

Vous devez d’abord exporter la partie publique d’un certificat dans un fichier de certificat (.cer) à partir de certmgr à l’aide du bouton Exporter :

Figure 9. Certmgr.exe l’exportation de certificats

Après cela, vous pouvez copier ce fichier de certificat sur un ordinateur cible et exécuter certmgr.exe sur la ligne de commande. Vous devez lui transmettre le nom de fichier ainsi que le magasin dans lequel le placer en tant que paramètres de ligne de commande avec les commutateurs appropriés, et qui installera le certificat sur l’ordinateur :

certmgr –add alice.cer –s Root
certmgr –add alice.cer –s TrustedPublisher

Tout cela peut être scripté ou ajouté à un programme d’installation personnalisé par le biais d’un projet d’installation et de déploiement Visual Studio (ou d’une autre forme de programme d’installation), et le package Windows Installer (fichier .msi) qui en résulte peut être ajouté au programme d’amorçage de votre application ClickOnce. Pour plus d’informations sur le programme d’amorçage, consultez l’article de Sean Draine utiliser le programme d’amorçage Visual Studio 2005 pour Kick-Start votre installation dans le numéro d’octobre 2004 de MSDN Magazine.

Conclusion

La sécurité ClickOnce vous permet de tirer parti des protections de sécurité d’exécution fournies par Code Access Security, tout en permettant une détermination dynamique des autorisations pour une application particulière au moment où l’application est déployée via ClickOnce. Toutefois, cette flexibilité a un prix : vous devez décider s’il faut autoriser l’utilisateur à être le responsable de l’élévation des autorisations d’application par l’invite, et si vous souhaitez que cette invite soit basée sur l’origine du certificat de l’éditeur. Le comportement par défaut de ClickOnce est le plus facile à comprendre. Soit une application va élever automatiquement ses autorisations, car elle est déployée à partir d’un éditeur approuvé, soit elle va inviter l’utilisateur à le laisser décider s’il faut faire confiance à l’éditeur. Dans les environnements plus contrôlés, vous souhaiterez peut-être restreindre l’invite de l’utilisateur, et cet article explique comment procéder à l’aide de la clé de Registre PromptingLevel et de la configuration des certificats d’éditeur et d’autorité racine approuvée sur l’ordinateur de l’utilisateur. Il est important de comprendre les effets des différentes valeurs et leur comportement avec différentes configurations de magasin de certificats pour utiliser correctement les protections de sécurité de ClickOnce.

 

À propos de l’auteur

Brian Noyes est MVP Microsoft et conférencier, formateur, rédacteur et consultant bien connu chez IDesign, Inc. (www.idesign.net). Il intervient à TechEd US et en Malaisie, à Visual Studio Connections, à VSLive!, à DevEssentials et à d’autres conférences, et est l’un des conférenciers les mieux notés du Bureau des conférenciers de l’INETA. Il a publié de nombreux articles sur le développement .NET Framework pour MSDN Magazine, Visual Studio Magazine, asp.netPRO, The Server Side .NET, CoDe Magazine, .NET Developer’s Journal et d’autres publications. Son dernier livre, Data Binding in Windows Forms 2.0, qui fait partie de la série de développement Addison-Wesley .NET, sera disponible sur les tablettes à l’automne 2005. Brian a commencé à programmer pour stimuler son cerveau tout en pilotant des F-14 Tomcats dans la Marine, en appliquant ses compétences et son intérêt à la programmation de simulations d’avions et d’avioniques, de prototypes, et d’applications de soutien tout en stimulant ses glandes surrénales à l’école de pilote d’essai de la marine américaine et de l’armée américaine.