Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:oracle_rest_data_service_tomcat

Oracle ORDS 3.0 (Oracle REST Data Services) mit dem Apache Application Server Tomcat unter Windows 2012 betreiben - SSL einsetzen

Version: Juni 2016 - Letzte Anwendung im Kundenprojekt 2018

Übersicht ORDS siehe Oracle ORDS 3.0 (Oracle REST Data Services)

Ziel ist es einen Oracle Apex Umgebung mit Single Sign on unter Windows zu betreiben.

Eingesetzt werden soll dazu der Apache HTTP Server und Apache Tomcat.

Vielen Dank auch an Niels de Bruijn und Dietmar Aust, für Ihre hervorragende Dokumentation, leider erst auf der Apex Connect 2016 davon erfahren, das hätte mir im Vorfeld viel Arbeit erspart, so konnte ich aber doch noch so einige Details daraus ableiten.

Voraussetzung:

  • Oracle Datenbank 12c und Oracle Apex 5.0 konfiguriert
  • Erste Apex Applikation kann über den Standalone ORDS 3.0 schon aufgerufen werden

Ablauf:

  • Software download
  • Java einrichten, falls noch nicht vorhanden
  • ORDS Standalone konfigurieren wie unter Oracle ORDS 3.0 (Oracle REST Data Services) beschrieben
    • Mit diesen Schritt wird die DB Konfiguration eingerichtet und die notwendigen Konfigurationsdateien werden angelegt
  • Tomcat installieren
  • APEX Bilder hinterlegen
  • ORDS in Tomcat deployen
  • Tomcat Autostart einrichten
  • Apache HTTP einrichten
  • Single Sign on konfigurieren

In den folgenden Kommandozeilen Beispielen wird die MS PowerShell verwendet!

Für den ersten Test Case wird eine Windows 2012 TechNet Evaluation Center Umgebung verwandt, der auch dann den Domain Controller der Umgebung zur Verfügung stellt.

Übersicht über den generellen Aufbau:

 Oracle ORDS mit Apache und Single Sign On


Download der notwendigen Software

Java 8

Java SDK mit jdk-8u92-windows-x64.exe installieren, falls noch nicht vorhanden.

Für das Scripting ist es am einfachsten in ein eigenes Verzeichnis wie „D:\java\jdk_8.92“ und „D:\java\jre_8.92“ zu installieren, das ist aber im Prinzip reine Geschmackssache.

Damit Tomcat auch das richtige Java findet muss die Umgebungsvariable JAVA_HOME und JRE_HOME vor dem Start gesetzt werden!

Das kann jeweils über das jeweilige Skript erfolgen oder über die Umgebungsvariablen Einstellung.

Um auf gewohnte Dialog in Windows 2012 zu gelangen ist es ja oft ein weiter Weg:

Windows Key+Rechte Mouse Taste auf „This PC“ auf dem Startbildschirm, „Properties“ auswählen, und dann den gewohnten Dialog über „Control Panel\System and Security\System“„Advanced system settings“ folgen.

Überprüfen in einer neuen Powershell Session mit:

echo $ENV:JAVA_HOME
 
echo $ENV:JRE_HOME

Oracle ORDS 3.0 (Oracle REST Data Services) installieren/konfigurieren

Die ORDS Zip Datei überprüfen und auspacken, zum Beispiel nach „d:\oracle\products\ords.3.0.4“

Überprüfen

mkdir D:\oracle\product\ords.3.0.4
 
cd D:\oracle\product\ords.3.0.4
 
cp C:\Users\gpipperr.jupiter\Downloads\ords.3.0.4.60.12.48.zip D:\oracle\product\ords.3.0.4
 
 
Get-FileHash .\ords.3.0.4.60.12.48.zip -Algorithm md5
 
Algorithm       Hash                                                                   
---------       ----                                                                   
MD5             185BF02DE71E8B6E3E61762FDB49E8BB

Auspacken

unzip ords.3.0.4.60.12.48.zip 
rm ords.3.0.4.60.12.48.zip 

Mit „mklink“ ein Verzeichnis „ords“ anlegen

ORDS konfigurieren und in der ORDS Schemas in der DB installieren

