Marco Burmeister
private Homepage
Bei Oracle Datenbanken gibt es verschiedene Möglichkeiten die Verbindung (Session) zur Datenbank zu verschlüsseln.
Hier soll es um eine relativ einfache Variante gehen, die oftmals keine Anpassung auf Client-Seite erfordert. Das hängt aber von der Art der Einstellung und dem Client ab.
Mit dieser Anleitung ist es möglich sicherzustellen, dass niemand den Netzwerkverkehr im Klartext mitlesen kann.
Hinweis:
Für die Richtigkeit der Daten übernehme ich keine Gewähr!
Die Seite ist in die folgenden Bereiche eingeteilt:
Netzwerk Verschlüsselung für Datenbankverbindung / Session - Allgemein
Mit dem hier beschriebenen Vorgehen wird die Kommunikation zwischen Client und Datenbank für die Datenbank-Session verschlüsselt.
Damit kann dann mit einem Netzwerk-Tool nicht mehr der Inhalt der Kommunikation im Klartext mitgelesen werden.
Im Ergebnis ist es wie der Unterschied zwischen der Verbindung mit einem Linux Server via TELNET (= keine Verschlüsselung) oder SSH (=mit Verschlüsselung).
In der Oracle Dokumentation gibt es noch weitere Hinweise. Hier möchte ich nur die einfache Fassung beschreiben.
Wir können auf Seite des Servers oder auf Seit des Clients Einstellungen vornehmen, welche die Verbindungsverschlüsselung aktivieren.
Im Standard sind beide Seiten so eingestellt, dass sie verschlüsselte Verbindung akzeptieren (Einstellung ACCEPTED
- siehe weiter unten).
Das bedeutet, dass die Anpassung am Datenbank Server gleich alle eingehenden Verbindungen betreffen wird, aber die Einstellung am Client nur den
Verbindungsaufbau von diesem Client zum Server beeinflusst.
Die Parameter / Einstellungen können für die Datenbank Instanz in der sqlnet.ora
unterhalb von $ORACLE_HOME/network/admin
bzw. dem Pfad von TNS_ADMIN
definiert werden.
Für den Client kann die Einstellung wahlweise über den Connect-String mitgegeben werden oder ebenfalls via Eintrag in sqlnet.ora
, die unterhalb von
$ORACLE_HOME/network/admin
oder dem Pfad der in TNS_ADMIN
definiert ist, liegen muss.
Es gibt insgesamt 4 Kern-Einstellungen, die das Verhalten der Verbindungsaufnahme steuern.
REJECTED
= keine verschlüsselte VerbindungACCEPTED
= verschlüsselte Verbindung wird angenommenREQUESTED
= verschlüsselte Verbindung wird angefragtREQUIRED
= verschlüsselte Verbindung wird vorausgesetztClientREJECTED | ClientACCEPTED | ClientREQUESTED | ClientREQUIRED | |
ServerREJECTED | ✓ | ✓ | ✓ | ❌ |
ServerACCEPTED | ✓ | ✓ | 🔒 | 🔒 |
ServerREQUESTED | ✓ | 🔒 | 🔒 | 🔒 |
ServerREQUIRED | ❌ | 🔒 | 🔒 | 🔒 |
Symbol | Bedeutung |
---|---|
✓ | Verbindung wird hergestellt |
❌ | keine Verbindung |
🔒 | Verbindung wird hergestellt und ist verschlüsselt |
MD5
sollte nicht mehr verwendet werden und ist in bestimmten Oracle DB Versionen im Status deprecated
.
Netzwerk Verschlüsselung für Datenbankverbindung - Server-Einstellung
Aus den ganzen Möglichkeiten auf Seiten der Datenbank Instanz die notwendigen Einstellungen vorzunehmen, habe ich oft die folgende verwendet:
Die Einträge sind in der sqlnet.ora
unterhalb des Pfades der Variable TNS_ADMIN
bzw. $ORACLE_HOME/network/admin
vorzunehmen.
In dem Beispiel habe ich in der sqlnet.ora
die Verbindungsaufnahme in verschlüsselter Form verlangt. Ebenso wird eine Checksum verlangt.
Bei den verwendeten AES- und SHA-Typen hatte ich mich zwischen Sicherheit und Last / Aufwand ein wenig zu entscheiden und bin bei den angegebenen Werten gelandet.
# Encryption
SQLNET.ENCRYPTION_SERVER = REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256)
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256)
# Encryption
Netzwerk Verschlüsselung für Datenbankverbindung - Client-Einstellung
Beim Client haben wir drei Möglichkeiten. Es hängt von der Situation ab, welches Szenario sinnvoll ist.
Szenario | Beschreibung |
---|---|
[keine Aktion] | Wir nehmen keine Einstellung vor. Da Oracle einige Standad-Werte vorgibt, werden wir eine verschlüsselte Verbindung erhalten, wenn wir
von Seiten der Datenbank Instanz eine Verschlüsselung erzwingen.
ACHTUNG: Hier kann es mit alten (Oracle) Clients vielleicht zu Problemen kommen. Das Verhalten ist hier nicht immer vorhersehbar. |
Oracle Client mit sqlnet.ora | Hier gehen wir von einem Client aus, welcher auch die sqlnet.ora als Datei für Einstellungen kennt.
Die entsprechenden Einstellungen werden im Anschluss gezeigt und ähneln denen der Datenbank Instanz. Die Schlüsselworte sind nur auszutauschen und der Modus zu prüfen.
Bei diesem Verfahren können wir ein bestimmtes Verhalten erwarten. |
Oracle Connect-String | Hier geben wir im Connect-String schon Dinge vor.
Wir können z.B. bei einem JDBC Connect String den folgenden String ergänzen (Security=(ENCRYPTION_LEVEL=REQUIRED)(CRYPTO_CHECKSUM_CLIENT=REQUIRED)) , um
eine verschlüsselte Verbindung zu erzwingen.
Bei diesem Verfahren können wir ein bestimmtes Verhalten erwarten. |
sqlnet.ora
-Einstellung
sqlnet.ora
die Verbindungsaufnahme in verschlüsselter Form akzeptiert. Ebenso wird eine Checksum akzeptiert.
Bei den verwendeten AES- und SHA-Typen hatte ich mich zwischen Sicherheit und Last / Aufwand ein wenig zu entscheiden und bin bei den angegebenen Werten gelandet.
Sicherer wäre es wenn wir die verschlüsselte Form verlangen. Aber in meinem Beispiel überlasse ich der Datenbank den Zwang zur Einhaltung.
# Encryption
SQLNET.ENCRYPTION_CLIENT=ACCEPTED
SQLNET.ENCRYPTION_TYPES_CLIENT=(AES256,AES192,AES128)
SQLNET.CRYPTO_CHECKSUM_CLIENT=ACCEPTED
SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT=(SHA256,SHA384,SHA512)
# Encryption
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=<host>)(PORT=<Port>))(CONNECT_DATA=(SERVICE_NAME=<Servicename>)))
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=<host>)(PORT=<Port>))(CONNECT_DATA=(SERVICE_NAME=<Servicename>))(Security=(ENCRYPTION_LEVEL=REQUIRED)(CRYPTO_CHECKSUM_CLIENT=REQUIRED)))
Netzwerk Verschlüsselung für Datenbankverbindung - Prüfung Verbindung
Jetzt haben wir die Verschlüsselung eingerichtet und möchten herausfinden, ob die Verbindung zur Datenbank wirklich verschlüsselt wird.
Hierzu können wir das folgende Statement verwenden:
Für die eigene Verbindung:
select network_service_banner
from v$session_connect_info
where sid in (select distinct sid from v$mystat);
Für eine beliebige Verbindung (SID
muss bekannt sein):
select network_service_banner
from v$session_connect_info
where sid = <SID>;
Es gibt nun eine kleine Liste als Ausgabe.
Wenn die Verbindung verschlüsselt ist, wird die folgende Ausgabe angezeigt:
NETWORK_SERVICE_BANNER
-------------------------------------------------------------------------------------
TCP/IP NT Protocol Adapter for Linux: Version 12.1.0.2.0 - Production
Encryption service for Linux: Version 12.1.0.2.0 - Production
AES256 Encryption service adapter for Linux: Version 12.1.0.2.0 - Production
Crypto-checksumming service for Linux: Version 12.1.0.2.0 - Production
SHA1 Crypto-checksumming service adapter for Linux: Version 12.1.0.2.0 - Production
NETWORK_SERVICE_BANNER
----------------------------------------------
TCP/IP NT Protocol Adapter [...] - Production
Encryption service [...] - Production
AES256 Encryption service adapter [...] - Production
Crypto-checksumming service [...] - Production
SHA1 Crypto-checksumming service [...] - Production
NETWORK_SERVICE_BANNER
-------------------------------------------------------------------------------------
TCP/IP NT Protocol Adapter for Linux: Version 12.1.0.2.0 - Production
Encryption service for Linux: Version 12.1.0.2.0 - Production
Crypto-checksumming service for Linux: Version 12.1.0.2.0 - Production
NETWORK_SERVICE_BANNER
----------------------------------------------
TCP/IP NT Protocol Adapter [...] - Production
Encryption service [...] - Production
Crypto-checksumming service [...] - Production
Netzwerk Verschlüsselung für Datenbankverbindung - Cloud Control
Einführung
Auch Cloud Control kann mit verschlüsselten Verbindungen zur Oracle Repository Datenbank umgehen.
Zur Aktivierung sind bei Cloud Control 13.5 ein paar Dinge einzustellen.
Darum soll es in diesem Abschnitt gehen.
Vorarbeiten
Bevor wir bei Cloud Control die Einstellungen für die verschlüsselte Datenbankverbindung konfigurieren, muss folgendes
vorbereitet sein:
emctl
Einstellungen vornehmen. Im Anschluss ist die Datei emgc.properties
zu pflegen.
emctl
. Die folgenden Befehle müssen einzeln ausgeführt werden, da
das Passwort vom Cloud Control Datenbank-Benutzer sysman
abgefragt wird.
Die Parameter und Werte entsprechen den Einstellungen für den Client und der sqlnet.ora
.
Diese Befehle können wir nur erfolgreich absetzen, wenn Cloud Control gestartet ist.
emctl set property -name oracle.sysman.core.conn.enableEncryption -value 'true'
emctl set property -name oracle.net.encryption_client -value 'REQUESTED'
emctl set property -name oracle.sysman.core.conn.encryption_types_client -value '( AES256 )'
emctl set property -name oracle.net.crypto_checksum_client -value 'REQUESTED'
emctl set property -name oracle.sysman.core.conn.crypto_checksum_types_client -value '( SHA256 )'
emctl set property -name \
oracle.sysman.core.conn.enableEncryption -value 'true'
emctl set property -name \
oracle.net.encryption_client -value 'REQUESTED'
emctl set property -name \
oracle.sysman.core.conn.encryption_types_client \
-value '( AES256 )'
emctl set property -name \
oracle.net.crypto_checksum_client -value 'REQUESTED'
emctl set property -name \
oracle.sysman.core.conn.crypto_checksum_types_client \
-value '( SHA256 )'
/oracle/u01/app/oracl/product/gc_instance_<Versionsnummer>/em/<Instanz>
).
/oracle/u01/app/oracl/product/gc_instance_13500/em/EMGC_OMS1
.
emgc.properties
die folgenden Zeilen:
oracle.sysman.core.conn.enableEncryption=true
oracle.net.encryption_client=REQUESTED
oracle.net.encryption_types_client=(AES256)
oracle.net.crypto_checksum_client=REQUESTED
oracle.net.crypto_checksum_types_client=(SHA256)
sqlnet.ora
.
REQUIRED
).
sqlnet.ora
der Datenbankinstanz
die Einstellungen der sqlnet.ora
wie folgt um und starte danach die Datenbankinstanz durch.
SQLNET.ENCRYPTION_SERVER = REQUIRED
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED
SQLNET.ENCRYPTION_SERVER = ACCEPTED
SQLNET.CRYPTO_CHECKSUM_SERVER = ACCEPTED
sqlnet.ora
der Datenbankinstanz die alten Einstellungen zum Themen Verbindungsverschlüsselung wieder her.
Hinweis:
Für die Richtigkeit der Daten übernehme ich keine Gewähr!
Für den Inhalt von Internet-Seiten, auf die von dieser Seite verwiesen wird, übernehme ich keine Verantwortung!
Marco Burmeister, Copyright © 2024 - 2025
zuletzt geändert: 2024-08-11
URL: https://www.marco-burmeister.de/oracle/de_oracle_network_encryption_netzwerk_verschluesselung.html
Impressum