Toegang tot een beveiligde website met behulp van VBA

Is het mogelijk om toegang te krijgen tot webpagina's met HTTPS en die login / wachtwoord vereisen met behulp van Excel? Nou ja en nee. Hier is de deal en waarom het niet zo eenvoudig is.

Laten we eerst de voorwaarden definiëren

HTTPS is volgens afspraak de identificatie voor wat SSL (Secure Sockets Layer) wordt genoemd. Dat heeft eigenlijk niets te maken met wachtwoorden of logins als zodanig. Wat SSL doet is het opzetten van een gecodeerde verbinding tussen een webclient en server zodat er geen informatie tussen de twee "in het vrije" "wordt verzonden - met behulp van niet-gecodeerde transmissies. Als de informatie login- en wachtwoordinformatie bevat, beschermt het coderen van de verzending ze tegen nieuwsgierige blikken ... maar het coderen van wachtwoorden is geen vereiste. Ik gebruikte de uitdrukking "volgens afspraak" omdat de echte beveiligingstechnologie SSL is. HTTPS geeft alleen aan de server door dat de client van plan is dat protocol te gebruiken. SSL kan op verschillende andere manieren worden gebruikt.

Dus ... als uw computer een URL verzendt naar een server die SSL gebruikt en die URL begint met HTTPS, zegt uw computer tegen de server:

"Hé meneer Server, laten we dit coderingsgedrag de hand geven, zodat alles wat we vanaf nu zeggen niet zal worden onderschept door een of andere slechterik. En als dat klaar is, ga je gang en stuur me de pagina met de URL."

De server verzendt de belangrijkste informatie voor het opzetten van een SSL-verbinding. Het is aan uw computer om er echt iets mee te doen.

Dat is 'key' (woordspeling ... nou ja, soort bedoeld) om de rol van VBA in Excel te begrijpen. De programmering in VBA zou eigenlijk de volgende stap moeten nemen en de SSL aan de clientzijde implementeren.

'Echte' webbrowsers doen dat automatisch en tonen u een klein slotsymbool in de statusregel om aan te geven dat dit is gebeurd. Maar als de VBA de webpagina gewoon als een bestand opent en de informatie erin in cellen in een spreadsheet leest (een veel voorkomend voorbeeld), zal Excel dat niet doen zonder enige extra programmering. Het genereuze aanbod van de server om handen te schudden en veilige SSL-communicatie in te stellen, wordt gewoon genegeerd door Excel.

Maar u kunt de gevraagde pagina op precies dezelfde manier lezen

Laten we om het te bewijzen de SSL-verbinding gebruiken die wordt gebruikt door de Gmail-service van Google (die begint met 'https') en een oproep coderen om die verbinding te openen alsof het een bestand is.

Dit leest de webpagina alsof het een eenvoudig bestand was. Aangezien recente versies van Excel HTML automatisch importeren, wordt de Gmail-pagina (minus de dynamische HTML-objecten) geïmporteerd in een spreadsheet nadat de Open-instructie is uitgevoerd. Het doel van SSL-verbindingen is informatie uit te wisselen, niet alleen een webpagina te lezen, dus dit zal u normaal gesproken niet ver brengen.

Om meer te doen, moet u op een of andere manier in uw Excel VBA-programma zowel het SSL-protocol ondersteunen als misschien ook DHTML ondersteunen. U bent waarschijnlijk beter af te beginnen met de volledige Visual Basic in plaats van Excel VBA. Gebruik vervolgens besturingselementen zoals de Internet Transfer API WinInet en roep Excel-objecten aan als dat nodig is. Maar het is mogelijk om WinInet rechtstreeks vanuit een Excel VBA-programma te gebruiken.

WinInet is een API - Application Programming Interface - naar WinInet.dll. Het wordt voornamelijk gebruikt als een van de belangrijkste componenten van Internet Explorer, maar u kunt het ook rechtstreeks vanuit uw code gebruiken en u kunt het gebruiken voor HTTPS. Het schrijven van de code om WinInet te gebruiken is op zijn minst een middelhoge taak. Over het algemeen zijn de stappen:

  • Maak verbinding met de HTTPS-server en verzend een HTTPS-aanvraag
  • Als de server om een ​​ondertekend clientcertificaat vraagt, verzendt u de aanvraag opnieuw nadat u de certificaatcontext hebt toegevoegd
  • Als de server tevreden is, wordt de sessie geverifieerd

Er zijn twee grote verschillen bij het schrijven van de WinInet-code om https te gebruiken in plaats van de reguliere HTTP:

U moet er ook rekening mee houden dat de functie van het uitwisselen van een login / wachtwoord logisch onafhankelijk is van het coderen van de sessie met behulp van https en SSL. Je kunt het een of het ander doen, of beide. In veel gevallen gaan ze samen, maar niet altijd. En het implementeren van de WinInet-vereisten doet niets om automatisch te reageren op een login / wachtwoordverzoek. Als de login en het wachtwoord bijvoorbeeld deel uitmaken van een webformulier, moet u mogelijk de namen van de velden achterhalen en de velden bijwerken vanuit Excel VBA voordat u de inlogreeks naar de server "post". Correct reageren op de beveiliging van een webserver is een groot deel van wat een webbrowser doet. Aan de andere kant, als SSL-authenticatie vereist is, kunt u overwegen het InternetExplorer-object te gebruiken om in te loggen vanuit VBA ...

Het komt erop neer dat het gebruik van https en inloggen op een server vanuit een Excel VBA-programma mogelijk is, maar verwacht niet dat u de code schrijft die dit binnen enkele minuten doet.