Skip to main content

Ein minimalistischer Webserver mit SSL Unterstützung in JAVA

Für den Fall das man mal einen kleinen WebServer mit SSL Unterstützung benötigt, den man darüber hinaus auch nicht installieren muss, ist WinStone interessant.

Es muss dazu nur eine gültige JavaRE installiert sein und mit 319kb Dateigröße ist er erfreulich klein.

Featureübersicht

Kostenlos (Haken)
Klein (Haken)
Muss nicht installiert werden (portable) (Haken)
Open Source (Haken)
Unterstützt SSL (Haken)
Funktioniert unter Linux und Windows (Haken)
Port(s) konfigurierbar (Haken)
Logging konfigurierbar (Haken)
Benötigt keine Adminrechte (Haken)
"Installationspfad" frei wählbar (Haken)


Zertifikat für SSL erstellen

Die folgende Codezeile legt auf deinem Desktop den Keystore mit dem selbstsignierten SSL Zertifikat an. Die Gültigkeit wird dabei mit -validity festgelegt und beträgt hier 30 Jahre ( 365 * 10 * 3 = 10950). Storepass ist das Passwort zu dem Keystore. Kann nach belieben auch angepasst werden.

"%java_home%\bin\keytool" -selfcert -genkey  -keyalg RSA -keystore %userprofile%\desktop\keystore.jks -storepass 123456 -validity 10950

Anschliessend dann den Keystore in dasselbe Verzeichnis wie Winstone verschieben. Mehr zum Thema keytool auf den Seiten von Oracle.


Aufruf des WebServers

Für den Aufruf ist es ratsam eine Batchdatei in demselben Verzeichnis wie die heruntergeladene Datei winstone-0.9.10.jar anzulegen, die in z.B. so aussehen kann

@echo off
title winStone
set httpport=8080
set wwwroot=%~dp0html
set logdir=%~dp0logs
set https=--httpsPort=443 --httpsKeyStore=%~dp0keystore.jks --httpsKeyStorePassword=123456
if not exist %wwwroot%\NUL mkdir %wwwroot%
if not exist %logdir%\NUL mkdir %logdir%
if not exist %~dp0jar\NUL (
    mkdir "%~dp0jar"
    move winstone-0.9.10.jar "%~dp0jar" > nul
)
 
java -jar %~dp0jar\winstone-0.9.10.jar --webroot=%wwwroot%\ --logfile=%logdir%\log.log --httpPort=%httpport% --accessLoggerClassName=winstone.accesslog.SimpleAccessLogger --useSavedSessions --httpListenAddress=127.0.0.1 %https%

Der eintrag --httpListenAddress=127.0.0.1 fürht dazu, das der Server nur über Localhost aufrufbar ist. Besucher von aussen werden abgelehnt. Durch löschen dieses Parameters sind aufruf über alle Netzwerkadressen zulässig.

Siehe dazu auch die Dokumentation auf http://winstone.sourceforge.net/#using


Parameter in eine Properties-Datei verschieben

Per Default sucht die JavaDatei nach einer Properties Datei namens winstone.properties im selbsen Verzeichnis.

(Warnung) Das ist auch die besserer Methode, weil sonst alle Parameter im Taskmanager zu sehen sind, inkl. dem httpsKeyStorePassword

Beispielinhalt der winstone.properties Datei
webroot=html
logdir=logs
httpsPort=443
httpsKeyStore=keystore.jks
httpsKeyStorePassword=123456
accessLoggerClassName=winstone.accesslog.SimpleAccessLogger
useSavedSessions=true
httpListenAddress=127.0.0.1
httpPort=8080

(Info) Die Pfadangaben sind alle relativ zum aktuellen Verzeichnis.