Das https-Protokoll dient zur Verschlüsselung und Authentifizierung der Kommunikation zwischen einem Server und einem Clienten. Es kapselt die Kommunikation zwischen den beiden Parteien und verhindert das Abfangen von Daten durch unberechtigte Dritte.
Die Verwendung von https ist daher äußerst interessant zur Verschlüsselung sensibler Daten, also beispielsweise in einem geschützten Bereich, der nur via Login zu erreichen ist oder bei der Bereitstellung eines Webservices, bei dem als Anfrage Passwörter übermittelt werden müssen, um die Berechtigung des Zugangs zu gewissen Daten zu verifizieren.
Um dem Jboss mitzuteilen, dass er über https ansprechbar ist, muss man es ihm in einer oder mehreren Konfigurationsdateien mitteilen. Die Stelle wo und wie dies geschieht differiert zum Teil erheblich zwischen den verschiedenen Versionen des Jboss’. In diesem kurzen Artikel möchte ich kurz die Schritte erläutern, um die notwendigen Einstellungen für den Jboss AS 7 vorzunehmen.
Zentrum der Konfiguration beim Jboss AS 7 ist die standalone.xml
im Ordner /standalone/configuration
im Home-Verzeichnis des Jboss’. Doch bevor wir zu den nötigen Konfigurationen kommen bemerken wir, dass für die Verwendung von https ein Zertifikat notwendig ist. Im späteren echten Betrieb wird man ein echtes kostenpflichtiges Zertifikat verwenden. Für den jetztigen Zeitpunkt reicht es, ein selbst signiertes Zertifikat anzulegen. Ein solches Zertifikat können wir beispielsweise mittels keytool
über die Kommandozeile generieren:
keytool -genkey -alias jboss -keyalg RSA -keystore server.keystore
Hierbei müssen wir natürlich ein Passwort eingeben, was wir der Einfachheit halber jboss7
nennen. Die generierte Datei server.keystore
legen wir im gleichen Ordner wie die standalone.xml
, also im Ordner /standalone/configuration
im Home-Verzeichnis des Jboss’ ab. Nun kommt die entscheidende Konfiguration in der standalone.xml
:
<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server=
"default-host" native="false"/>
<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding=
"http"/>
<connector name="https" protocol="HTTP/1.1" scheme="https" socket-binding=
"https" secure="true">
<ssl name="https" password="jboss7" certificate-key-file=
"../standalone/configuration/server.keystore"/>
</connector>
...
Das wars. Fast. Mit dieser Einstellung kann man nun alle auf dem Jboss installierten Projekte auch über https ansprechen. Der Port 8443 ist hierbei standardmäßig hinterlegt. Jedoch können wir immer noch alles genauso gut nur via http ansprechen. Genau dies möchten wir aber verhindern. Beispielsweise soll man in via Login geschützte Bereiche nur über https gelangen. Analog soll beispielsweise der Webservice auch nur über das sichere https-Protokoll angesprochen werden. Dies realisiert man mit noch zwei weiteren Konfigurationen. Zum einen benötigen wir noch weitere Angaben in der web.xml
, zum anderen noch eine kleine Ergänzung in der standalone.xml
. Ausgehend von der Annahme, der Webservice sei nur über die relative URL /"project-name"/rest/*
anzusprechen, ist für den Webservice noch folgende Ergänzung in der web.xml
von Nöten:
<security-constraint>
<web-resource-collection>
<web-resource-name>Restricted Area for Webservice</web-resource-name>
<url-pattern>/rest/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee >CONFIDENTIAL</transport-guarantee >
</user-data-constraint>
</security-constraint >
Die entscheidende Zeile für die Weiterleitung auf https ist <transport-guarantee>CONFIDENTIAL</transport-guarantee>
. Die Konfiguration für die Weiterleitung beim Login geschieht absolut analog. Allerdings müssen wir dem Jboss noch sagen, dass er bei dieser Weiterleitung auch den Port 8443 benutzen soll. Dies geschieht mit folgenden kleinen Zusatz in der standalone.xml
:
<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server=
"default-host" native="false">
<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding=
"http" redirect-port="8443"/>
<connector name="https" protocol="HTTP/1.1" scheme="https" socket-binding=
"https" secure="true">
<ssl name="https" password="jboss7" certificate-key-file=
"../standalone/configuration/server.keystore"/>
</connector>
...
Mit diesen Einstellung werden wir beim Zugriff auf geschützte Bereiche (Die Bereiche, die wir entsprechend beschrieben in unserer web.xml
deklariert haben) auf die sichere https-Verbindung weitergeleitet. Natürlich nur, wenn wir unseren Browser mitteilen, dass wir dem hinterlegten Zertifikat trauen.
Ich hoffe, dass dieser Artikel dem ein oder anderen ein wenig Konfigurationszeit erspart. Für weitere Fragen oder Kommentare einfach die entsprechende Funktion benutzen.