prog:apex_mail_acl
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende Überarbeitung | |||
prog:apex_mail_acl [2018/03/08 10:21] – [Script um die ACL's zu überwachen] gpipperr | prog:apex_mail_acl [2019/10/27 10:23] (aktuell) – [Script um die ACL's zu überwachen] gpipperr | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ===== Oracle Apex 5.0 Mail Versandt mit SSL -Hinterlegen einer ACL's in 11g und 12c und Hinterlegen von SSL Zertifkaten===== | ||
+ | ** 11.2016 ** | ||
+ | |||
+ | Um einen Mail Server zu hinterlegen, | ||
+ | |||
+ | |||
+ | Menüpunkt oben " | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | Nach dem Eintragen der Mail Server Konfiguration, | ||
+ | |||
+ | Nach dem Anfordern eines neuen Passworts per Mail, wieder an den " | ||
+ | |||
+ | Wenn hier nichts zu finden ist über " | ||
+ | |||
+ | In der Apex Mail Queue sollte keine Mails mehr stehen, falls doch ist meist das Problem die fehlende / falsche ACL: Access Control List. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | <fc # | ||
+ | |||
+ | < | ||
+ | ORA-24247: network access denied by access control list (ACL) | ||
+ | </ | ||
+ | |||
+ | Je nach DB Version 11g oder 12c muss nun das Rechte das Netzwerk der Datenbank zu verwenden an Apex gegranted werden. | ||
+ | |||
+ | Die ACL nun für den Mail Server passend (Server Name/IP Adresse + Port ) anlegen und mit "Send all Mail" prüfen ob es dann auch klappt. (siehe weiter unten für die jeweilige DB die ACL Routinen als Beispiel). | ||
+ | |||
+ | |||
+ | Diese Rechte setzen und mit "Force send All Mail" einen erneuten Versandt antriggern. | ||
+ | |||
+ | |||
+ | Mit einer aktiven TLS/SSL Mail Konfiguration erhalten ich allerdings gleich mal den nächsten Fehler: | ||
+ | |||
+ | < | ||
+ | ORA-29024: Certificate validation failure | ||
+ | </ | ||
+ | |||
+ | <note tip>Hier darauf achten, das NUR und NUR die "Root Certifikat Chain" in der Wallet sein darf! | ||
+ | NICHT das eigentliche Zertifikat der Gegenstelle!</ | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | ==== Mailversandt per TLS/SSL - " | ||
+ | |||
+ | Hier muss nun eine Oracle Wallet in der mit dem Root Zertifikaten des Mail Servers hinterlegt werden | ||
+ | |||
+ | Siehe dazu: | ||
+ | |||
+ | * APEX_ | ||
+ | * => http:// | ||
+ | * Datenbank | ||
+ | * => https:// | ||
+ | |||
+ | |||
+ | Also eine Oracle Wallet anlegen, zum Beispiel in " | ||
+ | |||
+ | Das Zertifikat des Mail Servers darf <fc # | ||
+ | |||
+ | === Zertifikat auslesen mit Python === | ||
+ | |||
+ | Siehe dazu https:// | ||
+ | |||
+ | Die beschriebene Python Lösung funktioniert allerdings mit Python 3.4 nicht, daher so abgefragt: | ||
+ | |||
+ | <code python> | ||
+ | #see https:// | ||
+ | |||
+ | import smtplib | ||
+ | import ssl | ||
+ | |||
+ | connection = smtplib.SMTP() | ||
+ | connection.connect(' | ||
+ | connection._host = ' | ||
+ | connection.ehlo() | ||
+ | connection.starttls() | ||
+ | |||
+ | print( ssl.DER_cert_to_PEM_cert(connection.sock.getpeercert(binary_form=True))) | ||
+ | |||
+ | </ | ||
+ | |||
+ | Nach einigen Ausprobieren mit den Zertifikaten habe ich dann erkennen müssen, das wir das aber nur brauchen, um die Zertifikat Kette rückwärts zu analysieren! | ||
+ | |||
+ | === Auslesen mit openssl unter Linux=== | ||
+ | |||
+ | <code bash> | ||
+ | openssl s_client -showcerts -mail.your-server.de: | ||
+ | </ | ||
+ | |||
+ | === Zertifikat hinterlegen === | ||
+ | |||
+ | |||
+ | Jetzt das eigentliche Zertifikat NICHT im Wallet hinterlegen, | ||
+ | |||
+ | **Nur die Root Chain Zertifikate** entwender als Text in der Wallet als " | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | |||
+ | === Wallet Location in Apex hinterlegen === | ||
+ | |||
+ | |||
+ | |||
+ | Die Wallet Location und das Passwort wird in Apex hinterlegt, Apex „Instance Settings“ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Auf den gesetzen Hacken bei "Check to confirm that you wish to change the wallet password" | ||
+ | |||
+ | |||
+ | |||
+ | === Fehlersuche=== | ||
+ | |||
+ | Klappt aber nicht so wie gewünscht .... immer noch der gleiche Fehler. | ||
+ | |||
+ | Wie kann nun der Fehler analysiert werden???? | ||
+ | |||
+ | |||
+ | **Password nicht hinterlegt** | ||
+ | |||
+ | Die Apex Parameter prüfen, ob das Password auch wirklich hinterlegt ist: | ||
+ | |||
+ | <code sql> | ||
+ | connect / as sysdba | ||
+ | |||
+ | SELECT | ||
+ | , APEX_INSTANCE_ADMIN.GET_PARAMETER(' | ||
+ | FROM DUAL | ||
+ | / | ||
+ | |||
+ | </ | ||
+ | |||
+ | Beim ersten Mal war das Passwort leer, erst wenn in der Apex Admin Maske der Hacken für das Passwort gesetzt wird, wird auch mit diesen Befehlt das Passwort angezeigt! | ||
+ | |||
+ | <fc # | ||
+ | |||
+ | |||
+ | **Der nächste Fehler ist nun ein " | ||
+ | |||
+ | |||
+ | Wallet aus der DB mit UTL_HTTP Aufrufen: | ||
+ | |||
+ | <code sql> | ||
+ | |||
+ | DECLARE | ||
+ | lo_req | ||
+ | lo_resp UTL_HTTP.resp; | ||
+ | BEGIN | ||
+ | UTL_HTTP.SET_WALLET (' | ||
+ | lo_req := UTL_HTTP.begin_request(' | ||
+ | lo_resp := UTL_HTTP.get_response(lo_req); | ||
+ | dbms_output.put_line(lo_resp.status_code); | ||
+ | | ||
+ | END; | ||
+ | |||
+ | ERROR at line 1: | ||
+ | ORA-29273: HTTP request failed | ||
+ | ORA-28759: failure to open file | ||
+ | |||
+ | </ | ||
+ | |||
+ | Als nächstes prüfen, ob die Lese Rechte auf der Wallet zum User der DB passen unter dem die Oracle Instance läuft! | ||
+ | |||
+ | Unter Windows läuft ja der Oracle Prozess unter einen anderen User, in meine Fall unter " | ||
+ | |||
+ | Rechte für oracle_admin vergeben, und schon kann das Wallet gelesen werden! | ||
+ | |||
+ | |||
+ | **ORA-29024: | ||
+ | |||
+ | Nun kann die Wallet geöffnet werden, es klappt allerdings immer noch nicht, jetzt aber ein anderer Fehler: | ||
+ | |||
+ | <code sql> | ||
+ | select UTL_HTTP.REQUEST(' | ||
+ | |||
+ | ORA-29273: HTTP request failed | ||
+ | ORA-29024: Certificate validation failure | ||
+ | </ | ||
+ | |||
+ | Test Case erzeugt einen " | ||
+ | |||
+ | siehe auch https:// | ||
+ | |||
+ | |||
+ | Teste jetzt mal mit Google Mail, erhalten aber wieder einen Zertifikatsfehler obwohl das Zertifikat hinterlegt ist: | ||
+ | <code plsql> | ||
+ | DECLARE | ||
+ | c utl_smtp.connection; | ||
+ | BEGIN | ||
+ | c := utl_smtp.open_connection( | ||
+ | host => ' | ||
+ | , port => 465 | ||
+ | , wallet_path => ' | ||
+ | , wallet_password => ' | ||
+ | , secure_connection_before_smtp => true); | ||
+ | utl_smtp.starttls(c); | ||
+ | END; | ||
+ | / | ||
+ | ERROR at line 1: | ||
+ | ORA-29024: Certificate validation failure | ||
+ | </ | ||
+ | |||
+ | Wallet per Kommandozeile auslesen: | ||
+ | <code bash> | ||
+ | orapki wallet display -wallet D: | ||
+ | .. | ||
+ | Subject: | ||
+ | </ | ||
+ | Zertifikat ist da! | ||
+ | |||
+ | |||
+ | Es könnte aber auch daran liegen das die ganze Kette eines Zertifikates abgebildet werden muss, also Root CA usw. auch importieren! | ||
+ | |||
+ | **Root CA Zertifikate importieren** | ||
+ | |||
+ | Als erstes Google ausprobiert und alle 3 Zertifikaten nacheinander in die Wallet geladen, mit UTL_HTTP testet, das funktioniert! | ||
+ | |||
+ | |||
+ | Mit pipperr.de ist es aber immer noch der gleiche Fehler .... | ||
+ | |||
+ | Es stimmt also etwas mit den Zertifikaten nicht! | ||
+ | |||
+ | Im nächsten Schritt alle Zertifikate aus der Wallet entfernt und mit Chrome die Zertifikate als pb7 und inkl. der ganzen Kette exportiert. | ||
+ | |||
+ | Den Export per Kommando Zeile eingefügt: | ||
+ | <code bash> | ||
+ | orapki wallet add -wallet d: | ||
+ | </ | ||
+ | |||
+ | |||
+ | Wieder getestet, leider immer noch kein Erfolg. | ||
+ | |||
+ | Im nächsten Schritt ** NUR die beiden Root Zertifikate in der Wallet belassen**, die Wallet speichern UND in SQL*Plus NEUE Session starten! | ||
+ | |||
+ | **Es geht !!!!!** | ||
+ | |||
+ | |||
+ | <note tip>Nur die Root CA Zertifikate dürfen importiert werden! | ||
+ | Nicht das eigentliche Zertifikat der Gegenstelle verwenden!</ | ||
+ | |||
+ | Die Suche nach diesem Problem hat mich einen ganzen Nachmittag gekostet ... was für ein Mist...... | ||
+ | |||
+ | Support: | ||
+ | |||
+ | * https:// | ||
+ | * Troubleshooting ORA-29024: | ||
+ | * UTL_HTTP Fails With ORA-29024 After Importing WebServer' | ||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== ACL einrichten in 12g ==== | ||
+ | |||
+ | |||
+ | Auf den richtigen Port achten, bin mir ist SSL/TLS unter dem Port 465 zu ereichen. | ||
+ | <code plsql> | ||
+ | BEGIN | ||
+ | DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( | ||
+ | host => '< | ||
+ | , lower_port => 465 | ||
+ | , upper_port => 465 | ||
+ | ,ace => xs$ace_type(privilege_list => xs$name_list(' | ||
+ | | ||
+ | | ||
+ | END; | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | siehe auch https:// | ||
+ | |||
+ | Siehe dazu " | ||
+ | ---- | ||
+ | |||
+ | ==== ACL einrichten in 11g ==== | ||
+ | |||
+ | ACL anlegen: | ||
+ | <code plsql> | ||
+ | begin | ||
+ | dbms_network_acl_admin.create_acl ( | ||
+ | acl => ' | ||
+ | , description => 'Allow mail to be send' | ||
+ | , principal | ||
+ | , is_grant | ||
+ | , privilege | ||
+ | ); | ||
+ | commit; | ||
+ | end; | ||
+ | </ | ||
+ | |||
+ | Privileg hinzufügen: | ||
+ | <code plsql> | ||
+ | --add privileges like the ‘resolve’ privilege: | ||
+ | begin | ||
+ | | ||
+ | | ||
+ | , principal => ' | ||
+ | , is_grant | ||
+ | , privilege => ' | ||
+ | ); | ||
+ | commit; | ||
+ | end; | ||
+ | </ | ||
+ | |||
+ | ACL Zuordnen auf den Name/IP Adresse des eigentlichen Mail Servers: | ||
+ | <code plsql> | ||
+ | begin | ||
+ | dbms_network_acl_admin.assign_acl( | ||
+ | | ||
+ | , host => '< | ||
+ | ); | ||
+ | commit; | ||
+ | end; | ||
+ | </ | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | f==== Relay für Localhost Konfiguration==== | ||
+ | |||
+ | siehe => http:// | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Script um die ACL's zu überwachen ==== | ||
+ | |||
+ | Siehe auch unter https:// | ||
+ | |||
+ | | ||
+ | |||
+ | |||
+ | ---- | ||
+ | ==== Quellen ==== | ||
+ | |||
+ | 11g | ||
+ | * http:// | ||
+ | |||
+ | |||
+ | SSL | ||
+ | * http:// | ||
+ | * https:// | ||
+ | * http:// |
prog/apex_mail_acl.txt · Zuletzt geändert: 2019/10/27 10:23 von gpipperr