Um den HTTP-Kanal sichern zu können wurde der Webserver Agent komplett neu implementiert. Dabei wurde die Protokollabwicklung und die Anfragebearbeitung auf verschiedene Klassen aufgeteilt (vgl. Abbildung 7.4).
Die neue Implementierung des Webserver Agenten unterstützt das HTTP Protokoll sowohl über ``blanke'' TCP-Ströme als auch über SSL-Ströme. Die Klassen HttpServer und HttpsServer implementieren die jeweiligen Varianten, die Klasse RequestHandler ist dann für die eigentliche Bearbeitung der Anfrage zuständig.
Die beiden Protokolle HTTP und HTTPS7.5 werden von den beiden Klassen HttpServer und HttpsServer bereitgestellt. In Abhängigkeit von Betriebsmodus des Agentensystems (vgl. Abschnitt 7.11) wird beim Start des Agentensystems eine Instanz der jeweiligen Klasse erzeugt.
Beide Klassen erzeugen eigene Threads, in denen für das jeweilige Protokoll ein ServerSocket Objekt erstellt wird, welches auf eingehende Verbindungen wartet.
Wird eine eingehende Verbindung erkannt, so wird eine neuer TCP-Strom zum Anfragenden aufgebaut. Das weitere Vorgehen unterscheidet sich zwischen den beiden Protokollen.
Für das HTTP-Protokoll wird einfach ein java.net.Socket-Objekt erzeugt, und eine neue Instanz von RequestHandler übergeben.
Beim HTTPS Protokoll erfolgt dann der Zertifikataustausch. Das dabei benutzte Server-Zertifikat erhält der Webserver Agent vom AgentSystemCertManager. Sind die Zertifikate ausgetauscht und bis dahin kein Protokollfehler aufgetreten, dann wird das Client-Zertifikat mit der Klasse HttpsTrustDecider auf seine Gültigkeit überprüft. War dieser Schritt ebenfalls erfolgreich, so wird ein neues RequestHandler erzeugt und daran ein SSLSocket-Objekt übergeben.
Um nicht bei jeder HTTPS-Anfrage von neuem die gesamte Prozedur des Zertifikataustauschs und der Zertifikatüberprüfung durchführen zu müssen, werden mit der Klasse HttpsSessionManager einfache SSL-Sessions unterstützt.
Objekte von Typ RequestHandler übernehmen die protokollunabhängige Anfragebearbeitung des Webserver Agenten.
Um die dezentrale Verwaltung von Agenten-Applets und agentenspezifischen HTML-Seiten deutlich zu machen wurde das alte URL Schema des Webserver Agenten durch das folgende abgelöst:
Für die CORBA/IIOP-Kommunikation zwischen dem Applet und der Agenteninstanz wird ein ORB-Objekt im Applet benötigt. Damit dieses ORB-Objekt SSL-Verbindungen benutzen kann, benötigt es wiederum ein Zertifikat. Nach dem Sicherheitsmodell muß dies das Zertifikat des Anwenders sein, der das Applet bedient.
Nun ist es dem Applet allerdings nicht möglich, das im Browser vorliegende Anwenderzertifikat auszulesen, da dies einer Kompromittierung des Zertifikats gleichkäme. Deshalb wurde folgender Mechanismus implementiert, mit dem das Applet mit einem eigenen Zertifikat versorgt wird, welches aus dem Anwenderzertifikat abgeleitet ist:
Damit verfügt dann das Applet über ein eigenes Zertifikat, das es für die SSL-Verbindungen benutzt und aus dem der Anwender des Applets ersichtlich ist.