Inhoudsopgave
1 Inhoudsopgave 1
INHOUDSOPGAVE ......................................................................................................................... 1
2
DANKBETUIGING ........................................................................................................................... 4
3
ABSTRACT...................................................................................................................................... 5
4
LIJST MET AFKORTINGEN ............................................................................................................... 6
5
VOORSTELLING STAGEBEDRIJF ...................................................................................................... 7
6
GEBRUIKTE TECHNOLOGIEËN ........................................................................................................ 8 6.1
VNC ............................................................................................................................................. 8
6.1.1
VNC oorsprong ........................................................................................................................ 8
6.1.2
Hoe VNC precies werkt ........................................................................................................... 8
6.1.3
RFB .......................................................................................................................................... 9
6.1.3.1
Encoding types ............................................................................................................................. 9
6.1.3.2
Initial Handshaking messages..................................................................................................... 10
6.1.3.3
Client to server messages........................................................................................................... 11
6.1.3.4
Server to client messages ........................................................................................................... 13
6.1.4
7
8
Kort samengevat................................................................................................................... 13
6.2
SSH ............................................................................................................................................ 14
6.3
MYSQL ....................................................................................................................................... 14
6.4
JAVA SE ....................................................................................................................................... 15
GEBRUIKTE TOOLS ....................................................................................................................... 16 7.1
NETBEANS .................................................................................................................................... 16
7.2
CYGWIN & PUTTY .......................................................................................................................... 16
7.3
PHPMYADMIN ............................................................................................................................. 17
7.4
VMWARE INFRASTRUCTURE EN VMWARE ESXI ................................................................................. 17
7.5
NOTEPAD++ ................................................................................................................................. 17
ONDERZOEK ................................................................................................................................ 18 8.1
WAAR MOET MIJN APPLICATIE REKENING MEE HOUDEN? ....................................................................... 18
8.1.1
Probleemstelling ................................................................................................................... 18
8.1.2
Eisen...................................................................................................................................... 19
8.2
SUPPORTPROCES............................................................................................................................ 20
8.3
VNC VANDAAG ............................................................................................................................. 21
8.3.1
RealVNC ................................................................................................................................ 21
8.3.2
TightVNC ............................................................................................................................... 21
Remote Support via VNC en Java Applet | Afflux bv
1
Inhoudsopgave
8.3.3
Andere VNC applicaties ........................................................................................................ 22
8.3.4
Conclusie ............................................................................................................................... 22
DESIGN ................................................................................................................................................ 23 8.4
SCHEMA....................................................................................................................................... 23
8.5
VNC-SERVER ................................................................................................................................ 24
8.6
WEBSERVER.................................................................................................................................. 24
8.6.1
MySQL ................................................................................................................................... 24
8.6.2
Waarom via onze SSH-server? .............................................................................................. 25
8.6.3
SSH-Tunnels .......................................................................................................................... 25
8.7 9
VNC-CLIENT ................................................................................................................................. 25
IMPLEMENTATIE.......................................................................................................................... 26 9.1
VNC-SERVER ................................................................................................................................ 26
9.1.1
VNC-Library ........................................................................................................................... 26
9.1.2
SSH-Library............................................................................................................................ 26
9.1.3
Packages overzicht ............................................................................................................... 27
9.1.3.1
Belangrijkste packages: .............................................................................................................. 27
9.1.4
Use case diagram ................................................................................................................. 28
9.1.5
Applet signen ........................................................................................................................ 29
9.1.6
Browser onafhankelijk .......................................................................................................... 30
9.1.7
Functionaliteit ....................................................................................................................... 34
9.2
WEBSERVER.................................................................................................................................. 35
9.2.1
MySQL ................................................................................................................................... 35
9.2.1.1
Database design ......................................................................................................................... 35
9.2.1.2
Database klaarmaken ................................................................................................................. 36
9.2.1.3
Remote access............................................................................................................................ 36
9.2.2
SSH ........................................................................................................................................ 37
9.2.2.1
SSH daemon poort ..................................................................................................................... 37
9.2.2.2
SSH keys ..................................................................................................................................... 37
9.2.2.2.1
Wat zijn SSH keys? ................................................................................................................. 37
9.2.2.2.2
Hoe werkt het? ...................................................................................................................... 37
9.2.2.2.3
Onze key genereren .............................................................................................................. 38
9.2.2.3
9.3
SSH-Tunnels................................................................................................................................ 39
VNC-CLIENT ................................................................................................................................. 40 9.3.1.1
VNC-Library ................................................................................................................................ 40
9.3.1.2
SSH-Library ................................................................................................................................. 40
9.3.2
Packages overzicht ............................................................................................................... 41
9.3.2.1
9.3.3
Belangrijkste packages ............................................................................................................... 41
Use case diagram ................................................................................................................. 41
Remote Support via VNC en Java Applet | Afflux bv
2
3
9.3.4
Functionaliteit ....................................................................................................................... 43
9.3.4.1
Begin-venster ............................................................................................................................. 43
9.3.4.2
Settings-venster ......................................................................................................................... 44
9.3.4.3
About- venster ........................................................................................................................... 45
9.3.4.4
VNC Client .................................................................................................................................. 45
10
TESTS ........................................................................................................................................... 46
11
INSTALLATIE ................................................................................................................................ 47 11.1
VNC-SERVER ................................................................................................................................ 47
11.2
WEBSERVER.................................................................................................................................. 47
11.3
VNC-CLIENT ................................................................................................................................. 47
12
CONCLUSIE .................................................................................................................................. 48
13
LITERATUUROPGAVE EN REFERENTIES ........................................................................................ 49
14
13.1
WEBSITES..................................................................................................................................... 49
13.2
BOEKEN ....................................................................................................................................... 49
13.3
WEBSITES GEBRUIKT BIJ ONTWERPEN APPLICATIE.................................................................................. 49
FIGUREN EN TABELLEN ................................................................................................................ 50
Remote Support via VNC en Java Applet | Afflux bv
Dankbetuiging
2 Dankbetuiging In het kader van mijn eindwerk voor de opleiding Toegepaste Informatica, afstudeerrichting Applicatie-Ontwikkeling, aan de XIOS Hogeschool Limburg wordt er verwacht dat we gedurende 9 weken succesvol stage lopen. Tijdens deze stage is het de bedoeling dat we onszelf bewijzen door actief mee te draaien in een IT-bedrijf. Hierdoor heb ik leren werken met nieuwe technologieën en ervaren hoe het in het werkelijke bedrijfsleven nu precies gaat. Graag zou ik ook enkele personen bedanken die mij doorheen deze periode gesteund hebben. •
Mijn vader: voor het continue motiveren, advies geven en geloven.
•
Afflux-medewerkers, Vicky, Pieter en Robin: voor de aangename werkomgeving en sfeer en hun onvoorwaardelijke steun en toeverlaat. Ondanks de complexe opdracht is Pieter mij blijven steunen en motiveren. Bovendien heeft Robin mij enkele keren uitgebreid geholpen met onze eigen versie van wat sommigen noemen: XP – eXtreme Programming. En natuurlijk Vicky voor het regelen van alle administratieve zaken.
•
Mijn vriendenkring: voor hun steun en motivatie.
•
Ten slotte wil ik nog graag alle docenten van de XIOS Hogeschool Limburg, in het bijzonder mevrouw Veerle Assaert, bedanken voor het professionele studiemateriaal, de bedrijfsgerelateerde oefeningen en voor de steun die ze boden.
Remote Support via VNC en Java Applet | Afflux bv
4
Abstract
3 Abstract Afflux is sinds 2002 een belangrijke speler op vlak van “advanced ict-solutions”. Ondanks zijn jonge karakter heeft Afflux zich al kunnen profileren als een expert in troubleshooting. Hun grootste handelsmerk is dat geen enkel probleem onopgelost zal blijven. Naast hun diensten (advies, realisatie, beheer/hosting) en producten voert Afflux ook projecten uit. Projecten als het bouwen van een Citrixomgeving tot installaties van grote servers/netwerken. Deze projecten kunnen lopen in heel Nederland en België, zowel voor korte als langere periodes. De opdracht die ik meegekregen heb, luidt als volgt: Stel dat er een probleem onstond bij een klant, dan waren er drie mogelijkheden om dit probleem op te lossen: 1. Onsite gaan 2. De klant moet remote desktopsoftware installeren. 3. Via telefoon Ik heb nu een 4e optie gerealiseerd die het verlenen van support efficiënter maakt. 1. De klant surft naar de support website van Afflux. 2. De klant dient hier zijn/haar klantcode in te geven. 3. Lokaal start er dan een applicatie op die op haar beurt een VNC server start en een ssh tunnel legt met een linux-server van Afflux. 4. Afflux ontvangt hier een melding van en zal dan, door 1 druk op een knop, een adminclient opstarten die een SSH-tunnel legt met dezelfde server, die vervolgens alles doorstuurt en een VNC viewer start. 5. Nu ligt er een beveiligde verbinding tussen de klant en Afflux. 6. Afflux kan de computer van de klant volledig besturen. Voor het realiseren van dit project maak ik gebruik van de talen Java, PHP, SQL en Bash. Hét grote voordeel hiervan is dat deze combinatie op elk besturingssysteem werkt en het is ook nog eens gratis.
Remote Support via VNC en Java Applet | Afflux bv
5
Lijst met afkortingen
4 Lijst met afkortingen GNU
GNU’s Not Unix (zie Linux besturringssysteem)
MySQL
(Open source relationeel database management systeem) afgeleid van SQL
RFB
Remote FrameBuffer (protocol gebruikt in VNC)
SQL
Structured Query Language (taal voor communicatie met database)
SSL
Secure Sockets Layer (encryptie-protocol dat communicatie op het internet beveiligt)
SSH
Secure Shell (protocol/toepassing om beveiligd in te loggen op een remote machine)
VNC
Virtual Network Computing (open source tegenhanger van Remote Desktop, gebruikt RFB protocol)
Remote Support via VNC en Java Applet | Afflux bv
6
Voorstelling stagebedrijf
5 Voorstelling stagebedrijf Het bedrijf waar ik stage heb gelopen, Afflux, is sinds 2002 een belangrijke speler op het gebied van “advanced ict-solutions”. Afflux draagt zorg voor consultancy en implementatie van netwerkbeveiliging en systeembeheer op gebied van informatietechnologie. De voornaamste kennisgebieden zijn: •
Citrix
•
Virtual Machines
•
Cisco
•
Lotus Notes
•
Windows 2003
Waar kan de klant op rekenen? •
Hoogwaardige kwaliteitsoplossingen op elk gebied.
•
Een bijdrage van het begin tot het einde.
•
Professionals die met uw bedrijf meedenken en zorgen dat u op elke vraag een antwoord op maat krijgt.
Hun missie luidt dan ook: ICT SECURITY THROUGH PERSONAL CONSULTANCY BY AFFLUX! Elk bedrijf heeft zijn eigen karakter en behoeftes, en heeft dus nood aan een persoonlijke en totale aanpak. Afflux adviseert, realiseert en beheert elke behoefte. De klant hoeft niet meer voor elke specialisatie een andere firma in te huren. Kortom, Afflux heeft alles onder 1 dak. Naast hun diensten en producten voert Afflux projecten uit, zoals het bouwen van een Citrixomgeving tot installaties van grote servers/netwerken. Deze kunnen lopen in heel Nederland en België, zowel voor korte als lange periodes. Maar ook medewerkers uitlenen (detacheren) aan een klant die nood heeft aan expertise of extra kennis, behoort tot hun opties. Zo kan deze klant erop vertrouwen dat er voor die periode een echte specialist ter zake is. De medewerker zal ervoor zorgen dat behoefte en kennis volledig op elkaar aansluiten. Om dit optimaal te laten verlopen worden de medewerkers dan ook regelmatig bijgeschoold zodat ze voortdurend up-to-date zijn. Voor hun projecten of detacheringen doen ze een beroep op hun eigen interne database met kwalitatief hoogstaande CV’s. Deze houden ze voortdurend up-to-date en vullen ze te allen tijde aan.
Remote Support via VNC en Java Applet | Afflux bv
7
Gebruikte technologieën
6 Gebruikte technologieën Voor het realiseren van mijn stage-project heb ik gebruik gemaakt van meerdere technologieën. De meest courante staan hieronder opgesomd.
6.1 VNC VNC staat voor “Virtual Network Computing” en is een manier om het bureaublad te delen met andere computers. Het maakt hiervoor gebruik van het RFB protocol waarover je hieronder meer kan lezen. VNC is platformonafhankelijk, met andere woorden, u kan met eender welke computer, andere computers overnemen, mits er een VNC server op staat geïnstalleerd. Bovendien ondersteunt VNC de optie om meerdere clients op een server toe te laten. Het is dus mogelijk om met meerdere mensen naar één bureaublad te kijken en het zelfs te besturen. Een praktijkvoorbeeld hiervan: een leraar die iets uitlegt in de informaticaklas kan dit doen via de computer zelf in plaats van via een projector. 6.1.1
VNC oorsprong
VNC is oorspronkelijk ontwikkeld in het Olivetti & Oracle Research Lab dat destijds eigendom was van Olivetti en Oracle Corporation. In 1999 werd het lab verkocht aan AT&T. In 2002 heeft AT&T dit lab gesloten. De naam stamt van een thin-client ATM Netwerkcomputer, die Videotile heette, wat in essentie een LCD-scherm en een pen als invoermethode had, ondersteund door een ‘snelle’ ATM-verbinding met het netwerk. VNC is in wezen een software-only versie van deze 'ATM Network Computer'. 6.1.2
Hoe VNC precies werkt
Zoals hierboven vermeld maakt VNC gebruik van het RFB protocol maar het RFB protocol dient enkel voor het ‘verpakken’ en verzenden van de data. VNC zelf bestaat uit 2 delen, namelijk een client en een server. De server is het programma dat het scherm deelt, de client is het scherm dat signalen ontvangt. VNC draait meestal op poort 5900, maar het is ook mogelijk om meerdere clients op 1 server te laten meekijken. Elke client zal dan een ‘screen’ krijgen en de poorten zullen opgenummerd worden (5901, 5902, enz). Een praktisch voorbeeld hiervan is een leerkracht die een demo geeft op zijn computer en dit rechtstreeks laat zien op alle computers van zijn studenten.
Remote Support via VNC en Java Applet | Afflux bv
8
Gebruikte technologieën
6.1.3
RFB
RFB staat voor “Remote Framebuffer”. Omdat dit protocol op het framebuffer-level werkt, is het toepasbaar op vrijwel alle besturingssystemen zoals Linux, Windows en Macintosh. Doorheen de jaren is RFB uitgegroeid tot een volwaardig protocol waarvan een hele handleiding1 beschikbaar is. Voor een compleet naslagwerk verwijs ik dan ook graag naar de link in de voetnoot. Het concept van RFB is simpel: plaats een vierkant van pixels op de gegeven x en y positie. Het aanvragen van updates wordt gedaan door de RFB Client. Er wordt pas geupdate zodra de RFB Client hierom vraagt. Het is aan te raden alleen updates aan te vragen als er wel degelijk iets verandert op het beeldscherm en niet bij elke muisbeweging. Het is trouwens ook mogelijk om de muis op de VNC Server zelf te simuleren door middel van de Java Robot class. Dit maakt het mogelijk om niet bij elke muisbeweging een update te versturen maar slechts bij elke klik, de muis kan men dan lokaal simuleren via coördinaten.
Figuur 1: RFB protocol
2
Hieronder vindt u een overzicht van de standaard encoding types die gebruikt worden door het RFB protocol. 6.1.3.1 Encoding types Raw encoding: Pure pixel data, niet verkleind of bewerkt. Principieel zouden alle servers en clients deze encoding moeten ondersteunen.
1 2
http://www.realvnc.com/docs/rfbproto.pdf http://www.cl.cam.ac.uk/research/dtg/attarchive/rfb.html
Remote Support via VNC en Java Applet | Afflux bv
9
Gebruikte technologieën
Copy Rectangle encoding Indien dezelfde pixel data al aanwezig is op het systeem waar de server draait, kan de client deze coördinaten doorgeven. De pixels moeten niet gekopiëerd worden maar enkel de locatie. Het genereren van de pixels gebeurd op de RFB server lokaal. RRE encoding (rise-and-run-length) Het basis idee achter RRE encoding is het opdelen van grote ‘rectangles’ of vierkanten in kleinere vierkantjes met dezelfde pixel waardes / kleuren. Het is ontworpen voor situaties waar compressie gewenst is, maar de RFB Client niet krachtig genoeg is om het terug uit te pakken. CoRRE encoding (Compact RRE) CoRRE is een variant op RRE zoals de naam al impliceert echter wordt hier verzekerd dat de maximum grootte van een vierkantje maximaal 255 op 255 pixels is. Bijgevolg volstaat het voor elk vierkantje, 1 byte te alloceren. De beste compressie wordt echter bereikt wanneer we de maximum grootte limiteren tot 48x48 pixels. Hextile encoding Hextile encoding is een variant op CoRRE principe. Vierkantjes worden opgesplitst in 16x16 pixels vierkantjes waar de toegelaten dimensie van elk vierkantje maximaal 4 bits is, 16 bits in totaal. 6.1.3.2 Initial Handshaking messages Een RFB sessie begint logisch gezien met een handshake. Dit is een ict-term voor het onderhandelen van meerdere programma’s onder mekaar (in dit geval client en server) over een set van parameters zoals: protocol versie, parameters, .. Hieronder volgt een van de RFB handshake procedure in opbouwende volgorde: ProtocolVersion Het handshaken begint met het onderhandelen voor de te gebruiken protocol versie. De RFB server stuurt de RFB client een bericht waarin staat welke het nieuwste ondersteunde protocol van de RFB server is. Hierop reageert de RFB client met een bericht waarin staat vermeld welke protocol versie men zal gebruiken. Men gebruikt nu eenzelfde protocol.
Remote Support via VNC en Java Applet | Afflux bv
10
Gebruikte technologieën
Authentication De volgende stap in het handshaking proces is het authenticeren van de client bij de server. De server stuurt hiervoor een nieuw bericht waarin staat welk authenticatie schema gebruikt zal worden (0 = authentication failed, 1 = no authentication needed, 2 = VNC authentication with password) ClientInitialisation Zodra de client geauthenticeerd is bij de server zal de client een initialisatie bericht sturen waarin staat vermeld of de server meerdere clients mag toelaten of niet (0 = false, 1 = true). ServerInitialisation De laatste stap in het RFB handshaking proces is een reactie van de RFB server op het ClientInitilisation bericht. In dit bericht, dat verstuurd wordt naar de client, staat onder andere de grootte van de schermresolutie die gebruikt wordt door de RFB server, het pixelformaat, en de naam die geassocieerd is met de desktop. 6.1.3.3 Client to server messages Na een succesvolle handshake procedure is er dus een verbinding tussen de RFB server en de RFB client. Beide applicaties kunnen nu succesvol met elkaar communiceren over het door hun gekozen protocol. Om daadwerkelijk beelden en triggers te versturen naar de client heeft de server echter nog wat informatie nodig zoals bijvoorbeeld de encoding standaard die gebruikt zal worden, het aantal kleuren, enz... Het RFB protocol is zo ontworpen dat het de RFB client is die alles mag kiezen. Dat kan met volgende methodes: SetPixelFormat Hiermee defineert u het formaat waarin pixel waardes verzonden moeten worden in de FramebuferUpdate berichten. Indien dit bericht leeg is zal de standaard waarde van de RFB server gebruikt worden zoals gedefineerd in het ServerInitialisation bericht. FixColourMapEntries Momenteel is er weinig tot geen ondersteuning voor ‘colour maps’. SetEncodings Met dit bericht geeft de client instructies aan de server over de te gebruiken encoding standaard. Meer informatie over encoding standaarden vindt u in het hoofdstuk hierboven.
Remote Support via VNC en Java Applet | Afflux bv
11
Gebruikte technologieën
De client zal niet 1 encoding type doorsturen, maar een reeks van alle encoding types die het ondersteunt, beginnend met de encoding type die de client het meest prefereert. De server is echter niet verplicht de eerste encoding type te kiezen. Bijvoorbeeld: 0. raw encoding 1. copy rectangle encoding 2. RRE encoding 3. CoRRE encoding 4. hextile encoding Hier heeft men dus als voorkeur om eerst ‘raw encoding’ te gebruiken, gevolgd door ‘copy rectangle encoding’, enz… FramebufferUpdateRequest Met dit bericht is het mogelijk om de server aan te spreken, en een update te vragen voor een specifiek vierkant op een gegeven (x, y, width, height) positie. De server zal hierop antwoorden door een FramebufferUpdate terug te sturen. De server gaat er bovendien vanuit dat de client een kopie bijhoudt van de opgevraagde informatie. Indien de client, om een of andere reden, de inhoud van bepaalde vierkanten is kwijt gespeeld, zal de client een FramebufferUpdateRequest versturen (incremental = false) met de vraag de gegevens van dat vierkantje terug te sturen. In alle andere gevallen zal de client de server aanspreken met een FramebufferUpdateRequest (incremental = true). De server zal dan enkel vierkanten terugsturen waar een verandering is gebeurd. KeyEvent Dit event wordt getriggerd zodra een toets (= key) wordt ingedrukt (true) of losgelaten (false). De codes van de toetsen zijn volgens de ‘keysym’ waardes, gedefineerd door het X Window systeem (Linux). 3
3
Xlib reference manual: http://books.google.nl/books?id=2uVfJj_4AZgC&dq=%22Xlib+Reference+Manual%22&printsec=frontco ver&source=bl&ots=RoZXTJdOtG&sig=t9JO-9MgN82XNE4qXyeicL6FTBg&hl=nl&ei=TfMkSuObBoPVAboyJndBg&sa=X&oi=book_result&ct=result&resnum=5
Remote Support via VNC en Java Applet | Afflux bv
12
Gebruikte technologieën
PointerEvent Dit event geeft ofwel mee als de muis is bewogen (andere x en y coördinaten), ofwel of de muis is ingeduwd (keypress) of is losgelaten (keyrelease). ClientCutText Het is ook mogelijk om ASCII tekst te knippen en te plakken. Het einde van elk bericht wordt aangegeven door een ‘linefeed’ of ‘newline’ (\n) karakter en dus niet met een zogenaamde ‘carriage return’ (\r). 6.1.3.4 Server to client messages De server moet natuurlijk antwoorden op de aanvragen van de RFB client. Dat gebeurd door volgende methodes: FramebufferUpdate Een FramebufferUpdate wordt verstuurd als antwoord op een FramebufferUpdateRequest door de RFB client. Dit bericht bevat een reeks van vierkantjes met pixel data, geëncodeerd volgens de gekozen encoding type. SetColourMapEntries Momenteel is er weinig tot geen ondersteuning voor ‘colour maps’. Bell Maak een piepgeluid bij de client indien dit mogelijk is. ServerCutText Het is ook mogelijk om ASCII tekst te knippen en te plakken. Het einde van elk bericht wordt aangegeven door een ‘linefeed’ of ‘newline’ (\n) karakter en dus niet met een zogenaamde ‘carriage return’ (\r). 6.1.4
Kort samengevat
Eenvoudig uitgelegd werkt het protocol als volgt: 1. Er vindt een handshake plaats tussen de VNC server en VNC client. 2. Als beide partijen geauthenticeerd zijn, worden enkele afspraken uitgewisseld zoals encoding, pixelformat, … 3. De server maakt screenshots en knipt deze in kleinere vierkantjes van bijvoorbeeld 100x100 pixels. Deze worden vervolgens geëncodeerd door de door de client gekozen ‘encoding’ methode, en dan doorgestuurd. Let op, het is altijd de client die een scherm-update aanvraagt!
Remote Support via VNC en Java Applet | Afflux bv
13
Gebruikte technologieën
4. De client decodeert deze images en maakt er weer 1 grote image van die vervolgens op het scherm getoond wordt. 5. De Java client-server maakt gebruik van de Robot class om de “Mouse & keyboard events” in goede banen te leiden.
6.2 SSH4 SSH is een protocol uit de toepassingslaag van de TCP/IP-protocolgroep. De term SSH werd gemakshalve ook gebruikt voor het clientprogramma dat het protocol toepast. Het serverprogramma heet sshd (Secure Shell daemon). SSH vervangt oudere protocollen zoals telnet, rlogin en rsh/rexec. SSH maakt het mogelijk om op een versleutelde manier in te loggen op een andere computer, en op afstand commando’s uit te voeren via een ‘shell’. Omdat SSH met encryptie werkt is het bovendien zo goed als onmogelijk om wachtwoorden of commando’s te achterhalen. SSH staat in deze oplossing redelijk centraal. Het wordt gebruikt om ‘tunnels’ te leggen tussen de client en de webserver, en de webserver en het adminprogramma. Op die manier is de data die getransporteerd wordt afgeschermd en kan niemand er dus aan.
6.3 MySQL MySQL is een open source relationele databasemanagementsysteem (RDBMS) dat gebaseerd is op SQL (Structured Query Language). MySQL is vooral populair geworden omdat de combinatie met PHP zeer doeltreffend bleek. Heel wat internettoepassingen draaien dan ook op een MySQL database. Zo maak ook ik gebruik van een MySQL database. De reden om MySQL te verkiezen boven een andere database is eenvoudig: het is gratis en makkelijk implementeerbaar. Het is niet moeilijk om via Java de database aan te roepen, en later kan heel simpel via PHP, een interface rond het bestaande systeem gebouwd worden, deze optie blijft voorlopig nog open staan.
4
http://nl.wikipedia.org/wiki/Secure_Shell
Remote Support via VNC en Java Applet | Afflux bv
14
Gebruikte technologieën
6.4 Java SE Java SE is de “Standard Edition” van de programmeertaal Java. Hiermee kan je volwaardige programma’s ’s schrijven. Ook bestaat er Java ME, wat staat voor Java Mobile Edition. Deze variant wordt voornamelijk gebruikt om mobiele toepassingen te schrijven en lichte hardware zoals set-top top boxes, afstandsbedieningen, enz enz. Java SE voldoet voor onze applicatie omdat er geen gebruik wordt gemaakt van een webservice zoals Glassfish. Beide programma’s (client en admin) zijn geschreven in Java SE.
Remote Support via VNC en Java Applet | Afflux bv
15
Gebruikte tools
7 Gebruikte tools Om gebruik te maken van bove bovenstaande nstaande technologieën heb ik een aantal specifieke programma’s
/
tools
gedownload
die
het
ontwikkel ontwikkel-proces proces
aanzienlijk
kunnen
vergemakkelijken maar ook versnellen.
7.1 Netbeans Voor het coderen van zowel de clientapplicatie als de adminapplicatie applicatie heb ik gebr gebruik gemaakt van de Netbeans IDE (Integrated Develo Development Environment) omdat je hiermee perfect grote projecten kan beheren, coderen, compileren en testen. Netbeans is gebaseerd op een eindwerk van enkele studenten van de universiteit van Praag in 1997, dat Xelfi noemde. Later heeft SUN het Netbeansproject gestart dat hierop is gebaseerd. Deze IDE is voornamelijk geschreven in en voor Java en daarom is het volgens mij ook de ideale applicatie om te gebruiken. Het biedt onder andere een grafische toolkit (zoals in Microsoft Visual Studio) om je formulieren visueel samen te stellen, in plaats van via de code, en ondersteunt heel wat visuele omgevingen (Swing, AWT, …) …). Verder is Netbeans open pen source source, wat betekent dat er heel wat gratis plugins en modules beschikbaar schikbaar zijn die heel hand handig kunnen zijn in het ontwikkelproces.
7.2 Cygwin & Putty Voor het testen van de SSH-tunnel tunnel tussen zowel het clientprogramma en de webserver, als het adminprogramma en de webserver heb ik gebruik gemaakt van Cygwin en Putty. Cygwin bleek heel handig te zijn omdat Microsoft Windows standaard geen Netcat in Command Prompt ondersteunt. Cygwin ondersteunt dit wel. Netcat is oorspronkelijk geschreven chreven voor een Linux omgeving. Het wordt voornamelijk gebruikt om TCP/IP connecties te testen. Met telnet heb ik dan pakketjes gestuurd naar de desbetreffende poort en deze kon ik dan opvangen met Netcat.
Remote Support via VNC en Java Applet | Afflux bv
16
Gebruikte tools
7.3 PHPMyAdmin Omdat het beheren van een MySQL-database via CLI (Command Line Interface) niet zo efficiënt werkt als een grafische interface heb ik PHPMyAdmin geïnstalleerd op de webserver. Deze open source PHP applicatie is gratis en de populairste hedendaagse MySQLadminomgeving voor Linux-webservers.
7.4 VMWare Infrastructure en VMWare ESXi Het hele systeem werd voornamelijk getest via een lokale webserver. Deze webserver werd geïnstalleerd op een VMWare ESXi server. Hiermee is het mogelijk virtuele servers aan te maken op een hardware-server en deze te beheren via een administratieprogramma (VM Infrastructure Client).
7.5 Notepad++ Omdat een IDE wat complex is om snelle aanpassingen te doen, heb ik hiervoor gebruik gemaakt van Notepad++. Deze applicatie is zeer simpel maar toch zeer krachtig. Notepad++ heb ik vooral gebruikt om de PHP-bestanden aan te maken en de SQL-queries te schrijven.
Remote Support via VNC en Java Applet | Afflux bv
17
Onderzoek
8 Onderzoek Mijn stage-project ben ik begonnen met het onderzoeken van de te-gebruiken technologieën. Daarnaast heb ik ook een klein ‘marktonderzoek’ gedaan zodat ik wist welke programma’s en tools er vandaag gebruikt worden die soortgelijke functionaliteit hebben.
8.1 Waar moet mijn applicatie rekening mee houden? Alvorens exact te kunnen weten aan welke eisen mijn oplossing moet voldoen, heb ik eerst de probleemstelling geanaliseerd. Wat is het exacte probleem, en wat moet er gebeuren? 8.1.1
Probleemstelling
Het probleem stelt zich als volgt: klanten kunnen bellen naar Afflux indien zij een technisch probleem hebben met hun informaticasoftware. Afflux heeft daarop 3 opties: 1. Men stuurt een werknemer ter plekke die vervolgens het probleem oplost. 2. Men geeft instructies via de telefoon om zo het probleem op te lossen. 3. Men laat de klant speciale remote-desktopsoftware installeren waarna Afflux de computer van de klant kan repareren. Deze opties werken op zich goed, maar er zijn enkele nadelen aan verbonden; 1. Economisch gezien niet de beste oplossing en zeker niet rendabel (voor beide partijen) aangezien een Afflux-technieker ter plaatse moet gaan. 2. Niet eenvoudig voor beide partijen om instructies per telefoon te geven/ontvangen om zo het probleem op te lossen. Bovendien moet de Afflux-technieker een grondige analyse doen, om zo achter het juiste probleem te komen, en dat neemt veel tijd in beslag. 3. Dit is al minder nadelig dan de twee voorgaande opties maar nog steeds zeer omslachtig. En wie wilt trouwens zomaar onbekende software (die bovendien remotedesktop toelaat!) installeren? Afflux heeft mij vervolgens opgedragen een nieuwe oplossing te ontwikkelen namelijk “Remote Support via VNC en Java applets”.
Remote Support via VNC en Java Applet | Afflux bv
18
Onderzoek
De voordelen van deze oplossing zijn: 1. De klant moet geen software installeren, enkel naar de website van Afflux surfen. 2. Het werkt op elk besturingssysteem. 3. Het werkt met elke browser (mits Java applets enabled zijn). 4. Het systeem is gratis en maakt geen gebruik van gelicensieerde software. 5. Alle data wordt geëncrypteerd, bovendien worden de meeste firewalls omzeild. 8.1.2
Eisen
Het programma moet dus voldoen aan volgende eisen (deze eisen zijn gesteld door het stagebedrijf en voor een stuk ook door mezelf): 1. De klant moet een Java applet downloaden via de supportwebsite. Deze applet zal de VNC server bevatten. 2. De verbinding moet getunneld worden via SSH naar de webserver waar hij wordt verder getunneld naar de VNC-client (ons admin programma). VNC op zich is unencrypted (alleen het paswoord) dus dit is zeker noodzakelijk. 3. De applet moet te allen tijde een VNC-server kunnen lanceren, ook als er achter een firewall gewerkt wordt. Wij zullen hiervoor de uitgaande poort 443 gebruiken, die meestal open staat. Dit voor het bekende ‘https’ protocol. 4. De kosten moeten beperkt. Er zal dus gebruik gemaakt worden van bestaande open source software om een totaaloplossing te creëren.
Remote Support via VNC en Java Applet | Afflux bv
19
Onderzoek
8.2 Supportproces Hieronder volgt een kort overzicht van het support supportproces. Later zal ik dit proces gedetailleerd toelichten. 1. Klant belt lt naar Afflux met een softwareprobleem (bv:: krijgt software niet verwijderd)
2. De helpdesk analyseert het probleem probleem. Het et gaat om een software probleem, probleem dus is support via onze VNC VNC-oplossing mogelijk. De klant wordt verteld te surfen naar: http://support.afflux.com waar een Java applet wordt geladen.
ige, de klant moet zijn supportcode support 3. De volgende stap is even eenvoudig als de vorige, en/of klantencode invullen. Zodra de klant op “Ok” drukt wordt er lokaal een VNCVNC server gestart, die een beveiligde SS SSH-verbinding legt naar één van de webservers. Er ligt dus een ‘tunnel’ tussen de klant en Afflux zodat niemand aan de data kan.
support In 4. De supportmedewerker van Afflux krijgt hier melding van in het supportprogramma. dit programma kan men dui duidelijk zien welke klant is aangemeld en of de VNC-server VNC online is. De medewerker hoeft enkel nog op “Connect” te duwen. Deze trigger bouwt een nieuwe SSL -tunnel tunnel, maar nu tussen de Webserver en de computer van onze Afflux-medewerker.
Er ligt nu een geëncrypteerde tunnel tussen de klant en onze medewerker.
medewerker heeft nu volledige controle over de computer van de klant, 5. Onze supportmedewerker inclusief toetsenbord en muis , en kan de software verwijderen. In het volgende hoofdstuk zal ik meer in detail treden en de technische kanten van deze oplossing uitleggen.
Figuur 2: SSH tunneling g in Afflux support proces Remote Support via VNC en Java Applet | Afflux bv
20
Onderzoek
8.3 VNC vandaag Marktonderzoek is altijd essentieel. Daarom heb ik mij de eerste week (en ook een stukje van de 2e week) hoofdzakelijk ofdzakelijk bezig gehouden met onderzoek naar volgende punten: •
Hoe werkt VNC, en het RFB protocol? (besproken in het hoofdstuk: gebruikte technologieën)
•
Zijn er al soortgelijke applicaties op de markt?
•
Welke applicaties zijn er überhaupt op de markt? En wa waarom arom juist dergelijke applicaties?
•
Is er eventueel plaats om onze applicatie te commercialiseren? (momenteel is het nog inhouse)
Hieronder vindt u een overzicht van de belangrijkste VNC applicaties, gevolgd door mijn conclusie. 8.3.1
RealVNC5
Zoals al eerder vermeld werd VNC ontwikkeld in het Olivett Olivetti & Oracle Research Lab dat destijds eigendom was van Olivetti en Oracle Corporation. Dat lab is in 1999 overgekocht door AT&T, dat het weer sloot in 2002. Nadien werd het stil rond VNC VNC. Niet veel later hebben enkele ex-werknemers, werknemers, van het in 2002 gesloten research lab, een eigen bedrijf opgericht, namelijk RealVNC. Dit bedrijf is tegenwoordig dé referentie als het gaat om VNC (dat bewijst ook het #1 zoekresultaat in google). Ze hebben reeds reed meer dan 100 miljoen softwaredownloads ownloads gerealiseerd en miljoenen licenties verkocht. Naast een gratis VNC Server en VNC Client staat er ook een uitgebreide documentatie online én de originele bron code van VNC server / client (open source, GNU). 8.3.2
TightVNC6
Een andere belangrijkee speler op de markt is TightVNC dat zijn VNC Client & Software gratis aanbiedt. TightVNC is gebaseerd eerd op RealVNC. Een groot voordeel van TightVNC is dat zij niet alleen VNC ondersteunen maar ook Remote Desktop en andere protocollen. 5 6
http://www.realvnc.com http://www.tightvnc.com
Remote Support via VNC en Java Applet | Afflux bv
21
Onderzoek
8.3.3
Andere VNC applicaties
Enkele andere VNC applicaties die ik ben tegengekomen: •
UltraVNC
•
Chicken of the VNC (Mac)
•
Teamviewer
•
Trivia VNC
•
MetaVNC
•
FlashLight-VNC (flash)
•
GoToServers VNC Server Java applet (GSVNCJ)
8.3.4
Conclusie
Ik kan dus concluderen dat er ondertussen al heel wat applicaties op de markt zijn. Zo goed als alle applicaties zijn closed source, al is de originele code van VNC (RealVNC) wel open source. Een applicatie met identieke functionaliteit hier bedacht is bestaat echter nog niet, wel varianten.
Remote Support via VNC en Java Applet | Afflux bv
22
Design
Design Na het onderzoek is het tijd om de oplossing tot in de details te ontwerpen. Daarbij wordt de applicatie opgedeeld in 3 domeinen namelijk: •
VNC-Server (Java applet voor de klant)
•
Webserver
•
VNC-Client (Java programma voor de admin)
Hiertussen zullen dan de tunnels liggen zoals geïllustreerd in volgende afbeelding.
8.4 Schema Hieronder ziet u een overzichtelijk schema van de gehele applicatie. De stappen en de gebruikte poorten staan er ook bij vermeld:
Figuur 3: Applicatie design
Remote Support via VNC en Java Applet | Afflux bv
23
Design
1) De applet start lokaal een VNC-Server op poort 5800. Er wordt ook meteen een query uitgevoerd op de MySQL-server die zal checken welke poort er mag gebruikt worden voor het tunnelen. 2) Er wordt verbinding gemaakt met de SSH-server van Afflux op poort 443, hier wordt een tunnel aangelegd tussen poort 5800 (applet) -> poort 15000 (SSH-server). Ook word de benodigde data in de tabel ‘sessions’ geinsert. De Admin client die liveupdate zal hier direct een verandering in zien. 3) Zodra Afflux de VNC-Client start wordt er een nieuwe SSH-tunnel gelegd namelijk poort 15000 (server) » poort 20000 (Afflux computer). 4) De Afflux computer en de klant PC zijn nu virtueel met mekaar verbonden over het internet door middel van een beveiligde SSH-tunnel.
8.5 VNC-Server Het klanten programma zal bestaan uit een Java applet en de eigenlijke VNC-Server. Voorlopig is het enkel de bedoeling dat de klanten hun klantencode ingeven waarna ze op een knop klikken. Zodra ze op deze knop duwen zal het hele proces in gang schieten (VNC-Server starten, SSH-tunnel aanmaken, MySQL database updaten, ...) Later is het de bedoeling om hier een licentie systeem achter te hangen. Concreet bedoelt men hiermee: grote bedrijven kunnen deze applicatie gebruiken voor hun ict-support, maar alle data loopt nog steeds via Afflux. Zo kan Afflux ook perfect zien welke bedrijven er support verlenen, en vooral, hoe vaak ze support verlenen. Bij het ingeven van een klanten/supportcode zal er in onze database gecontroleerd worden bij welk bedrijf deze gebruiker hoort en hij zal nadien dan ook enkel verschijnen in de VNC-Client van het desbetreffende bedrijf.
8.6 Webserver De webserver staat centraal in deze applicatie. Hier wordt ondermeer de MySQL database op gehost en hij zorgt ook voor het afhandelen van de SSH tunnels. 8.6.1
MySQL
De database is voorlopig nog zeer simpel en kan indien gewenst nog gekoppeld worden aan het intranet of gewoonweg uitgebreid worden.
Remote Support via VNC en Java Applet | Afflux bv
24
Design
Voorlopig volstaan deze 2 tabellen: •
Klanten
•
Sessions
8.6.2
Waarom via onze SSH-server?
Een van de doelstellingen van de applicatie is om eventuele firewalls en proxy servers aan de client-side en admin te omzeilen. In bijna alle gevallen staat de uitgaande poort 443 (https) echter open. Hier zullen wij gebruik van maken door een SSH connectie te openen via poort 443 naar onze webserver. Onze webserver zal dus naast de standaard poort 22 ook op poort 443 moeten luisteren naar SSH. 8.6.3
SSH-Tunnels
De tunnels zullen zich bevinden tussen: •
VNC-Client & Webserver
•
VNC-Server & Webserver
De tunnels zullen gestart worden vanaf de VNC programma’s en niet vanaf de webserver. Om te weten welke poorten er gebruikt mogen worden zullen de VNC applicaties de database ook eerst moeten aanspreken alvorens een tunnel kan en mag worden gelegd.
8.7 VNC-Client De VNC-Client is het programma dat gebruikt zal worden door Afflux. Het moet in de toekomst mogelijk zijn om meerdere klanten op hetzelfde tijdstip te helpen en daarom heb ik gekozen voor een zeer dynamisch systeem. De hoofd interface zal dan ook bestaan uit een tabel waar men de te-helpen klant kan kiezen. Door simpelweg op de knop ‘Connect’ te klikken zal er een VNC-Client starten, en zal een SSH tunnel aangemaakt worden tussen de localhost en de Afflux webserver, voor een optimaal beveiligde verbinding. Het is dan absoluut onmogelijk om data te ‘sniffen’. De SSH Tunnel zorgt er bovendien voor dat er (via poort 443) een SSH connectie wordt gemaakt met de Webserver waarin vervolgens de SSH Tunnel wordt gelegd. De firewall is nu omzeild en er ligt een beveilgde verbinding tussen de klant en de webserver.
Remote Support via VNC en Java Applet | Afflux bv
25
Implementatie
9 Implementatie 9.1
VNC-Server
De structuur van de VNC-Server / Java Applet is simpel. De applet zal een VNC-server opstarten en vervolgens een SSH-tunnel leggen. Ik heb hiervoor gebruik gemaakt van de 2 volgende libraries mits enkele aanpassingen en verbeteringen. 9.1.1
VNC-Library
Een simpele doch degelijke VNC-Server-library vinden was niet eenvoudig. En een geheel nieuwe VNC-Server schrijven op slechts 9 weken was ook uitgesloten. Uiteindelijk heb ik dan toch een library gevonden7 die VNC-Servers ondersteunt maar deze bleek al 5 jaar niet meer te zijn geupdate. Het gevolg was dat de code heel wat mankementen toonde en de eigenlijke VNC-Server kon pas ‘enabled’ worden na heel wat omzwervingen. Want deze library werd oorspronkelijk bedoelt om virtuele omgevingen zoals Citrix aan te bieden door middel van VNC. Dat wil zeggen; iedere gebruiker krijgt een nieuwe virtueel bureaublad waarop dan een Swing of AWT interface draait. 9.1.2
SSH-Library
Voor het aanleggen van de SSH-tunnels maak ik gebruik van de “Ganymed SSH-2 for Java” library. Deze library is een open source library die valt onder de BSD licentie. De library maakt het mogelijk om te connecteren naar SSH servers vanuit een Java applicatie. Bovendien is het ook mogelijk om local en remote port forwarding toe te passen en zelfs X11 forwarding, SCP (Secure Copy Protocol) en SFTP (SSH File Transfer Protocol). Voor het versleutelen van de data maakt de library gebruik van de technieken: AES, Blowfish en 3DES. Om een tunnel aan te maken vanaf de Java Applet naar de webserver gebruik ik volgende code: LocalPortForwarder lpf1 = conn.createLocalPortForwarder(5800, "192.168.2.165", 15000);
De tunnel wordt dus lokaal geinstancieerd. De Java applicatie heeft op poort 5800 een ServerSocket draaien, de SSH library ‘luistert’ op poort 5800. Bijgevolg wordt alles wat op poort 5800 aankomt, getunneld naar poort 15000 op de webserver.
7
http://www.javaworld.com/javaworld/jw-07-2002/jw-0712-remote.html?page=1
Remote Support via VNC en Java Applet | Afflux bv
26
Implementatie
9.1.3
Packages overzicht
Figuur 4: VNC Server: Packages overzicht
9.1.3.1 Belangrijkste packages: De belangrijkste packages uit deze applicatie zijn zonder twijfel de volgende: •
com.afflux.vnc.applet : Het is in deze package dat de front-end code zich bevind. Hier worden de VNC Server en SSH tunnel geinstancieerd en gecheckt of de klantencode wel klopt.
•
gnu.rfb : In deze package zitten alle classes van de ondersteunde encoding manieren van de VNC Server.
•
ch.ethz.ssh2.auth : Via deze package is het mogelijk om uzelf te authenticeren op een SSH server. Via keys of gebruikersnaam/wachtwoord.
Remote Support via VNC en Java Applet | Afflux bv
27
Implementatie
•
gnu.awt : In deze package zitten enkele java files die worden gebruikt om, pixel per pixel, het bureaublad van de klant, door te sturen naar de Afflux-medewerker.
9.1.4
Use case diagram
Hieronder vindt u een Use Case diagram van de code die ikzelf heb geschreven. Het is deze code die alles laat samenwerken. Het is dus géén Use Case diagram van de hele applicatie wegens te groot/te zwaar/te traag.
Figuur 5: Use case diagram VNC-Server
Remote Support via VNC en Java Applet | Afflux bv
28
Implementatie
9.1.5
Applet signen
De laatste stap is onze Java applet te signen. Dit is nodig omdat een Java applet standaard in een ‘sandbox’ leeft. Dit is een veiligheidsmaatregel die ervoor zorgt dat de applet geen onveilige code kan uitvoeren. Onze applet moet echter 1. Verbinding maken met een remote MySQL-server 2. Lokaal een VNC-server opstarten met SSH tunneling Java beschouwt dit als onveilig en de enige manier om de Java Virtual Machine ons toe te laten de applet ten volle uit te voeren, is door de applet te signen. De Java Software Development Toolkit dient op de computer te zijn geïnstalleerd. Ook moet de %PATH% instelling in Microsoft Windows correct zijn ingesteld: PATH = C:\Program Files\Java\jdk1.6.0_13\bin
De stappen om een Java applet te signen: 8 1. Eerst maken we een nieuwe keystore aan, men zal hier om informatie als naam,
bedrijf, enz vragen die u later kan terugvinden wanneer men de applet uitvoert: keytool -genkey -keystore AffluxKeystore -alias myVNCApplet
2. Vervolgens creëren we een zelf gesigneerd test certificiaat: keytool -selfcert -alias myVNCApplet -keystore AffluxKeystore
3. Natuurlijk willen we even controleren of alles tot nu toe goed verlopen is dus ‘listen’ we de inhoud van onze keystore: keytool -list -keystore AffluxKeystore
4. En tot slot gaan we onze .jar files signen. Let op dat onze mysql library ook gesigned moet worden aangezien deze niet in onze myVNCApplet.jar zit maar erbuiten! jarsigner -keystore AffluxKeystore myVNCApplet.jar myVNCApplet jarsigner -keystore AffluxKeystore mysql-connector-java-5.1.6bin.jar myVNCApplet
8
http://wiki.plexinfo.net/index.php?title=How_to_sign_JAR_files
Remote Support via VNC en Java Applet | Afflux bv
29
Implementatie
De klant zal bij het starten van de Applet deze melding krijgen, als waarschuwing dat de Applet remote connecties zal gebruiken. U ziet onze informatie hierin staan, wat de klant een veilig(er) gevoel zal geven.
Figuur 6: Java Applet: warning message
9.1.6
Browser onafhankelijk
Nadat de klant op “Run” heeft geklikt zal de eigenlijke Applet volledig operationeel zijn. Een groot voordeel van Java Applets is trouwens dat het browser onafhankelijk werkt (“crossbrowser”) en bovendien ook op elk besturingssysteem. De enige vereiste is dat men de “Java JRE 6 v14”9 heeft geïnstalleerd maar dit staat standaard geïnstalleerd op de meeste besturingssystemen. Indien dit niet het geval is zal de applicatie een melding tonen met daarin de link voor de laatste Java versie te downloaden. Enkele screenshots om aan te tonen dat de Java Applet browser onafhankelijk werkt:
9
http://java.sun.com/javase/6/webnotes/6u14.html
Remote Support via VNC en Java Applet | Afflux bv
30
Implementatie
Figuur 7: Java Applet browsertest: Internet Explorer
Remote Support via VNC en Java Applet | Afflux bv
31
Implementatie
Figuur 8: Java Applet browsertest: Mozilla Firefox
Figuur 9: Java Applet browsertest: Google Chrome
Figuur 10: Java Applet browsertest: Opera
Remote Support via VNC en Java Applet | Afflux bv
32
Implementatie
Figuur 11: Java Applet browsertest: Safari
De klant zal dus vrijwel altijd de mogelijkheid hebben deze applicatie te gebruiken. Mocht dit, ondanks alles, toch niet het geval zijn kan men bij Afflux nog altijd de overige support-stappen toepassen zoals in hoofdstuk 8.2.1 staat vermeld.
Remote Support via VNC en Java Applet | Afflux bv
33
Implementatie
9.1.7
Functionaliteit
Zodra de gebruiker het certificiaat heeft geaccepteerd is de applet operationeel. De klant moet nu een speciale klantencode ingeven die hij gekregen heeft van Afflux. Op deze manier kan Afflux voorkomen dat willekeurige personen/bots of simpelweg personen zonder onderhoudscontract, gebruik kunnen maken van de Afflux support oplossing. Indien de ingegeven klantencode fout is zal hier melding van worden gemaakt.
Figuur 12: Java Applet: Incorrecte klantencode
Indien de code correct is zal er een VNC-Server starten, gevolgd door de SSH-tunnel.
Remote Support via VNC en Java Applet | Afflux bv
34
Implementatie
9.2 Webserver 9.2.1
MySQL
Voor het centrale beheer van onze data maken we gebruik van een MySQL database. Deze database draait op een standaard geconfigureerde webserver die we later zullen aanpassen naar gelang onze noden. 9.2.1.1 Database design In het hoofdstuk ‘Design’ hebben we al vastgesteld dat we voorlopig genoeg hebben aan één database met daarin twee tabellen. Type:
Veld:
Int
id
Varchar
naam
Varchar
email
Varchar
klantencode
Figuur 13: Tabel: Klanten
Beschrijving: Deze tabel houdt informatie bij van de klanten. Type:
Veld:
Int
id
Int
user_id
Varchar
ip
Int
poort
Int
time_start
Int
time_end
Int
alive
Figuur 14: Tabel: Sessions
Beschrijving: Deze tabel bevat een overzicht van de VNC- sessies.
Remote Support via VNC en Java Applet | Afflux bv
35
Implementatie
9.2.1.2 Database klaarmaken Tabel: klanten CREATE TABLE IF NOT EXISTS `klanten` ( `id` int(11) NOT NULL auto_increment, `naam` varchar(50) NOT NULL, `email` varchar(50) NOT NULL, `klantencode` varchar(50) NOT NULL, PRIMARY KEY
(`id`)
) ENGINE=MyISAM
DEFAULT CHARSET=latin1;
Tabel: sessions CREATE TABLE IF NOT EXISTS `sessions` ( `id` int(11) NOT NULL auto_increment, `user_id` int(11) NOT NULL, `ip` varchar(15) NOT NULL, `poort` int(11) NOT NULL, `time_start` int(11) NOT NULL, `time_stop` int(11) NOT NULL, `alive` int(1) NOT NULL, PRIMARY KEY
(`id`)
) ENGINE=MyISAM
DEFAULT CHARSET=latin1;
9.2.1.3 Remote access Beide programma’s moeten eender waar, op eender welk besturingssysteem en eender welke browser kunnen werken. Dat deel wordt voornamelijk door Java afgehandeld maar onze database moet ook vanaf elke lokatie en dus elk ip adres aanspreekbaar zijn. Standaard staat dit bij MySQL ingesteld op ‘localhost’. We zullen dit dus moeten aanpassen. Om dit aan te passen, loggen we via SSH in op de webserver waarna we volgende commando’s uitvoeren: We loggen in in de MySQL-server: mysql -u root -p
Vervolgens maken we onze account aan: mysql> CREATE USER 'afflux_vnc'@'%' IDENTIFIED BY 'PASSWORD'; Query OK, 0 rows affected (0.00 sec)
Remote Support via VNC en Java Applet | Afflux bv
36
Implementatie
Als laatste kennen we de juiste rechten toe aan deze gebruiker. SELECT, INSERT, UPDATE en DELETE volstaan. mysql> GRANT SELECT, INSERT ,UPDATE ,DELETE ON afflux_vnc.* TO 'afflux_vnc'@'%' IDENTIFIED BY 'PASSWORD'; Query OK, 0 rows affected (0.00 sec)
9.2.2
SSH
9.2.2.1 SSH daemon poort Onze webserver zal naast de standaard poort 22 ook op poort 443 moeten luisteren naar SSH. Dat kan ingesteld worden door de sshd_config file aan te passen: # pico /etc/ssh/sshd_config What ports, IPs and protocols we listen for Port 22 Port 443 Vervolgens moeten we de SSH daemon herstarten: # /etc/init.d/ssh restart 9.2.2.2 SSH keys 9.2.2.2.1 Wat zijn SSH keys? Op afstand inloggen op een Linux-server kan op meerdere manieren. Enkele voorbeelden hiervan zijn: •
Gebruikersnaam en wachtwoord
•
SSH Keys
•
Port knocking
•
...
Om onze applicatie zo simpel mogelijk te houden, maken we gebruik van SSH public en private keys. Bovendien is deze manier ook veiliger indien alle andere inlog-methodes uitstaan, want zo kan je “brute-force” aanvallen voorkomen. 9.2.2.2.2 Hoe werkt het? SSH Keys werken met een public en een private key. Het concept is simpel. Iedereen die iets wil aanroepen dat beveiligd is met een zogenaamde public key, zal hiervoor de bijhorende private key nodig hebben.
Remote Support via VNC en Java Applet | Afflux bv
37
Implementatie
Bijvoorbeeld: •
Een e-mail bericht dat geëncrypteerd is met een public key zal enkel geopend kunnen worden met de bijhorende private key.
•
Een server met OpenSSH SSH keys zal enkel gebruikers toelaten waarvan de private key overeenstemt met de public key van de gebruiker.
Deze keys zijn ook zeer moeilijk tot niet te kraken. De gebruikte encryptie methodes zijn RSA (4096 bit) of DSA (4096 bit). 9.2.2.2.3 Onze key genereren Een eigen public en private key genereren kan met enkele simpele commando’s. Een gelimiteerde gebruiker aanmaken, deze zal gebruikt worden om de eigenlijke tunnels aan te maken: # adduser abc Adding user `abc' ... Adding new group `abc' (1004) ... Adding new user `abc' (1004) with group `abc' ... Creating home directory `/home/abc' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for abc Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y
De eigenlijke keys aanmaken: 10 # ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/abc/.ssh/id_rsa): Created directory ‘/home/abc/.ssh'. 10
http://www.eukhost.com/forums/f15/login-linux-server-without-password-4688/
Remote Support via VNC en Java Applet | Afflux bv
38
Implementatie
Enter pass phrase (empty for no pass phrase): Enter same pass phrase again: Your identification has been saved in /home/abc/.ssh/id_rsa. Your public key has been saved in /home/abc/.ssh/id_rsa.pub. The key fingerprint is: e3:ad:d4:d6:c4:ae:0e:4b:da:0d:26:f0:e5:46:3f:bc
[email protected]
De keys toevoegen aan de account. Zodra dit gebeur gebeurt is zou alles moeten werken: # cat /home/abc/.ssh/id_rsa.pub >> /home/abc/.ssh/authorized_keys
9.2.2.3 SSH-Tunnels Nu we onze public en private keys gegeneerd hebben is het mogelijk om vanaf de Java programma’s in te loggen op onze Webserver door middel van een open source Java SSH library. Deze zullen we nodig hebben om de tunnels op te zetten. Het opzetten van een SSH-tunnel tunnel gebeurt altijd vanaf machine 1, de machine die de tunnel aanvraagt.
Figuur 15: SSH-Tunnel Tunnel tussen 2 machines
Er zijn 2 soorten tunnels mogelijk: -
Remote tunnel: een tunnel van vanaf de lokale machine door een SSH server
-
Local tunnel: een tunnel van vanaf de remote machine door de SSH client
Een tunnel aanleggen vanaf een LLinuxserver kan met volgend commando: Remote tunnel: # ssh -R R <poortopserver>:<eigenip>:
user@host
Local tunnel: # ssh -L L :loca :localhost:<poortopserver> -l l user@host
Remote Support via VNC en Java Applet | Afflux bv
39
Implementatie
Wij werken echter met een Java applicatie en dus geen echte SSH daemon (sshd) zoals op Linux. Daarom heb ik gekozen om een open source Java SSH-library te implementeren in de VNC-Server en-Client zodat het toch mogelijk is een tunnel te leggen.
9.3 VNC-Client De VNC-Client, het programma voor de Afflux-medewerker, bestaat eenvoudigweg uit twee onderdelen, namelijk het programma zelf en een open source VNC-Client (RealVNC). Ook wordt er weer gebruik gemaakt van de open source SSH library Ganymed SSH-2 for Java. Deze library maakt het mogelijk SSH-tunnels te leggen tussen twee machines zoals hierboven al besproken. 9.3.1.1 VNC-Library Opdat de Afflux-medewerker kan meekijken met de klant zal er een VNC-Viewer (client) moeten worden geïmplementeerd. Ik heb hiervoor dé referentie in het VNC wereldje gekozen namelijk de open source versie van RealVNC (zie ‘VNC oorsprong’). Deze library is gratis beschikbaar op http://www.realvnc.com/cgi-bin/download.cgi onder de ‘GNU General Public License’. 9.3.1.2 SSH-Library Ik maak nog steeds gebruik van dezelfde library als voor de Java Applet. Maar nu zal er een ‘remote tunnel’ aangelegd moeten worden zodat het verkeer van de webserver wordt doorgestuurd naar de Afflux-medewerker. Dat kan met volgend commando: conn.requestRemotePortForwarding("127.0.0.1", 15000, "192.168.2.5", 20000);
Zoals u kan zien worden er bij “Remote Port Forwarding” 4 parameters meegegeven in plaats van 3. De reden hiervoor is dat u met Remote Port Forwarding pakketjes kan doorsturen van server a, door server b, naar server c. (server A » server B » server C). Er kan dus een 3e lokatie toegevoegd worden. Er is reeds een connectie met onze SSH server. De tunnel zal dus luisteren op poort 15000 en zal dit doorsturen naar poort 20000 op de PC van de Afflux-medewerker (192.168.2.5).
Remote Support via VNC en Java Applet | Afflux bv
40
Implementatie
9.3.2
Packages overzicht
Figuur 16: VNC Client: Packages overzicht
9.3.2.1 Belangrijkste packages Dit zijn de belangrijkste packages van dit deel van de applicatie: •
com.afflux.admin Hierin bevind zich alle code omtrent de hoofdapplicatie namelijk de tunnels instantiëren, communiceren met de MySQL database, enz
•
ch.ethz.ssh2.auth : Wederom is deze package super belangrijk, want het is hier dat men inlogt op een SSH server.
•
com.afflux.admin.vnc.vncviewer : In deze package bevinden zich de meeste java files van de VNC viewer. Onder andere het samenstellen van de pixels gebeurt hier.
9.3.3
Use case diagram
Hieronder vindt u een Use Case diagram van de code die ikzelf heb geschreven. Het is deze code die alles laat samenwerken. Het is dus géén Use Case diagram van de hele applicatie wegens te groot/te zwaar/te traag.
Remote Support via VNC en Java Applet | Afflux bv
41
Implementatie
Figuur 17: Use case diagram VNC-Client
Remote Support via VNC en Java Applet | Afflux bv
42
Implementatie
9.3.4
Functionaliteit
Het administratie deel van de gehele applicatie bestaat slechts uit 3 schermen en een externe VNC-Client library (RealVNC). 9.3.4.1 Begin-venster Het beginscherm van de VNC-Client bevat een JTable waarin men een overzichtelijke lijst vindt met alle actieve sessies. Dit scherm wordt vernieuwd elke n seconden. Dit hangt af van de instellingen (zie volgend punt). Na het klikken op een actieve sessie wordt de Jbutton beschikbaar. Zodra men op de JButton klikt (of dubbelklikt op de desbetreffende rij) wordt de SSH-tunnel aangemaakt en vervolgens start er een instantie op van de VNC-Client. Indien alles correct verloopt zal de VNC-Client nu om een wachtwoord vragen (van de VNC-Server) en vervolgens het bureaublad van de klant tonen. Indien op de VNC-Server geen wachtwoord staat ingesteld kan eender wie connecteren (mits u de poort weet).
Figuur 18: VNC Client: Index scherm
Remote Support via VNC en Java Applet | Afflux bv
43
Implementatie
9.3.4.2 Settings-venster Natuurlijk is het ook mogelijk om de settings van het programma aan te passen. Er wordt hiervoor gebruik gemaakt van de Java Properties class. 11
Figuur 19: VNC Client: Settings
Er zijn 5 parameters die noodzakelijk zijn om het programma succesvol te laten uitvoeren. 1. Database name : De naam van de MySQL database 2. Database username : De gebruiker die correcte rechten heeft tot bovenstaande database 3. Database password : Het paswoord voor bovenstaande gebruiker 4. Database host : Het IP-adres naar de database server 5. Refresh time: Aantal milliseconden om te checken of er nieuwe gebruikers in de database staan
11
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Properties.html
Remote Support via VNC en Java Applet | Afflux bv
44
Implementatie
9.3.4.3 About- venster Hieronder vindt u het “About”-scherm waarin u meer informatie vindt over de applicatie.
Figuur 20: VNC Client: About scherm
9.3.4.4 VNC Client TightVNC heeft een connectie naar een andere computer die de VNC Server applet heeft open staan.
Figuur 21: VNC Client in actie
Remote Support via VNC en Java Applet | Afflux bv
45
Tests
10 Tests Het testen van mijn applicatie gebeurde vooral door mijn collega Robin. Elke dag vroeg ik wel of hij even iets kon testen, en met succes. Op deze manier zijn heel wat errors verholpen. Ik ben ook van mening dat JUnit tests hier haast onmogelijk zijn. Bovendien geldt ook dat men zijn eigen fouten minder snel ziet, hoe stom ze ook zijn. Daarom vond ik het super dat Robin (maar ook Pieter en Vicky) mij geholpen hebben met het testen van deze applicatie. Het testen gebeurde vooral door server of client ‘te spelen’, en dan vervolgens een klant-innood procedure na te spelen. We hebben het ook getest over meerdere platformen en browsers. Voorlopig, en voor zover ik weet, bevat de applicatie geen bugs meer, maar dat is natuurlijk geen zekerheid. Dat wijst de tijd uit. Het is pas door intensief gebruik dat men de echte bugs vindt. Google Mail zit toch ook nog altijd in beta?
Remote Support via VNC en Java Applet | Afflux bv
46
Installatie
11 Installatie Ik heb gestreefd naar een zo simpel mogelijke applicatie voor zowel de klant als voor de Affluxmedewerker. Het is dan ook zeer simpel om de gehele applicatie te installeren. De installatie-procedure is opgedeeld in 3 stappen.
11.1 VNC-Server De VNC-Server installeren kan simpelweg door de Java Applet te uploaden via een FTP-server naar de Webserver. Vanaf dan is de applet publiek beschikbaar. Let er wel op dat de applet gesigned moet zijn! De uitleg hierover vindt je terug in het hoofdstuk “Implementatie”.
11.2 Webserver De webserver configureren vraagt wat meer werken maar dit is slechts eenmalig. Volgende stappen moeten worden uitgevoerd. Deze stappen staan uitgebreid beschreven in het hoofdstuk “Implementatie”. 1. Database aanmaken 2. Database remote toegankelijk maken 3. SSH poort aanpassen naar 443 4. VNC gebruiker ‘sandboxen’ of ‘chrooten’ voor extra beveiliging
11.3 VNC-Client Ook het administratie-programma installeren is simpel. Nadat het programma gecompileerd is heeft u een .jar bestand. Het is voldoende dit .jar bestand te distribueren onder de werknemers en dan kan ieder support geven.
Remote Support via VNC en Java Applet | Afflux bv
47
Conclusie
12 Conclusie Het was een heel boeiend project waar ik mezelf helemaal heb in kunnen verdiepen. Bovendien heb ik mij ook kunnen bewijzen tegenover mijn stagebedrijf. Op mijn stage heb ik ondermeer geleerd om zelfstandig te werken in een professionele omgeving. Ik heb dan ook heel veel geleerd gedurende deze 9 weken. Niet alleen qua application development maar ook qua netwerken en serverbeheer. Het project dat ik heb moeten realiseren is dan ook een totaalpakket dat zich verspreid over meerdere omgevingen en technologieën. Voorlopig zal het project op proef draaien voor Afflux. Nadien is het de bedoeling om deze applicatie uit te breiden naar een groter systeem, waarbij klanten het kunnen gebruiken in hun eigen ICT-omgeving. Dit zal dan werken met een soort van licentie-systeem. Hier werd natuurlijk al rekening mee gehouden in het design van de applicatie, zodat er niet veel aanpassingen nodig zijn.
Remote Support via VNC en Java Applet | Afflux bv
48
Literatuuropgave en referenties
13 Literatuuropgave en referenties 13.1 Websites •
http://www.wikipedia.com
•
http://www.realvnc.com/docs/rfbproto.pdf
13.2 Boeken •
P.J. Deitel & H.M. Deitel – (2007) – Java, How to program (Seventh Edition). 1596 p. Deitel & Associates, Inc.
13.3 Websites gebruikt bij ontwerpen applicatie •
http://www.csd.uwo.ca/~magi/doc/vnc/docs.html
•
http://en.wikipedia.org/wiki/Comparison_of_Java_Remote_Desktop_projects
•
http://www.javaworld.com/javaworld/jw-07-2002/jw-0712-remote.html?page=1
•
http://users.rcn.com/tushar.manglik/
•
http://java.sun.com/docs/books/tutorial/networking/overview/networking.html
•
http://timesync.gmu.edu/wordpress/?p=76
•
http://www.eukhost.com/forums/f15/login-linux-server-without-password-4688/
Remote Support via VNC en Java Applet | Afflux bv
49
Figuren en tabellen
14 Figuren en tabellen Figuur 1: RFB protocol ................................................................................................................... 9 Figuur 2: SSH tunneling in Afflux support proces........................................................................ 20 Figuur 3: Applicatie design .......................................................................................................... 23 Figuur 4: VNC Server: Packages overzicht ................................................................................... 27 Figuur 5: Use case diagram VNC-Server ...................................................................................... 28 Figuur 6: Java Applet: warning message ..................................................................................... 30 Figuur 7: Java Applet browsertest: Internet Explorer ................................................................. 31 Figuur 8: Java Applet browsertest: Mozilla Firefox ..................................................................... 32 Figuur 9: Java Applet browsertest: Google Chrome ................................................................... 32 Figuur 10: Java Applet browsertest: Opera................................................................................. 32 Figuur 11: Java Applet browsertest: Safari ................................................................................. 33 Figuur 12: Java Applet: Incorrecte klantencode.......................................................................... 34 Figuur 13: Tabel: Klanten ............................................................................................................ 35 Figuur 14: Tabel: Sessions ........................................................................................................... 35 Figuur 15: SSH-Tunnel tussen 2 machines .................................................................................. 39 Figuur 16: VNC Client: Packages overzicht .................................................................................. 41 Figuur 17: Use case diagram VNC-Client ..................................................................................... 42 Figuur 18: VNC Client: Index scherm ........................................................................................... 43 Figuur 19: VNC Client: Settings ................................................................................................... 44 Figuur 20: VNC Client: About scherm.......................................................................................... 45 Figuur 21: VNC Client in actie ...................................................................................................... 45
Remote Support via VNC en Java Applet | Afflux bv
50