Application Express und HTTPS: Nie wieder "Certificate Validation Error"
Erscheinungsmonat |
APEX-Version |
Datenbankversion |
Juni 2017 |
alle |
alle |
Die Artikelreihe zum Thema "Application Express und REST Services" pausiert für eine Ausgabe - dafür
schieben wir einen Tipp ein, der zumindest mit dem Thema verwandt ist. Es geht HTTPS(!)-Requests einer
APEX-Anwendung.
Zunächst funktioniert ein solcher ganz genauso wie ein HTTP-Aufruf - man verwendet einfach die
HTTPS-URL. Zum Testen nehmen wir die HTTPS-URL des USGS (US Geological Survey), die bereits im
ersten Community Tipp zum Thema REST Services und Application Express
ein Thema war.
Der erste Versuch schlägt jedoch fast immer fehl ...
Blogs und Diskussionsforen sind voll von
Fragen, was bei dieser Fehlermeldung ("Certificate Validation Error") zu tun ist - in diesem Tipp
erfahren Sie es:
Die Fehlermeldung besagt, dass die Datenbank das SSL-Zertifikat, mit dem sich der Webserver ausgewiesen
hat, nicht validieren konnte. Für diese Validierung muss ein Oracle Wallet eingerichtet und
dann in Application Express konfiguriert werden. Vorab jedoch ein paar einfache, erklärende Worte zum
Thema SSL-Zertifikate (die Erklärungen sind sicherlich nicht vollständig, für das Verständnis dieses
Tipps sollten sie jedoch hinreichend sein):
Wenn Sie eine HTTPS-Verbindung zu einem Server aufbauen, weist dieser sich mit einem SSL-Zertifikat
aus. Ein solches Zertifikat funktioniert wie eine Art Personalausweis: es weist aus, dass der
Server, der auf die Anfrage antwortet, tatsächlich der ist, den man mit der URL angesprochen hat.
Nun stellt sich natürlich die Frage,
ob ein solcher "Ausweis" auch echt ist - und diese Echtheit wird von der Certificate Authority
zertifiziert: das SSL-Zertifikat des Webservers wird mit einem Zertifikat der CA "unterschrieben".
Das Zertifikat der CA kann nun wiederum von einer weiteren CA "unterschrieben" werden - womit
das nächste Zertifikat ins Spiel kommt. Diese Kette (Certificate Chain) kann auch noch länger werden;
irgendwo muss aber ein Ende sein - und das ist ein CA-Zertifikat, dem einfach vertraut wird, auch
wenn es nicht "unterschrieben" ist (Trusted Certificate).
In einem Web-Browser wie Firefox, Chrome oder anderen sind alle gängigen
CA-Zertifikate vorinstalliert - so kann man bequem im Internet surfen. Die Oracle-Datenbank verwaltet
solche Zertifikate in einem Wallet - dieses muss jedoch zuerst erzeugt werden, es ist zu Beginn leer
und die nötigen CA-Certifikate müssen hinzugefügt werden.
Um ein Wallet zu konfigurieren, brauchen Sie Zugang zum Dateisystem des Datenbankservers - auf Ihrem
persönlichen Entwicklungsrechner ist das normalerweise kein Problem; auf der Produktionsdatenbank
braucht es die Hilfe des Datenbankadministrators. Loggen Sie sich also auf dem Datenbankserver ein
und erzeugen Sie das Wallet mit dem Utility orapki (welches Teil der Datenbank-Software ist).
Erzeugen Sie ein (vorerst leeres) Wallet wie folgt.
Nun sollte in dem Verzeichnis, in dem Sie orapki gestartet haben, ein Unterverzeichnis namens
https_wallet vorhanden sein.
Navigieren Sie nun mit einem Webbrowser (hier wurde der Firefox verwendet)
zu der HTTPS-Adresse, die Sie mit APEX_WEB_SERVICE
oder UTL_HTTP ansprechen möchten. Die Zertifikate können Sie ansehen, indem Sie
das kleine
Schloß, welches links neben der Adressleiste zu sehen ist, anklicken. Klicken Sie sich dann, wie in den
folgenden Abbildungen gezeigt, bis zu den Informationen zum SSL-Zertifikat durch.
Abbildung 1: SSL-Informationen im Browser betrachten: Beispiel Firefox
Im letzten Dialog sehen Sie oben die Certificate Chain.
Das Zertifikat von earthquake.usgs.gov wurde
unterschrieben mit einem Zertifikat von Symantec; dessen Zertifikat wurde
wiederum unterschrieben von der Verisign Class 3 Public Primary Certification Authority.
Letzterer vertraut der Firefox Browser, es
wird also nicht mehr geprüft, von wem dieses Zertifikat unterschrieben wurde.
Um die Seite earthquake.usgs.gov also mit APEX_WEB_SERVICE oder
UTL_HTTP aufrufen zu können, muss das
Zertifikat der Verisign Class 3 Public Primary Certification Authority
in das Oracle Wallet als Trusted Certificate geladen werden.
Mit dem Firefox-Browser können Sie das Zertifikat auch gleich in eine Datei zu exportieren.
Klicken Sie dazu einfach im Dialog mit der Certificate Chain das oberste Zertifikat der
Verisign Class 3 Public Primary Certification Authority,
und dann unten links auf die Schaltfläche Exportieren. Legen Sie die Datei
(VeriSignClass3PublicPrimaryCertificationAuthority-G5.crt) dann
auf ihrem lokalen Rechner ab und transportieren Sie sie auf den Datenbankserver, wo Sie
das Wallet mit dem Utility orapki bearbeiten.
Abbildung 2: CA Zertifikat auf die lokale Festplatte herunterladen - am Beispiel Firefox
Nun können Sie das Zertifikat mit orapki in Ihr Wallet einfügen.
Nun sollte die Datenbank in der Lage sein, dass SSL-Zertifikat von earthquake.usgs.gov zu validieren.
Bevor wir das Wallet zentral in APEX konfigurieren und damit für alle verfügbar machen, lohnt sich jedoch noch ein kurzer Test in
SQL*Plus: Beim Aufruf von APEX_WEB_SERVICE.MAKE_REST_REQUEST können Sie den Pfad zu einem Wallet als Parameter P_WALLET_PATH
angeben.
Wenn dieser Test erfolgreich ist, macht es Sinn, das Wallet in den Application Express
Instance Settings einzurichten. Damit steht es für alle APEX-Workspaces zur Verfügung und
es muss bei Verwendung von APEX_WEB_SERVICE oder anderen PL/SQL Paketen nicht mehr eigens
angegeben werden.
Loggen Sie sich dazu als APEX-Administrator am Workspace INTERNAL ein und navigieren Sie
zu den Instance Settings.
Abbildung 3: Workspace INTERNAL - Instance Settings
Navigieren Sie zum Abschnitt Wallet und
tragen Sie bei Wallet Path den Pfad zum Verzeichnis
https_wallet auf dem Datenbankserver ein; mit dem Präfix
file://, genauso wie beim Test oben.
Abbildung 4: Das Verzeichnis "https_wallet" wird als Wallet Path in Application Express eingerichtet
Wenn Sie, für andere HTTPS-Server, weitere CA-Zertifikate brauchen, fügen Sie diese einfach dem
bestehenden Wallet hinzu - als Beispiel nehmen wir die Github API (api.github.com).
Gehen Sie nun wieder, wie bereits beschrieben vor: Öffnen Sie die Seite im Firefox Browser,
lassen Sie sich die Zertifikatsinformationen anzeigen und exportieren Sie das CA Certifikat
auf der obersten Ebene der Certificate Chain.
Abbildung 5: Root Zertifikat für Github.com exportieren
Die Datei DigiCertHighAssuranceEVRootCA.crt
importieren Sie dann wieder in das schon existierende Wallet.
Wenn Sie mit SQL*Plus testen, loggen Sie sich kurz ein und wieder aus - denn die Datenbank
liest die Wallet-Dateien nur einmal pro Session.
Auf diese Art und Weise lassen sich nahezu alle HTTPS-Server iom Intra- oder Internet
ansprechen. Auch HTTPS-Server mit self-signed certificates, die
auf Entwicklungs- oder Testsystemen gerne eingesetzt werden, sind so kein Problem mehr.
Bei einem self-signed certificate ist keine Certificate Authority im Spiel - das Zertifikat unterschreibt
sich quasi selbst. Wenn Sie eine solche Seite mit dem Browser (die folgenden Bildschirmfotos wurden mit Firefox gemacht)
aufrufen, bekommen Sie eine Warnung angezeigt, etwa wie in Abbildung 6.
Abbildung 6: Der Browser warnt for Webseiten, die ein self-signed certificate verwenden
Klicken Sie auf die Schaltfläche Add Exception (bei anderen Browsern sollte es eine ähnliche geben). Daraufhin
sollten Sie einen Dialog mit Details, wie in Abbildung 7, sehen.
Abbildung 7: Details zur Webseite mit dem self-signed certificate
Ein Klick auf Confirm Security Exception wäre die Anweisung an den Browser, diesem Zertifikat zu
vertrauen und den Zugriff auf die Webseite fortzusetzen. Wir wollen aber mit der Datenbank und
Application Express zugreifen. Also klicken Sie die Schaltfläche View, um zum Zertifikat selbst
zu gelangen (Abbildung 8). Diesen Dialog kennen Sie schon: Mit der Schaltfläche Export laden Sie
das Zertifikat auf Ihren Rechner herunter.
Abbildung 8: Das selbst unterschriebene Zertifikat kann von hier aus exportiert werden
Danach fügen Sie die heruntergeladene Datei mit dem Werkzeug orapki zum bestehenden Wallet hinzu.
Diese Schritte müssen Sie für jeden Webserver mit einem selbst unterschriebenen Zertifikat, auf
den Sie mit der Datenbank und Application Express zugreifen möchten, durchführen. Bei größeren Systemen
empfiehlt es sich sicherlich, für die Verwaltung des Wallets einen definierten Prozess einzurichten, so
dass ...
- ... Entwickler wissen, wie Sie erreichen oder beantragen können, dass neue Zertifikate aufgenommen werden.
- ... abgelaufene CA-Zertifikate entfernt und durch neue ersetzt werden.
- ... das Wallet auf allen Datenbanken bereitgestellt und eingerichtet wird.
zurück zur Community-Seite
|