Accès à un site Web sécurisé à l'aide de VBA

Est-il possible d'accéder à des pages Web avec HTTPS et qui nécessitent un identifiant / mot de passe à l'aide d'Excel? Eh bien, oui et non. Voici l'accord et pourquoi ce n'est pas si simple.

Définissons d'abord les termes

HTTPS est par convention l'identifiant de ce qu'on appelle SSL (Secure Sockets Layer). Cela n'a rien à voir avec les mots de passe ou les connexions en tant que tels. Ce que fait SSL est d'établir une connexion cryptée entre un client Web et un serveur afin qu'aucune information ne soit envoyée entre les deux "en clair" - en utilisant des transmissions non cryptées. Si les informations incluent des informations de connexion et de mot de passe, le cryptage de la transmission les protège des regards indiscrets… mais le cryptage des mots de passe n'est pas une exigence. J'ai utilisé l'expression "par convention" car la véritable technologie de sécurité est SSL. HTTPS signale uniquement au serveur que le client prévoit d'utiliser ce protocole. SSL peut être utilisé de différentes manières.

Donc… si votre ordinateur envoie une URL à un serveur qui utilise SSL et que cette URL commence par HTTPS, votre ordinateur dit au serveur:

"Hé M. Server, serrons la main sur cette chose de cryptage pour que tout ce que nous disons ne soit plus intercepté par un méchant. Et quand c'est fait, allez-y et envoyez-moi la page adressée par l'URL."

Le serveur renverra les informations clés pour la configuration d'une connexion SSL. C'est à votre ordinateur d'en faire quelque chose.

C'est «la clé» (jeu de mots… enfin, en quelque sorte) pour comprendre le rôle de VBA dans Excel. La programmation dans VBA devrait en fait passer à l'étape suivante et implémenter le SSL côté client.

Les «vrais» navigateurs Web le font automatiquement et vous montrent un petit symbole de verrouillage dans la ligne d'état pour vous montrer que cela a été fait. Mais si le VBA ouvre simplement la page Web en tant que fichier et lit les informations qu'il contient dans les cellules d'une feuille de calcul (un exemple très courant), Excel ne le fera pas sans une programmation supplémentaire. La gracieuse offre du serveur de serrer la main et d'établir une communication SSL sécurisée est tout simplement ignorée par Excel.

Mais vous pouvez lire la page que vous avez demandée exactement de la même manière

Pour le prouver, utilisons la connexion SSL utilisée par le service Gmail de Google (qui commence par "https") et codons un appel pour ouvrir cette connexion comme si c'était un fichier.

Cela lit la page Web comme s'il s'agissait d'un simple fichier. Étant donné que les versions récentes d'Excel importeront automatiquement du HTML, une fois l'instruction Open exécutée, la page Gmail (moins les objets HTML dynamiques) est importée dans une feuille de calcul. Le but des connexions SSL est d'échanger des informations, pas seulement de lire une page Web, donc cela ne vous mènera normalement pas très loin.

Pour en faire plus, vous devez avoir un moyen, dans votre programme Excel VBA, de prendre en charge à la fois le protocole SSL et peut-être aussi de prendre en charge DHTML. Il vaut probablement mieux commencer avec le Visual Basic complet plutôt qu'avec Excel VBA. Utilisez ensuite des contrôles tels que l'API Internet Transfer WinInet et appelez des objets Excel selon vos besoins. Mais il est possible d'utiliser WinInet directement à partir d'un programme Excel VBA.

WinInet est une API - Interface de programmation d'application - vers WinInet.dll. Il est principalement utilisé comme l'un des principaux composants d'Internet Explorer, mais vous pouvez également l'utiliser directement à partir de votre code et vous pouvez l'utiliser pour HTTPS. Écrire le code pour utiliser WinInet est au moins une tâche de difficulté moyenne. En général, les étapes impliquées sont:

  • Connectez-vous au serveur HTTPS et envoyez une demande HTTPS
  • Si le serveur demande un certificat client signé, renvoyez la demande après avoir attaché le contexte du certificat
  • Si le serveur est satisfait, la session est authentifiée

Il existe deux différences majeures dans l'écriture du code WinInet pour utiliser https plutôt que le HTTP normal:

Vous devez également garder à l'esprit que la fonction d'échange d'un identifiant / mot de passe est logiquement indépendante du cryptage de la session à l'aide de https et SSL. Vous pouvez faire l'un ou l'autre, ou les deux. Dans de nombreux cas, ils vont de pair, mais pas toujours. Et la mise en œuvre des exigences WinInet ne fait rien pour répondre automatiquement à une demande de connexion / mot de passe. Si, par exemple, le nom d'utilisateur et le mot de passe font partie d'un formulaire Web, vous devrez peut-être déterminer les noms des champs et mettre à jour les champs à partir d'Excel VBA avant de «publier» la chaîne de connexion sur le serveur. Répondre correctement à la sécurité d'un serveur Web est une grande partie de ce que fait un navigateur Web. D'un autre côté, si l'authentification SSL est requise, vous pourriez envisager d'utiliser l'objet InternetExplorer pour vous connecter à partir de VBA…

En fin de compte, il est possible d'utiliser https et de se connecter à un serveur à partir d'un programme Excel VBA, mais ne vous attendez pas à écrire le code qui le fait en quelques minutes.