Inhaltsverzeichnis
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:
Download der notwendigen Software
- Java SE Development Kit 8u92
- Apache 2.4 HTTP Server unter Microsoft Windows
- Zum Beispiel http://www.apachelounge.com/download/
- Apache 2.4.20 Win64 http://www.apachelounge.com/download/VC14/binaries/httpd-2.4.20-win64-VC14.zip
- Visual C++ Redistributable for Visual Studio 2015 x64 von https://www.microsoft.com/en-us/download/details.aspx?id=51682
- Apache Tomcat 8 als 64-bit Windows Zip laden
- Oracle REST Data Services 3.0.4
- APEX zip für die Images
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:
- Visual C++ Redistributable for Visual Studio 2015 x64 vc_redist.x64.exe von https://www.microsoft.com/en-us/download/details.aspx?id=51682 herunterladen und installieren
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 noch in Tomcat die Security aufsetzen, siehe zum Beispiel ⇒ https://dzone.com/articles/do-not-publish-configuring-tomcat-single-sign-on-w und https://community.oracle.com/message/12748733
Alternativ ISS unter Windows einsetzen
Siehe hierzu auch ⇒ http://de.slideshare.net/nielsdb/mt-ag-howtosingle-signonforapexapplicationsusingkerberos-46435415
SAML 2
Über SAML ⇒ https://en.wikipedia.org/wiki/SAML_2.0
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.
- Create Button rechte wählen
- Speichern
In den Application Settings prüfen ob auch das richtige Schema gewählt wurde:
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
ORDS:
Tomcat:
Apache:
AJP
Single-Sign-On
APEX Security Möglichkeiten
Quellen zu SSL
Log Rotate ⇒ http://theheat.dk/blog/?p=1353