Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:oracle_rest_data_service_tomcat

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
prog:oracle_rest_data_service_tomcat [2018/02/22 19:02]
gpipperr [Zertifikat in Apache einbinden]
prog:oracle_rest_data_service_tomcat [2018/04/24 00:27] (aktuell)
gpipperr
Zeile 1: Zeile 1:
 +=====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:
 +
 +**<key>Windows Key</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:
 +<code powershell>
 +
 +echo $ENV:JAVA_HOME
 +
 +echo $ENV:JRE_HOME
 +
 +</code>
 +
 +
 +
 +
 +
 +----
 +
 +==== 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===
 +
 +<code powershell>
 +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
 +</code>
 +
 +
 +===Auspacken===
 +<code powershell>
 +unzip ords.3.0.4.60.12.48.zip 
 +rm ords.3.0.4.60.12.48.zip 
 +</code>
 +
 +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
 +
 +<code powershell>
 +mkkdir D:\srv\tomcat8
 +</code>
 +
 +===Ü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:
 +<code powershell>
 +
 +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
 +</code>
 +
 +Sieht gut aus, dann können wir weitermachen
 +
 +===Auspacken===
 +<code powershell>
 +unzip apache-tomcat-8.0.33-windows-x64.zip
 +# Verzeichniss wird angelegt
 +# zip wieder entfernen
 +rm .\apache-tomcat-8.0.33-windows-x64.zip
 +</code>
 +
 +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:
 +<code powershell>
 +#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
 +
 +</code>
 +
 +===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:
 +<code xml>
 +
 +<Connector port="8080" protocol="HTTP/1.1" 
 +               connectionTimeout="20000"
 +               redirectPort="8443" />
 +
 +</code>
 +
 +==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
 +
 +
 +<code xml>
 +<role rolename="manager-gui"/>
 +<user username="tomcat" password="geheim" roles="manager-gui"/>
 +</code>
 +===Tomcat starten ===
 +
 +Über die Datei startup.bat im TOMCAT_HOME\bin Verzeichnis kann der Tomcat gestartet werden.
 +
 +<code powershell>
 +
 +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
 +</code>
 +
 +Dos Fenster mit dem Tomcat Start Ausgaben öffnet sich.
 +
 +Firewall Anfrage mit "Allow" beantworten.
 +
 +Aufruf der Tomcat Oberfläche mit **<nowiki>http://localhost:8090</nowiki>** 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:
 +<code powershell>
 +#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
 +</code>
 +
 +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.
 +
 +<code powershell>
 +cp D:\oracle\products\ords.3.0.4\ords.war D:\srv\apache-tomcat-8.0.33\webapps
 +</code>
 +
 +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 **<nowiki>http://localhost:8090/ords</nowiki>** 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:
 +<code 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>
 +</code>
 +
 +
 +=== Script für den Start anlegen ===
 +
 +
 +<code powershell 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"
 +
 +</code>
 +
 +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':
 +<code dos>
 +cd %TOMCAT_HOME%/bin
 +
 +service.bat install Tomcat8
 +</code>
 +
 +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!
 +<code cmd>
 +sc config Tomcat8 depend=OracleOraDB12Home1TNSListener/OracleServiceORCL
 +</code>
 +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 <fc #800000>**sofort**</fc> 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 
 +<code powershell>
 +
 +unzip .\httpd-2.4.20-win64-VC14.zip -d D:\srv
 +
 +</code>
 +
 +
 +Mod_JK in das Module Verzeichnis kopieren:
 +
 +<code powershell>
 +
 +unzip .\mod_jk-1.2.41-win64-VC14.zip -d D:\srv\Apache24\modules
 +
 +</code>
 +
 +
 +=== 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:
 +
 +<code apache>
 +..
 +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
 +
 +</code>
 +
 +
 +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:
 +
 +<code apache 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
 +
 +</code>
 +
 +Damit es später leichter wird SSL einzubinden, die JWorker Konfiguration in eine eigene conf Datei auslagern:
 +
 +jk.conf:
 +<code apache 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
 +</code>
 +
 +Datei "workers.properties" anlegen:
 +<code java 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  
 +</code>
 +
 +
 +<fc #800000>
 +**!Achtung!**</fc> Testen mit **<nowiki>http://localhost/i/apex_version.txt</nowiki>** => 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:
 +
 +<code apache>
 +
 +#----------------
 +# 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/
 +
 +</code>
 +
 +
 +=== Apache Starten ===
 +
 +
 +
 +Starten:
 +<code powershell>
 +
 +& .\httpd.exe
 +
 +</code>
 +
 +
 +
 +Testen ob nun über **<nowiki>http:\\localhost\ords</nowiki>** 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:
 +<code 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 []:
 +
 +</code>
 +
 +
 +Dieses Zertifikat muss nun an eine CR gesandt werden, zum Beispiel die von der aktuellen Windows Domain  wie <nowiki>http://myCAServer/CertSrv</nowiki>.
 +
 +
 +In Testsystem selber signieren wenn keine Windows CA zur Hand ist, gültig für 365 Tage:
 +
 +<code powershell>
 +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:
 +
 +</code>
 +
 +
 +===Zertifikat in Apache einbinden===
 +
 +Anpassen der httpd.conf
 +Mod SSL einkommentieren und dass laden der SSL Konfiguration enablen:
 +<code apache>
 +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
 +</code>
 +
 +Die SSL Conf D:\srv\Apache24\conf\extra\httpd-ssl.conf anpassen:
 +<code apache>
 +
 +#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"
 +
 +</code>
 +
 +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:
 +<code apache>
 +
 +##### APEX ###########
 +
 +Include D:\srv\Apache24\conf\apex.conf
 +
 +</VirtualHost>
 +
 +</code>
 +
 +Da nur noch SSL eingesetzt werden soll, in der httpd.conf den APEX Include auskommentieren und per Mod Rewrite immer auf SSL umschalten!
 +
 +<code apache>
 +##### use only SSL
 +
 +RewriteEngine On
 +RewriteCond %{SERVER_PORT} !=443
 +RewriteRule (.*) https://%{SERVER_NAME}$1 [R,L] 
 +
 +</code>
 +
 +Nun kann der Apache neu gestartet werden und SSL getestet werden.
 +
 +Mit Openssl:
 +
 +<code cmd>
 + 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
 +    
 +... 
 +</code>
 +
 +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:
 +
 +<code powershell>
 +
 +#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
 +
 +</code>
 +
 +
 +
 +----
 +
 +
 +====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:
 +<code apache>
 +#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
 +</code> 
 +
 +D:\srv\Apache24\conf\extra\httpd-ssl.conf:
 +<code apache>
 +#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"
 +         
 +</code>
 +
 +
 +Aufräumen mit der Powershell (alles löschen was älter als 30 Tage ist):
 +<code powershell>
 +
 +#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 
 +</code>
 +
 +
 +----
 +
 +
 +==== Tomcat Härten ====
 +
 +Nur noch Zugriff auf Tomcat über "localhost" erlauben (address="127.0.0.1" hinzufügen), dazu server.xml anpassen.
 +
 +
 +server.xml:
 +<code 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"/>
 +
 +...
 +
 +</code>
 +
 +
 +
 +
 +
 +
 +----
 +
 +===== 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:
 +
 +<code apache>
 +
 +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>
 +
 +</code>
 +
 +
 +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:
 +<code bash>
 +
 +curl -v -k https://myapexserver/ords/ --ntlm -u DOMAIN\\username:password
 +
 +</code>
 +
 +
 +
 +
 +
 +=== 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):
 +<code plsql>
 +begin
 + htp.p(owa_util.get_cgi_env('WIN_USER'));
 + htp.p('<p>');
 + owa_util.print_cgi_env
 +end;
 +</code>
 +
 +
 +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
"Autor: Gunther Pipperr"
prog/oracle_rest_data_service_tomcat.txt · Zuletzt geändert: 2018/04/24 00:27 von gpipperr