=====Das SQL*Net Protokoll mit einer symmetrischen Verschlüsselung wie DES / AES oder RC4 schützen===== 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: * [[http://de.wikipedia.org/wiki/Data_Encryption_Standard|Data Encryption Standard (DES) ]] * [[http://de.wikipedia.org/wiki/Advanced_Encryption_Standard|Advanced Encryption Standard (AES)]] * [[http://de.wikipedia.org/wiki/RC4|RC4]]. Alternativ kann aber auch das SSL/TLS Protokoll eingesetzt werden, siehe dazu =>[[dba:sql_net_ssl|SSL - Secure Sockets Layer - für SQL*Net aktivieren]]. * Vorteil der symmetrischen Verschlüsselung: => Performance * Vorteil der SSL Verschlüsselung: => Der SSL Key kann für die Validierung von Clients verwendet werden 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. ===Welchen Algorithmus wählen?=== Entscheidungsgrundlagen: * Performance / CPU Bedarf * Legal Requirement wie die CIS Checklisten / PCI DSS Requirement 3 usw. * Erreichter Sicherheitsgrad 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 * http://wiki.openwrt.org/inbox/benchmark.openssl * Benchmark der Algorithmen: http://www.cryptopp.com/benchmarks.html Allgemeine Überlegungen zu dem Thema: * http://www.csoonline.com/article/2124346/compliance/end-to-end-encryption--the-pci-security-holy-grail.html ==Erreichbarer Sicherheitsgrad== RC4 zum Beispiel wird seit 2013 nicht mehr empfohlen siehe https://www.bsi.bund.de/DE/Publikationen/TechnischeRichtlinien/tr02102/index_htm.html === Prüfen, welche Verschlüsselungsalgorithmen zur Verfügung stehen === 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 ==== Lizenz ==== 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. ---- ==== Konfiguration ==== Die Verschlüsselung wird über die Datei "sqlnet.ora" konfiguriert/aktiviert === Client === 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 [[https://docs.oracle.com/cd/E11882_01/network.112/e10835/sqlnet.htm#NETRF205| 11g Parameters for the sqlnet.ora File]] oder [[https://docs.oracle.com/database/121/NETRF/sqlnet.htm#NETRF206 | 12c Parameters for the sqlnet.ora File]] Alles weitere wird dann vom Oracle Listener gesteuert. Weitere mögliche Parameter für den Client: * SQLNET.ENCRYPTION_TYPES_CLIENT - legt fest, welche Verschlüsselungsalgorithmen unterstützt werden * SQLNET.CRYPTO_SEED - Legt einen Seed für den gewählten Verschlüsselungsalgorithmus fest - taucht in der 11g R2 und 12c nicht mehr auf?? 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) === Server === 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: [[https://docs.oracle.com/cd/E11882_01/network.112/e40393/asoconfg.htm#BBJFEDAF|Table 9-3 Valid Encryption Algorithms]] und in der 12c [[https://docs.oracle.com/database/121/DBSEG/asoconfg.htm#BBJFEDAF|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 ==== Test und Überprüfung ==== === Trace === Zum Schluss lässt sich leider nur über einen Trace feststellen, ob die Verschlüsselung auch funktioniert. siehe [[dba:sqlnet_trace|Übersicht SQL*Net Probleme]] ==Testen, ob das Verschlüsselung vom Server aktiviert ist / erwartet wird== 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 ... === Session Eigenschaften in der DB überprüfen === Über die View [[http://docs.oracle.com/cloud/latest/db121/REFRN/refrn30224.htm#REFRN30224|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 / ==== Quellen ==== Oracle: * https://docs.oracle.com/cd/E11882_01/network.112/e40393/asoconfg.htm#ASOAG9599 * https://apexapps.oracle.com/pls/apex/f?p=44785:24:4232769610985200::NO:24:P24_CONTENT_ID,P24_PREV_PAGE:4267,2 Support: * Overview and Configuration of Oracle Network Encryption (Doc ID 76629.1) * Using and verifying ASO encryption and checksum with JDBC/thin (Doc ID 1377228.1)