Voraussetzung APEX installiert ⇒ Oracle Apex 5.0.1 mit der Oracle Datenbank 12c:

  • APEX 5 installiert
  • APEX Listener Schema angelegt + Password aufgeschrieben!

Im ersten Schritt wird der ORDS Standalone konfiguriert und getestet um eine gültige Konfiguration zu erhalten.

Siehe dazu ⇒ Oracle ORDS 3.0 (Oracle REST Data Services)

Nach diesem Schritt wird der ORDS in Tomcat integriert


Apache Tomcat 8 installieren

Arbeitsverzeichnis

Verzeichnis für Tomcat anlegen, wie D:\srv

mkkdir D:\srv\tomcat8

Überprüfen

Testen ob der Download geklappt hat und die Datei auch wirklich die erwartete Datei ist.

Auf der Apache Website ist folgender MD5 Hash hinterlegt: „7f1c6a4d666b9c76ef3b72038c5a891e *apache-tomcat-8.0.33-windows-x64.zip“

Testen mit:

cd D:\srv\
 
cp C:\Users\gpipperr\Downloads\apache-tomcat-8.0.33-windows-x64.zip D:\srv
 
Get-FileHash apache-tomcat-8.0.33-windows-x64.zip -Algorithm MD5
 
Algorithm       Hash                                                                   
---------       ----                                                                   
MD5             7F1C6A4D666B9C76EF3B72038C5A891E

Sieht gut aus, dann können wir weitermachen

Auspacken

unzip apache-tomcat-8.0.33-windows-x64.zip
# Verzeichniss wird angelegt
# zip wieder entfernen
rm .\apache-tomcat-8.0.33-windows-x64.zip

Das Verzeichnis apache-tomcat-8.0.33 mit dem aktuellen Tomcat wird angelegt.

Verlinken

Damit wir nicht bei jedem Update neue Ordnerstrukturen benötigen, versuchen wir jetzt auch mal unter Windows wie unter Linux mit einem Link zu arbeiten, leider lässt sich „mklink“ aber nur unter der alten Dos Schell aufrufen …

Administrative Powershell starten:

#Anleitung
cmd.exe /c mklink.exe
 
#link setzen, auf die /d option achten!
cmd.exe /c mklink /d d:\srv\tomcat8 d:\srv\apache-tomcat-8.0.33

Tomcat Konfigurieren

Apache Tomcat wird über die folgenden vier Dateien konfiguriert:

  • server.xml
  • context.xml
  • tomcat-users.xml
  • web.xml

Die Dateien liegen unter TOMCAT_HOME\conf Verzeichnis

TCP Port setzen - server.xml

Über „server.xml“ wird der Port gesetzt, der Default ist 8080.

Soll der Port verändert werden, zum Beispiel auf 8090, folgende Zeile suchen und anpassen:

<Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000"
               redirectPort="8443" />
Admin User konfigurieren - tomcat-users.xml

Über die Datei tomcat-users.xml wird der Admin User für die Admin Oberfläche konfiguriert, dazu werden bestimmte Rollen benötigt

  • manager-gui - allows access to the HTML GUI and the status pages
  • manager-script - allows access to the text interface and the status pages
  • manager-jmx - allows access to the JMX proxy and the status pages
  • manager-status - allows access to the status pages only
<role rolename="manager-gui"/>
<user username="tomcat" password="geheim" roles="manager-gui"/>

Tomcat starten

Über die Datei startup.bat im TOMCAT_HOME\bin Verzeichnis kann der Tomcat gestartet werden.

set-item -path ENV:JAVA_HOME -value "C:\Program Files\Java\jdk1.8.0_72"
set-item -path ENV:JRE_HOME -value $ENV:JAVA_HOME
 
cd D:\srv\tomcat8\bin
& .\startup.bat

Dos Fenster mit dem Tomcat Start Ausgaben öffnet sich.

Firewall Anfrage mit „Allow“ beantworten.

Aufruf der Tomcat Oberfläche mit http://localhost:8090 zum Test ob Tomcat gestartet werden konnte.


Apex Images bereitstellen

Apex Zip auspacken

Damit die Bilder richtig angezeigt werden können die Bilder von Apex aus dem <apex directory>/images nach TOMCAT_HOME/webapps/i/ kopieren oder verlinken.

Probieren wir mal ob das mit dem verlinken funktioniere würde, bei mir sind die Bilder unter „D:\oracle\apex\images“, wir benötigen also einen link „D:\srv\apache-tomcat-8.0.33\webapps\i“

Administrative Powershell starten:

#link setzen
cmd.exe /c mklink /d D:\srv\apache-tomcat-8.0.33\webapps\i D:\oracle\apex5\images
symbolic link created for D:\srv\apache-tomcat-8.0.33\webapps\i <<===>> D:\oracle\apex\images

Bisher scheint das dann bei der späteren Verwendung von APEX zu klappen!


ORDS War File deployen

Nun die Datei „ords.war“ aus D:\oracle\products\ords.3.0.4 nach TOMCAT_HOME\webapps kopieren.

cp D:\oracle\products\ords.3.0.4\ords.war D:\srv\apache-tomcat-8.0.33\webapps

Läuft Tomcat noch, sieht man nun in der Console, dass die war datei deployed wird unter TOMCAT_HOME\webapps\ords liegt nun die ORDS Web Applikation.

Überprüfen ob das nun schon über http://localhost:8090/ords aufgerufen werden kann.

Falls nicht Konfiguration überprüfen!

ORDS konfigurieren überprüfen

Die Konfiguration erfolgt über die „web.xml“ im TOMCAT_HOME\webapps\ords\WEB-INF Verzeichnis.

