=====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 [[prog:first_steps_oracle_rest_data_service|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 [[http://de.slideshare.net/nielsdb/mt-ag-howtosingle-signonforapexapplicationsusingkerberos-46435415|Niels de Bruijn]] und [[ http://www.opal-consulting.de/downloads/presentations/2015-11-DOAG-ORDS-Setup/2015-11-DOAG-ORDS-in-production.pdf|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 [[prog:first_steps_oracle_rest_data_service#die_standalone_variante_aufsetzen|Standalone ORDS 3.0]] schon aufgerufen werden Ablauf: * Software download * Java einrichten, falls noch nicht vorhanden * ORDS Standalone konfigurieren wie unter [[prog:first_steps_oracle_rest_data_service#die_standalone_variante_aufsetzen|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 [[https://www.microsoft.com/en-us/evalcenter/evaluate-windows-server-2012-r2|Windows 2012 TechNet Evaluation Center]] Umgebung verwandt, der auch dann den Domain Controller der Umgebung zur Verfügung stellt. Übersicht über den generellen Aufbau: {{ :prog:apex:apache_ords_overview_v01.png | Oracle ORDS mit Apache und Single Sign On}} ---- ==== Download der notwendigen Software ==== * Java SE Development Kit 8u92 * http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html * Apache 2.4 HTTP Server unter [[https://httpd.apache.org/docs/current/platform/windows.html#down|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 * mod_jk http://www.apachelounge.com/download/VC14/modules/mod_jk-1.2.41-win64-VC14.zip * Visual C++ Redistributable for Visual Studio 2015 x64 von https://www.microsoft.com/en-us/download/details.aspx?id=51682 * mod_ntlm - http://www.apachehaus.com/cgi-bin/download.plx#MODULES24VC14 * Apache Tomcat 8 als 64-bit Windows Zip laden * http://tomcat.apache.org/download-80.cgi * http://mirror.23media.de/apache/tomcat/tomcat-8/v8.0.33/bin/apache-tomcat-8.0.33-windows-x64.zip * Oracle REST Data Services 3.0.4 * http://www.oracle.com/technetwork/developer-tools/rest-data-services/downloads/index.html * APEX zip für die Images * http://www.oracle.com/technetwork/developer-tools/apex/downloads/index.html ---- ==== 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 => [[prog:oracle_apex_install_windows_12c|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 => [[prog:first_steps_oracle_rest_data_service#die_standalone_variante_aufsetzen|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 "[[https://technet.microsoft.com/en-us/library/cc753194.aspx|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: ==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 ===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 /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 [[prog:first_steps_oracle_rest_data_service|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: config.dir D:\srv\ords === Script für den Start anlegen === #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 * https://web.nvd.nist.gov/view/ncp/repository/checklistDetail?id=647 WEB * https://www.ernw.de/download/hardening/ERNW_Checklist_Tomcat7_Hardening.pdf ---- ---- ==== 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 Images under i #---------------- Alias /i D:\oracle\apex\images Options Indexes FollowSymLinks AllowOverride None Require all granted # 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: #----------------- # 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: # 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 Options Indexes FollowSymLinks AllowOverride None Require all granted #---------------- #enable ajp #---------------- LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so ProxyRequests Off Order allow,deny Allow from all # 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 [[https://www.openssl.org/docs/|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! 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" SSLOptions +StdEnvVars 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 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: ... ... ---- ===== 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 AuthName "APEX Workspace" AuthType SSPI NTLMAuth On NTLMAuthoritative On Require valid-user #require sspi-user EMEA\group_name # 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 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 siehe => https://www.ukoug.org/what-we-offer/library/integrating-apex-with-a-federated-environment-for-single-sign-on-using-saml-20-jon-tupman/1jon-tupman.pdf ---- ==== 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 {{ :prog:apex:apex_single_sign_on_01.png?direct&300 | Authentication Schemes anlegen }} * Create Button rechte wählen * Vorlage auswählen : Based on a pre-configured scheme from the gallery => Next{{ :prog:apex:apex_single_sign_on_02.png?direct&300 | Authentication Schemes anlegen}} * Nun einen Namen vergeben und die Methode HTTP HEADER Variable auswählen {{ :prog:apex:apex_single_sign_on_03.png?direct&300 |Authentication Schemes anlegen}} * Hinterlegen in welchen Header Feld der Username steht {{ :prog:apex:apex_single_sign_on_04.png?direct&300 | Authentication Scheme Header Variable hinterlegen}} * Speichern In den Application Settings prüfen ob auch das richtige Schema gewählt wurde: {{ :prog:apex:apex_single_sign_on_05.png | 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('

'); owa_util.print_cgi_env end; Um nun noch den Zugriff auf die einzelnen Seite in Apex zu steuern siehe hier => [[prog:oracle_apex_active_directory_integration|Oracle Apex 5 Securtiy und Microsoft Active Directory Integration]] ---- ---- ==== Quellen ==== ORDS: * http://docs.oracle.com/cd/E56351_01/doc.30/e56293/toc.htm * http://www.opal-consulting.de/downloads/presentations/2015-11-DOAG-ORDS-Setup/2015-11-DOAG-ORDS-in-production.pdf Tomcat: * http://www.c-sharpcorner.com/UploadFile/fd0172/how-to-configure-and-install-apache-tomcat-server-in-windows/ Apache: * http://www.apachelounge.com/download/contr/Perf-tun-srv-2012.docx * http://www.microhowto.info/howto/configure_apache_to_use_kerberos_authentication.html AJP * https://confluence.sakaiproject.org/display/~steve.swinsburg/Fronting+Tomcat+with+Apache+via+mod_proxy_ajp Single-Sign-On * http://de.slideshare.net/nielsdb/mt-ag-howtosingle-signonforapexapplicationsusingkerberos-46435415 * http://blog.hallowelt.com/wp-content/uploads/SSO_mit_mod_auth_kerb_v3.pdf * https://www.schaeuffelhut-berger.de/blog/2014/01/apache-ads-sso/ APEX Security Möglichkeiten * http://de.slideshare.net/Enkitec/making-sense-of-apex-security-by-christoph-ruepprich Quellen zu SSL * => https://httpd.apache.org/docs/2.4/ssl/ssl_howto.html * => https://wiki.apache.org/httpd/NameBasedSSLVHosts * => https://www.apachelounge.com/download/contr/InstallingApacheonWindows.pdf Log Rotate => http://theheat.dk/blog/?p=1353