SAP Business Objects ist eine Java Anwendung. Im Gegensatz zum darunterliegenden Webserver steht diese meist im Fokus wenn etwas konfiguriert werden soll.
In diesem Artikel zeige ich, wie man den Apache Tomcat Webserver sicher konfigurieren kann.
Der Tomcat Webserver ist ein Open-Source Webserver, der JAVA Anwendungen ausführt. Dieser wird von SAP als Standard Webserver installiert. Man kann aber Business Objects auch auf anderen Java Webservern installieren, wenn diese von SAP unterstützt werden.
Welche Tomcat Version vorliegt, ist abhängig vom SAP Business Objects Release. Dieses kann man im Hinweis 2112338 nachsehen. Dort kann man dann sehen, dass z. B. folgende Abhängigkeiten bestehen
SAP Produkt | Tomcat Version | SAP JVM | based onOracle JVM |
BI 4.2 SP04 | 8.5.13 | 8.1.015 | 8u72 |
Dies ist wichtig wenn es um die SSL Konfiguration des Tomcat Servers geht. Der Tomcat Server kann bei der SSL Konfiguration grundsätzlich auf eine OpenSSL oder eine native Java Secure Socket Extension (JSSE) Implementierung zurückgreifen. Bei der SAP Business Objects Installation wird aber kein OpenSSL mitinstalliert.
Mit dem folgenden Kommando erzeugen wir einen neuen Keystore und setzen einen Distinguished Name. Bei diesem muss mindestens der Common Name (CN) angegeben werden. Mit der Extension SAN (Subject Alternative Name) setzen wir noch einmal den Full Qualified Hostname. Dies ist später beim signierten Zertifikat wichtig.
Der Keystore wurde in einem sicheren Ordner, auf dem die Zugangsrechte eingeschränkt sind, abgelegt.
D:\%JAVA_HOME%\bin\keytool -genkey -alias bopserver -keyalg RSA -keysize 2048 -keystore D:\secure\%COMPUTERNAME%_keystore.jks -dname "CN=hostname.example.org,OU=SAP-Basis, O=an-it, L=Halle, ST=NRW, C=DE" -ext SAN=dns:<hostname.example.org>
Damit die HTTPS Verbindung im Browser keine Fehler anzeigen, ist es wichtig die SAN Extension zu setzen und dieses Zertifikat von einer Certificate Authority (CA) signieren zu lassen. In Firmen wird dazu meist eine interne Public Key Infrastructure (PKI) aufgesetzt, die solche Zertifikate zentral verwaltet. Wenn dann das Zertifikater der CA in den Browsern der Benutzer, z. B. per AD Gruppenrichtlinie, hinterlegt wird, gibt es auch keine Fehler oder Warnhinweise im Browser.
Der Zertifikatsrequest wurd erzeugt und die CSR Datei an die Verantwortlichen der PKI zur Signierung verschickt.
D:\%JAVA_HOME%\bin\keytool -certreq -alias bopserver -file D:\secure\%COMPUTERNAME%.csr -keystore D:\secure\%COMPUTERNAME%_keystore.jks -ext SAN=dns:<hostname.example.org>
Wenn das Zertifikat signiert wurde, muss es noch im Keystore importiert werden.
D:\%JAVA_HOME%\bin\keytool -import -alias bopserver -file D:\secure\<hostname>_chain_cert.p7b -keystore D:\secure\%COMPUTERNAME%_keystore.jks
Anschließend kann der Tomcat Webserver für HTTPS konfiguriert werden.
Die Konfiguration des Tomcat Servers liegt unter <SAP BusinessObjects Installation>\tomcat\conf.
In diesem Ordner muss die server.xml wie folgt angepasst werden. Der Connector port „8080“ wird standardmäßig für HTTP verwendet. Hier gibt es ein Attribut redirectPort. Dieser wird von 8443 auf 443 gesetzt. Ich möchte hier die dedizierte Portangabe wegkonfigurieren.
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="443" compression="on"
URIEncoding="UTF-8" compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,text/json,application/javascript,application/json"
/>
<Connector port="443" protocol="HTTP/1.1" proxyName="<hostname>.example.org"
SSLEnabled="true" maxThreads="150"
scheme="https" secure="true" clientAuth="false"
sslProtocol="TLS" enableLookups="false"
disableUploadTimeout="true" acceptCount="100"
keystorePass="<SecurePassword>"
keystoreFile="D:\secure\%COMPUTERNAME%_keystore.jks"
/>
Im unteren Abschnitt der Konfiguration muss ein neuer Connector Port konfiguriert werden. Neben dem Port ist hier die protocol Angabe wichtig. Mit der generischen Angabe „HTTP/1.1“ wird die Implementierung automatisch ausgewählt. Man kann auch eine dedizierte JSSE Implementierung angeben:
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" sslImplementationName="org.apache.tomcat.util.net.jsse.JSSEImplementation"
...
Die weiteren Attribute sind dann von dieser Implementierung abhängig. Nach einem Neustart steht dem HTTPS-Zugriff nichts mehr im wege.
Mit der oben aufgeführten Konfiguration ist aber weiterhin der HTTP-Zugriff möglich.
Um HTTPS zu erzwingen muss entweder der oben aufgeführte HTTP Connector Port deaktiviert werden (mit <!– <Connector … > –> auskommentieren) oder ein Redirect konfiguriert werden.
Der Redirect Port ist im HTTP Connector Port bereits angegeben. Dieser muss jetzt erzwungen werden. Dazu im Tomcat Konfigurationsordner in der Datei web.xml folgende Einträge einfügen und den Tomcat Webserver neu starten.
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Context</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
Damit auch das Clienttool Lumira per HTTPS kommunizieren kann, muss auch der folgende Hinweise beachtet werden.
In der axis2.xml unter SAP BusinessObjects Installation>\SAP BusinessObjects Enterprise XI 4.0\warfiles\webapps\dswsbobje\WEB-INF\conf folgende Einträge hinzufügen.
<transportReceiver name="http"
class="org.apache.axis2.transport.http.AxisServletListener">
<parameter name="port">8080</parameter>
</transportReceiver>
<transportReceiver name="https"
class="org.apache.axis2.transport.http.AxisServletListener">
<parameter name="port">443</parameter>
</transportReceiver>
Anschließend muß noch die App deployed werden. Danach kann man sich auch mit Lumira per HTTPS verbinden.
1648573 – How to configure SSL/TLS on Tomcat in BI 4.x
2659668 – SOAP message MUST NOT contain a Document Type Declaration (DTD)
1807142 – How to enable HTTPS/SSL Designer against BIP
Apache Tomcat: SSL Dokumentation