Da wir zuvor schon die Standalone Version konfiguriert haben (siehe Oracle ORDS 3.0 (Oracle REST Data Services) mit APEX 5.0 und als REST Interface verwenden, müssen wir nur diese Konfigurationsverzeichnis angeben bzw. überprüfen ob der Eintrag schon korrekt angeben wurde.

Wir hatten zuvor ja schon den Pfad im War hinterlegt, daher hat das nun auch so einfach geklappt

TOMCAT_HOME\webapps\ords\WEB-INF\web.xml:

<context-param>
  <param-name>config.dir</param-name>
  <!-- Enter the location where configuration settings should be stored -->
  <param-value>D:\srv\ords</param-value>
</context-param>

Script für den Start anlegen

startApexTomcat.ps1
#Java Settings
set-item -path ENV:JAVA_HOME -value "D:\Java\8.92"
set-item -path ENV:JRE_HOME -value $ENV:JAVA_HOME
 
#Tomcat 
set-item -path ENV:TOMCAT_HOME -value "D:\srv\tomcat8"
 
cd $ENV:TOMCAT_HOME\bin\
 
& "$ENV:TOMCAT_HOME\bin\startup.bat"

Nun kann bei Bedarf über das Script der Tomcat inkl. ORDS gestartet werden.


Apache Tomcat 8 als Service unter Windows einrichten

Am einfachsten geht das mit dem Programm unter $TOMCAT_HOME/bin/tomcat8.exe

Aus der Doku:

Install the service named 'Tomcat8':

cd %TOMCAT_HOME%/bin
 
service.bat install Tomcat8

Kontrolle mit TOMCAT_HOME/bin/tomcat8w.exe

Siehe auch unter https://tomcat.apache.org/tomcat-8.0-doc/windows-service-howto.html

Läuft die Datenbank auch auf dem gleichen Server, noch eine Abhängigkeit der Dienste einrichten, damit die DB auch wirklich schon VOR dem Tomcat läuft!

sc config Tomcat8 depend=OracleOraDB12Home1TNSListener/OracleServiceORCL

Das muss allerdings nicht immer 100% klappen, es wird ja nur geprüft ob der Service der DB läuft, nicht ob die DB auch schon Verbindungen annehmen kann!


Apache Tomcat härten

Nach dem ersten Test ob alles funktioniert wie erwartet muss unbedingt sofort die Härtung der Umgebung erfolgen.

Zum Beispiel als erstes alle Beispiel Deployments/Servlets unter TOMCAT_HOME/webapps bis auf i und ords löschen.

Dann steht allerdings auch eine Admin Oberfläche des Tomcat NICHT mehr zur Verfügung, was den Betrieb an sich aber nicht stört.

Siehe auch Härtungsanleitungen und Richtlinien dazu im Netz:

CIS

WEB



Apache HTTP Server installieren

Im nächsten Schritt muss der Apache HTTP Server inkl. mod_jk für das Einbinden des Tomcat installiert werden.

Vorbereitung:

Datei \httpd-2.4.20-win64-VC14.zip nach d:\srv\ auspacken

unzip .\httpd-2.4.20-win64-VC14.zip -d D:\srv

Mod_JK in das Module Verzeichnis kopieren:

unzip .\mod_jk-1.2.41-win64-VC14.zip -d D:\srv\Apache24\modules

Apache als Service einrichten

Apache mit „httpd -k install“ als Service einrichten.

Apache konfigurieren

Pfade in der httpd.conf anpassen und Verweise auf die Apex Konfiguration aufnehmen:

..
ServerRoot "D:\srv\Apache24"
..
DocumentRoot D:\oracle\apex_public
..
ScriptAlias /cgi-bin/ "D:\srv\Apache24\cgi-bin"
..   
ServerName 12cwin2012ora01.pipperr.local
..
 
#Module aktiveren
LoadModule expires_module modules/mod_expires.so
LoadModule rewrite_module modules/mod_rewrite.so
 
 
# für Mod_jk
include d:\srv\Apache24\conf\apex.conf
include d:\srv\Apache24\conf\jk.conf
 
#alternativ für mod_proxy_ajp
#include d:\srv\Apache24\conf\apex_proxy.conf

Eine eigenen Konfigurationsdatei unter „d:\srv\Apache24\conf“ wie apex_jk.conf anlegen, diese kann dann auch so später in den virtuellen Host für SSL referenziert werden, daher die mod_jk Konfiguration in eine eigenen Datei ausgelagert.

apex.conf:

apex.conf
#----------------
# Apex Images under i
#----------------
 
Alias /i D:\oracle\apex\images
 
<Directory "D:\oracle\apex\images">
   Options Indexes FollowSymLinks
   AllowOverride None
   Require all granted  
</Directory>
 
# Send servlet for context /examples to worker named worker1
JkMount  /ords/* worker1

Damit es später leichter wird SSL einzubinden, die JWorker Konfiguration in eine eigene conf Datei auslagern:

jk.conf:

jk.conf
#-----------------
# mod_jk configuratoin
#-----------------
 
# Load mod_jk module
LoadModule    jk_module  modules/mod_jk.so
 
# Where to find workers.properties
JkWorkersFile  D:\srv\Apache24\conf\workers.properties
 
# Where to put jk logs
JkLogFile     D:\srv\Apache24\logs\mod_jk.log
 
# Set the jk log level [debug/error/info]
JkLogLevel    info

Datei „workers.properties“ anlegen:

workers.properties
# Define 1 real worker using ajp13
worker.list=worker1  
 
# Set properties for worker1 (ajp13)
worker.worker1.type=ajp13  
worker.worker1.host=localhost  
worker.worker1.port=8009  
worker.worker1.lbfactor=50  
worker.worker1.cache_timeout=600  
worker.worker1.socket_keepalive=1  
worker.worker1.socket_timeout=300  

!Achtung! Testen mit http://localhost/i/apex_version.txt ⇒ Falls „Access Forbidden 403“ Fehler prüfen, ob im Alias ein nachfolgender „/“ eingegeben wurde! Ohne hat es dann funktioniert!

Alternativ AJP über mod_proxy

Alternative „apex_proxy.conf“ anlegen:

#----------------
# Apex Images under i
#----------------
 
Alias /i D:\oracle\apex\images
 
<Directory "D:\oracle\apex\images">
   Options Indexes FollowSymLinks
   AllowOverride None
   Require all granted  
</Directory>
 
#----------------
#enable ajp 
#----------------
 
 
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
 
ProxyRequests Off
 
 
<Proxy *>
 Order allow,deny
  Allow from all
</Proxy>
 
# Alles weiterleiten auf Tomcat
ProxyPass           / ajp://localhost:8009/
ProxyPassReverse    / ajp://localhost:8009/

Apache Starten

Starten:

& .\httpd.exe

Testen ob nun über http:\\localhost\ords Apex aufgerufen werden kann.


Apache härten und SSL einrichten

Nachdem nun das ganze so einigermaßen über Port 80 und den Apache Webserver funktioniert, muss die Umgebung gehärtet und auf SSL/TLS umgestellt werden.

Bei der Konfiguration wird das System so eingestellt das nur noch TLS 1.1 zulässig ist.

Für das Erzeugen des Zertifikatsrequest wird das mitgelieferte openssl eingesetzt.

Zertifikats erstellen

Um die Zertifikate besser zu finden wird ein zentrale Order unter d:\srv anlegt, dort erzeugen wir auch den Zertifikatsrequest.

Wie immer über die Powershell:

mkdir D:\srv\cert
 
cd D:\srv\cert
 
# Um Fehlermeldngen beim Anlegen vermeiden:
cp D:\srv\Apache24\conf\openssl.cnf D:\srv\cert
set-item -path ENV:RANDFILE -value D:\srv\cert\.rnd
set-item -path ENV:OPENSSL_CONF -value D:\srv\cert\openssl.cnf
 
# passphrase beim Anlegen des Keys angeben und aufschreiben!
D:\srv\Apache24\bin\openssl genrsa -des3 -out server.pem 1024
 
Generating RSA private key, 1024 bit long modulus
..............................++++++
....++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
PS D:\srv\cert> D:\srv\Apache24\bin\openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
................++++++
.++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
 
 
# Key entschlüsslen
 
D:\srv\Apache24\bin\openssl rsa -in .\server.pem -out server.key
 
Enter pass phrase for .\server.key:
writing RSA key
 
# unsigned certificate CSR bzw Certificate Signing Request daraus anlegen
 
D:\srv\Apache24\bin\openssl req -new -key .\server.key -out server.csr
 
Enter pass phrase for .\server.key:
 
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:Bavaria
Locality Name (eg, city) []:Munich
Organization Name (eg, company) [Internet Widgits Pty Ltd]:GPI Consult
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:12CWIN2012ORA01.pipperr.local
Email Address []:info@pipperr.de
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Dieses Zertifikat muss nun an eine CR gesandt werden, zum Beispiel die von der aktuellen Windows Domain wie http://myCAServer/CertSrv.

In Testsystem selber signieren wenn keine Windows CA zur Hand ist, gültig für 365 Tage:

D:\srv\Apache24\bin\openssl  x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
 
Signature ok
subject=/C=DE/ST=Bavaria/L=Munich/O=GPI Consult/OU=IT/CN=12CWIN2012ORA01.pipperr.local/emailAddress=info@pipperr.de
Getting Private key
Enter pass phrase for server.key:

Zertifikat in Apache einbinden

Anpassen der httpd.conf Mod SSL einkommentieren und dass laden der SSL Konfiguration enablen:

LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
 
# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf

Die SSL Conf D:\srv\Apache24\conf\extra\httpd-ssl.conf anpassen:

#Nur noch TLSv1.2
SSLCipherSuite HIGH:MEDIUM:!SSLv3:!kRSA
SSLProxyCipherSuite HIGH:MEDIUM:!SSLv3:!kRSA
 
SSLProtocol +TLSv1.2 +TLSv1.1 +TLSv1
SSLProxyProtocol +TLSv1.2 +TLSv1.1 +TLSv1
 
 
SSLSessionCache        "shmcb:d:/srv/Apache24/logs/ssl_scache(512000)"
 
 
#Virtual Host Einstellungen anpassen!
 
<VirtualHost _default_:443>
 
DocumentRoot "D:\oracle\apex_public"
ServerName   12cwin2012ora01.pipperr.local:443
ServerAdmin  info@pipperr.de
ErrorLog     "d:/srv/Apache24/logs/error.log"
TransferLog  "d:/srv/Apache24/logs/access.log"
 
 
# Pfade zu den Zertifikaten anpassen
 
SSLCertificateFile "d:/srv/cert/server.crt"
 
SSLCertificateKeyFile "d:/srv/cert/server.pem"
 
<Directory "d:/srv/Apache24/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>
 
CustomLog "d:/srv/Apache24/logs/ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

Nachdem SSL nun funktioniert, muss der Pfad zu dem ORDS noch von der Apache Konfiguration unter Port 80 auf Port 443 umgezogen werden.

SSL Conf D:\srv\Apache24\conf\extra\httpd-ssl.conf:

##### APEX ###########
 
Include D:\srv\Apache24\conf\apex.conf
 
</VirtualHost>

Da nur noch SSL eingesetzt werden soll, in der httpd.conf den APEX Include auskommentieren und per Mod Rewrite immer auf SSL umschalten!

##### use only SSL
 
RewriteEngine On
RewriteCond %{SERVER_PORT} !=443
RewriteRule (.*) https://%{SERVER_NAME}$1 [R,L]

Nun kann der Apache neu gestartet werden und SSL getestet werden.

Mit Openssl:

 D:\srv\Apache24\bin\openssl s_client -connect 10.10.10.180:443
...
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
 
... 

Alternativ testen mit SSLyze - Fast and full-featured SSL scanner ⇒ https://github.com/nabla-c0d3/sslyze

sslyze-master.zip jerunterladen und in eine Verzeichnis wie C:\tools auspacken:

#Vorraussetzung nassl installiertn
 
C:\Python27\python.exe  -m pip install nassl
 
#test starten
C:\Python27\python.exe C:\tools\sslyze-master\sslyze_cli.py --regular 10.10.10.180:443

Log Rotate der Apache Logs einbinden

Unter Windows können die Logs vom Apache nicht so einfach im laufenden Betrieb gelöscht werden, per Pipe Mechanismus werden daher die Log Informationen an einen eigenen Prozesse geschicket, der jeden Tag eine neue Datei anlegt.

In der http.conf:

#ErrorLog "logs/error.log"
ErrorLog "|bin/rotatelogs.exe -l D:/srv/Apache24/logs/error.%Y.%m.%d.log 86400"
 
#CustomLog "logs/access.log" common
CustomLog "|bin/rotatelogs.exe -l D:/srv/Apache24/logs/access.%Y.%m.%d.log 86400" common

D:\srv\Apache24\conf\extra\httpd-ssl.conf:

#ErrorLog "d:/srv/Apache24/logs/error.log"
#TransferLog "d:/srv/Apache24/logs/access.log"
#CustomLog "d:/srv/Apache24/logs/ssl_request.log" \
#          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
 
ErrorLog "|bin/rotatelogs.exe -l D:/srv/Apache24/logs/ssl_error.%Y.%m.%d.log 86400"
TransferLog "|bin/rotatelogs.exe -l D:/srv/Apache24/logs/ssl_access.%Y.%m.%d.log 86400"
CustomLog "|bin/rotatelogs.exe -l D:/srv/Apache24/logs/ssl_request.%Y.%m.%d.log 86400" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
 

Aufräumen mit der Powershell (alles löschen was älter als 30 Tage ist):

#testen mit dem -WhatIf Flag
Get-ChildItem 'D:\srv\Apache24\logs\*.log' | Where {$_.lastwritetime -lt (Get-Date).AddDays(-30)} | Remove-Item -Force -WhatIf
 
#Produktiv löschen
 
Get-ChildItem 'D:\srv\Apache24\logs\*.log' | Where {$_.lastwritetime -lt (Get-Date).AddDays(-30)} | Remove-Item -Force 

Tomcat Härten

Nur noch Zugriff auf Tomcat über „localhost“ erlauben (address=„127.0.0.1“ hinzufügen), dazu server.xml anpassen.

server.xml:

  <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" 
			   address="127.0.0.1" />
...
 
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"  address="127.0.0.1"/>
 
...

Single Sign on mit Apache einrichten

Linux Kerberos

Unter Linux muss nun mod_auth_kerb eingebunden werden, soll allerdings das auch unter Windows verwendet werden, scheitert es daran, das für Windows das Modul so nicht vorliegt.

So würde das dann unter Linux laufen ⇒ * http://de.slideshare.net/nielsdb/mt-ag-howtosingle-signonforapexapplicationsusingkerberos-46435415

Windows NTLM

Alternativ unter Windows ist noch NTLM mit Mod Auth NTLM möglich, allerdings ist NTLM bereits etwas veraltet und gilt nicht als 100% sicher.

Ein NTLM Modul für Windows kann hier gefunden werden

http://www.apachehaus.com/cgi-bin/download.plx#MODULES24VC14

  • Mod Auth NTLM for Apache 2.4.x x64 mod_authn_ntml-1.0-2.4.x-x64-vc14.zip

Modul auspacken und in das Apache Modul Verzeichnis kopieren, in meinen Beispiel D\srv\Apache24\modules .

Auf Basis der beiliegenden README.txt die apex_jk.conf Konfiguration ergänzen:

LoadModule auth_ntlm_module modules/mod_authn_ntlm.so
LoadModule headers_module   modules/mod_headers.so
 
<Location /ords >
    AuthName "APEX Workspace"
    AuthType SSPI
    NTLMAuth On
    NTLMAuthoritative On
    <RequireAll>
        <RequireAny>
            Require valid-user
            #require sspi-user EMEA\group_name
        </RequireAny>        
    </RequireAll>
 
    # use this to add the authenticated username to you header
    # so any backend system can fetch the current user
    # rewrite_module needs to be loaded then
 
     RewriteEngine On
     RewriteCond %{LA-U:REMOTE_USER} (.+)
     RewriteRule . - [E=RU:%1]
     RequestHeader set WIN_USER %{RU}e
 
</Location>

Im Header wird in der Variablen WIN_USER der aktuellen User hinterlegt, alle Applikationen hinter dem Single Sign on sind nun offen! In der Applikation selber muss bei Bedarf das dann noch besser im Detail angepasst werden.

Testen von Linux aus

Test mit curl und NTLM Auth:

curl -v -k https://myapexserver/ords/ --ntlm -u DOMAIN\\username:password

Kerberos auf Tomcat Ebene

Alternativ ISS unter Windows einsetzen

SAML 2

Apex Authentication Scheme einrichten

Die Windows Anmeldung wird nun mit der Single Sign On Konfiguration an die Applikation weitergereicht.

Damit sich der User nun nicht nochmal anmelden muss, muss in APEX das „Authentification Scheme“ auf Applikationsebene gesetzt werden.

  • In der Applikation auf „Shared Components“ klicken, „Authentication Schemes“ auswählen  Authentication Schemes anlegen
  • Create Button rechte wählen
  • Vorlage auswählen : Based on a pre-configured scheme from the gallery ⇒ Next Authentication Schemes anlegen
  • Nun einen Namen vergeben und die Methode HTTP HEADER Variable auswählen Authentication Schemes anlegen
  • Hinterlegen in welchen Header Feld der Username steht  Authentication Scheme Header Variable hinterlegen
  • Speichern

In den Application Settings prüfen ob auch das richtige Schema gewählt wurde:

 Authentication Schemes überprüfen

Nun kann der Test beginnen ob das auch geklappt hat.

Außerhalb der Domaine sollte jetzt eine Benutzerabfrage erfolgen, angemeldet an der Domain sollte sich die Applikation ohne Login starten lassen.

Debuggen:

Klappt es nicht, die Header Variablen auf einer Seite mit Hilfe von „owa_util.print_cgi_env;“ anzeigen lassen (Page mit einer Region auf PL/SQL Basis):

BEGIN
 htp.p(owa_util.get_cgi_env('WIN_USER'));
 htp.p('<p>');
 owa_util.print_cgi_env
END;

Um nun noch den Zugriff auf die einzelnen Seite in Apex zu steuern siehe hier ⇒ Oracle Apex 5 Securtiy und Microsoft Active Directory Integration



Quellen

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
"Autor: Gunther Pipperr"
prog/oracle_rest_data_service_tomcat.txt · Zuletzt geändert: 2018/04/24 00:27 von Gunther Pippèrr