Die Verschlüsselung des SQL*Netwerk Protokolls war/ist Teil der Secure Network Services (SNS) (vor 8i ?) bzw. Oracle Advanced Security ab (8i - 11g R1). Ab 11g R2 (Mitte 2013) kann anscheinend die Optionen für alle DB Editionen eingesetzt werden und ist nicht mehr Teil der DB EE Optionen.
Das SQL*Net Protokoll kann mit einer symmetrischen Verschlüsselung mit folgenden Algorithmen geschützt werden:
Alternativ kann aber auch das SSL/TLS Protokoll eingesetzt werden, siehe dazu ⇒SSL - Secure Sockets Layer - für SQL*Net aktivieren.
Neben der reinen Verschlüsselung kann auch über einen Checksum Algorithmus wie SH-1 sichergestellt werden, das die Daten unterwegs nicht manipuliert wurden, bei einem RC4 Algorithmus ist das auch dringenden anzuraten.
Entscheidungsgrundlagen:
Performance Überlegungen:
Eigener Benchmark für die verschiedenen Algorithmen auf der DB Maschine mit „openssl“ erstellen:
openssl speed ... Doing rc4 for 3s on 1024 size blocks: 931.586 rc4's in 2.98s Doing des ede3 for 3s on 1024 size blocks: 56.305 des ede3's in 3.00s Doing aes-128 cbc for 3s on 1024 size blocks: 261.485 aes-128 cbc's in 3.01s Doing aes-192 cbc for 3s on 1024 size blocks: 195.826 aes-192 cbc's in 3.01s Doing aes-256 cbc for 3s on 1024 size blocks: 177.465 aes-256 cbc's in 3.01s ... The 'numbers' are in 1000s of bytes per second processed. type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes .. aes-128 cbc 49178.34k 53913.86k 55103.94k 55214.19k 55585.25k aes-192 cbc 39690.63k 39582.07k 43645.81k 45839.35k 43046.90k aes-256 cbc 34692.58k 36641.99k 36443.21k 34194.83k 34803.01k
Damit wären mit einem RC4 in 3s am meisten Blocks verschlüsselt worden.
Damit kann ein Gefühl für den CPU Aufwand hinter der Algorithmen gewonnen werden.
Mehr zu Benchmarks
Allgemeine Überlegungen zu dem Thema:
RC4 zum Beispiel wird seit 2013 nicht mehr empfohlen
siehe https://www.bsi.bund.de/DE/Publikationen/TechnischeRichtlinien/tr02102/index_htm.html
Auf einer Linux Maschine:
#Oracle Umgebung setzen: cd $ORACLE_HOME/bin ./adapters ... Installed Oracle Advanced Security options are: RC4 40-bit encryption RC4 56-bit encryption RC4 128-bit encryption RC4 256-bit encryption DES40 40-bit encryption DES 56-bit encryption 3DES 112-bit encryption 3DES 168-bit encryption AES 128-bit encryption AES 192-bit encryption AES 256-bit encryption MD5 crypto-checksumming SHA-1 crypto-checksumming ... ./adapters sqlplus
Seit Mitte 2013 scheint die SQL*Net Verschlüsselung NICHT mehr Teil der Advanced Securtiy Option zu sein.
11g
Siehe Lizenz Dokument ⇒ https://docs.oracle.com/cd/E11882_01/license.112/e47877.pdf
Folgender Satz (Auf Seite 23 ) sagt dann wohl aus das die ASO Optionen nicht benötigt wird:
.. Network encryption (native network encryption and SSL/TLS) and strong authentication services (Kerberos, PKI, and RADIUS) are no longer part of Oracle Advanced Security and are available in all licensed editions of all supported releases of the Oracle database ..
12c
Siehe ⇒ https://docs.oracle.com/database/121/DBLIC/editions.htm#DBLIC109
Laut diesen Dokument ist die Verschlüsselung nun in allen Editionen der Datenbank im Standard enthalten.
Die Verschlüsselung wird über die Datei „sqlnet.ora“ konfiguriert/aktiviert
Im einfachsten Fall muss auf dem Client explizit nichts definiert werden, da der Default Wert für SQLNET.ENCRYPTION_CLIENT bereits auf „accepted“ steht.
SQLNET.ENCRYPTION_CLIENT=accepted
Für die möglichen Werte siehe 11g Parameters for the sqlnet.ora File oder 12c Parameters for the sqlnet.ora File
Alles weitere wird dann vom Oracle Listener gesteuert.
Weitere mögliche Parameter für den Client:
Empfehlenswert ist auch die Aktivierung einer Checksumme (besonders wenn eine RC4 Versclüsselung zum Einsatz kommen soll) mit:
SQLNET.CRYPTO_CHECKSUM_CLIENT = [accepted | rejected | requested | required] SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT = (valid_crypto_checksum_algorithm [,valid_crypto_checksum_algorithm]) wie SQLNET.CRYPTO_CHECKSUM_CLIENT =required SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT = (SHA1)
Auf der Server Seite muss in der sqlnet.ora des Listeners (stets die sqlnet.ora im selben Verzeichnis wie die listener.ora) die Verschlüsselung aktiviert werden
sqlnet.ora
SQLNET.ENCRYPTION_SERVER=required SQLNET.ENCRYPTION_TYPES_SERVER=(3des168,rc4_256) SQLNET.CRYPTO_SEED = 'DiesIsteineLang!Chryp0toS33dalsBeiSp1el'
In der 11g R2 stehen dazu die folgenden Algorithmen zur Verfügung: Table 9-3 Valid Encryption Algorithms und in der 12c Table 13-3 Valid Encryption Algorithms
Empfehlenswert ist auch die Aktivierung einer Checksumme (besonders wenn eine RC4 Verschlüsselung zum Einsatz kommen soll) mit:
SQLNET.CRYPTO_CHECKSUM_SERVER = [accepted | rejected | requested | required] SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (valid_crypto_checksum_algorithm [,valid_crypto_checksum_algorithm]) wie SQLNET.CRYPTO_CHECKSUM_SERVER=required SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT=(SHA1)
Werte eintragen und Listener neu starten
Zum Schluss lässt sich leider nur über einen Trace feststellen, ob die Verschlüsselung auch funktioniert.
Im der Client „sqlnet.ora“ den Paramter „SQLNET.ENCRYPTION_CLIENT=rejected“ setzen und testen:
sqlplus gpi/gpi@oragpi .. ORA-12660: Verschlüsselungsparameter oder Parameter für verschlüsselte Prüfsummen nicht kompatibel ...
Über die View gv$session_connect_info können die Netzwerk Eigenschaften der angemeldeten Sessions überprüft werden:
SELECT s.inst_id , s.sid , s.serial# , s.status , s.username , s.machine , s.program , c.osuser , c.network_service_banner , c.CLIENT_CHARSET , c.CLIENT_OCI_LIBRARY , c.AUTHENTICATION_TYPE FROM gv$session_connect_info c , gv$session s WHERE c.sid = s.sid AND c.serial#=s.serial# AND c.inst_id=s.inst_id AND s.username IS NOT NULL ORDER BY 1 /
Oracle:
Support: