Benutzer-Werkzeuge

Webseiten-Werkzeuge


dba:sql_net_ssl

Oracle SQL*Net - SSL - Secure Sockets Layer - für SQL*Net aktivieren

Ziel ist es, eine SQL*Net Verbindung zur Datenbank über das SSL 3.1 (Bzw. das TLS 1.0 Protokoll) auf einem Windows System für einen 11g R2 Datenbank einzurichten.

Übersicht genereller Ablauf:

  • Eine Wallet auf dem Client und dem Server mit dem Programm „orapki“ erstellen
  • Root Zertifikat für je für Client und Server erzeugen
  • Zertifikate zwischen Client und Server Wallet jeweils austauschen
  • „sqlnet.ora“ Listener Konfiguration auf der Server Seite
  • „sqlnet.ora“ Client Konfiguration
  • Test und Debuggen

Im Anschluss wird das Zertifkat kann auch das Zertifikat im Store im Microsoft Betriebsystem abgelegt werden (How To Configure SSL for Client Authentication And Encryption Using Microsoft Certificate Store (MCS) (Doc ID 2188562.1))


Lizenz

11g

Siehe Lizenz Dokument ⇒ https://docs.oracle.com/cd/E11882_01/license.112/e47877.pdf

Laut diesen Dokument ist für die SSL Konfiguration benötigte Wallet keine Bestandteil von ASO mehr.

Für SSL Verschlüsselung bei Datenbank Links wird auch die ASO Option nicht mehr benötigt.

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 SSL Verschlüsselung in allen Editionen der Datenbank im Standard enthalten.


Eine Wallet auf dem Client und dem Server mit "orapki" erstellen und konfigurieren

Auf dem Server die Server Wallet konfigurieren

Die Konfiguration erfolgt in einer Dos Shell, leider gibt es mit den Übergabe Parametern in einer Powershell ein kleines Problem.

Verzeichnis für die Wallet anlegen:

mkdir d:\oracle\server_wallet

Wallet anlegen:

d:\oracle\wallet

REM Oracle Umgebung und Pfade setzen!
set ORACLE_HOME=D:\oracle\product\11.2.0.3\dbhome_1
set PATH=%ORACLE_HOME%\bin;%PATH%
 
orapki wallet create -wallet d:\oracle\server_wallet -auto_login -pwd SSLConfig2015Server
 
 
D:\oracle>dir /b d:\oracle\server_wallet
 
cwallet.sso
ewallet.p12

Da nur unser eigenes und das vom Client verwendet werden soll. die bestehenden Zertifikate entfernen:

orapki wallet remove -wallet d:\oracle\server_wallet  -trusted_cert_all -pwd SSLConfig2015Server
 
orapki wallet display -wallet D:\oracle\server_wallet

Ein selbstsigniertes Zertifikat mit einer Gültigikeit von 5 Jahren anlegen

Beschreibung des Zertifikates:

  1. CN ⇒ Common Name des Zertifkates (bei einer Website wäre das die Domain, hier frei wählbar, z.b. der DB Server Name)
  2. OU ⇒ Organizational Unit (Abteilung)
  3. O ⇒ Organization (Firma)
  4. C ⇒ Country (Land)
  5. L ⇒ Locality(Stadt)
  6. S ⇒ State (Bundesland)
orapki wallet add -wallet d:\oracle\server_wallet -dn "CN=gpi_dbserver01,O=gpiconsult;OU=DBA_Department,C=DE,S=Bavaria,L=Munich" -keysize 1024 -self_signed -validity 1825 -pwd SSLConfig2015Server

!In der Powershell gibt es ein Problem mit der Übergabe der Parameter für den „dn“ Parameter!

Anzeigen lassen:

orapki wallet display -wallet D:\oracle\server_wallet
 
..
Requested Certificates:
User Certificates:
Subject:        CN=gpi_dbserver01,O=gpiconsult,OU=DBA_Department,C=DE,ST=Bavaria,L=Munich
Trusted Certificates:
Subject:        CN=gpi_dbserver01,O=gpiconsult,OU=DBA_Department,C=DE,ST=Bavaria,L=Munich
..

Root Zertifikat exportieren (wird später dann wieder in die Client Wallet importiert:

orapki wallet export -wallet d:\oracle\server_wallet -dn "CN=gpi_dbserver01,O=gpiconsult,OU=DBA_Department,C=DE,ST=Bavaria,L=Munich" -cert d:\oracle\server_wallet\gpi_dbserver01.cert -pwd SSLConfig2015Server

Client konfigurieren

Nun auf dem Client eine eigene Wallet anlegen und dort auch das Zertifikat des Servers importieren:

REM anlegen
 
mkdir d:\oracle\client_wallet
 
cd d:\oracle\client_wallet
 
 
orapki wallet create -wallet d:\oracle\client_wallet -auto_login -pwd SSLConfig2015Client
 
 
dir
 
..
01.05.2015  17:59             3.589 cwallet.sso
01.05.2015  17:59             3.512 ewallet.p12
..

 
REM Alle default Zertifikate entfernen
 
orapki wallet remove -wallet d:\oracle\client_wallet  -trusted_cert_all -pwd SSLConfig2015Client

 
REM Neues Zertifikat für den client anlegen
 
orapki wallet add -wallet d:\oracle\client_wallet -dn "CN=gpi_dbaclient,O=gpiconsult,OU=DBA_Department,C=DE,ST=Bavaria,L=Munich" -keysize 1024 -self_signed -validity 1825 -pwd SSLConfig2015Client
 
 
orapki wallet display -wallet D:\oracle\client_wallet
 
..
Requested Certificates:
User Certificates:
Subject:        CN=gpi_dbaclient,O=gpiconsult,OU=DBA_Department,C=DE,ST=Bavaria,L=Munich
Trusted Certificates:
Subject:        CN=gpi_dbaclient,O=gpiconsult,OU=DBA_Department,C=DE,ST=Bavaria,L=Munich
..

 
REM Client Zertifikat exportieren
 
orapki wallet export -wallet d:\oracle\client_wallet -dn "CN=gpi_dbaclient,O=gpiconsult,OU=DBA_Department,C=DE,ST=Bavaria,L=Munich" -cert d:\oracle\client_wallet\gpi_client.cert -pwd SSLConfig2015Client

Das Server Zertifikat nun auf in die Client Wallet importieren:

orapki wallet add -wallet d:\oracle\client_wallet -trusted_cert -cert  d:\oracle\server_wallet\gpi_dbserver01.cert -pwd SSLConfig2015Client

REM pürfen
 
orapki wallet display -wallet D:\oracle\client_wallet
..
User Certificates:
User Certificates:
Subject:        CN=gpi_dbaclient,O=gpiconsult,OU=DBA_Department,C=DE,ST=Bavaria,L=Munich
Trusted Certificates:
Subject:        CN=gpi_dbserver01,O=gpiconsult,OU=DBA_Department,C=DE,ST=Bavaria,L=Munich
Subject:        CN=gpi_dbaclient,O=gpiconsult,OU=DBA_Department,C=DE,ST=Bavaria,L=Munich
...

Das Client Zertifikat nun auf in die Server Wallet importieren:

orapki wallet add -wallet d:\oracle\server_wallet -trusted_cert -cert d:\oracle\client_wallet\gpi_client.cert -pwd SSLConfig2015Server

REM prüfen
 
orapki wallet display -wallet D:\oracle\server_wallet
..
Requested Certificates:
User Certificates:
Subject:        CN=gpi_dbserver01,O=gpiconsult,OU=DBA_Department,C=DE,ST=Bavaria,L=Munich
Trusted Certificates:
Subject:        CN=gpi_dbserver01,O=gpiconsult,OU=DBA_Department,C=DE,ST=Bavaria,L=Munich
Subject:        CN=gpi_dbaclient,O=gpiconsult,OU=DBA_Department,C=DE,ST=Bavaria,L=Munich
...

Den Oracle Listener konfigurieren

Überprüfen welche „sqlnet.ora“ und listener.ora in Verwendung ist:

lsnrctl status LISTENER
 
..
Parameterdatei des Listener D:\oracle\product\11.2.0.3\dbhome_1\network\admin\listener.ora
...

Port für die SSL Kommunikation und Pfad zur Wallet angeben, dazu die Parameter Datei „listener.ora“ öffnen, SSL Listener Port definieren und Pfad zur Wallet hinterlegen:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
	  (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.1)(PORT = 1521))
    )
	(DESCRIPTION =
	  (ADDRESS = (PROTOCOL = TCPS)(HOST = 10.10.10.1)(PORT = 1522))
    )    
  )

..
WALLET_LOCATION =
  (SOURCE =
    (METHOD = FILE)
    (METHOD_DATA =
      (DIRECTORY = D:\oracle\server_wallet)
    )
  )
..  

Serverseitige „sqlnet.ora“ anpassen (liegt parallel zur „listener.ora“!):

SQLNET.AUTHENTICATION_SERVICES= (NTS,BEQ,TCPS)

#use the TLS 1.0 (SSL 3.1)
SSL_VERSION = 1.0

SSL_CLIENT_AUTHENTICATION = TRUE

WALLET_LOCATION =
  (SOURCE =
   (METHOD = FILE)
    (METHOD_DATA =
     (DIRECTORY = D:\oracle\wallet)
    )
   )

In einer administrativen Session den Listener neu starten bzw. die Konfiguration neu einlesen:

# Oracle Umgebung setzen
 
lsnrctl reload

Client konfigurieren

„sqlnet.ora“ des Clients lokalisieren:

tnsping oragpi
 
...
Parameterdateien benutzt:
D:\oracle\TNS_ADMIN\sqlnet.ora
...

sqlnet.ora anpassen:

SQLNET.AUTHENTICATION_SERVICES= (NTS,BEQ, TCPS)
SSL_CLIENT_AUTHENTICATION = TRUE

#use the TLS 1.0 (SSL 3.1)
SSL_VERSION = 1.0

WALLET_LOCATION =
  (SOURCE =
    (METHOD = FILE)
    (METHOD_DATA =
      (DIRECTORY = D:\oracle\client_wallet)
    )
  )

Tnsnames Eintrag für SSL Port in der tnsnames.ora eintragen:

oragpiSSL=
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCPS)(HOST = 10.10.10.1)(PORT = 1522))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = GPI)
    )
  )

Wallet über den Oracle Wallet Manager prüfen:

Aufrufen unter Windows mit:

D:\oracle\product\11.2.0.3\dbhome_1\bin\launch.exe "D:\oracle\product\11.2.0.3\dbhome_1\bin" owm.cl

Pfad zur Wallet angeben und mit Password öffnen und überprüfen:  Oracle Wallet Manager

Test

Tnsping Test:

tnsping oragpiSSL
...
Verbindungsversuch mit (DESCRIPTION = (ADDRESS = (PROTOCOL = TCPS)(HOST = 10.10.10.1)(PORT = 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME
 = GPI)))
OK (30 ms)

An der DB anmelden und das Protokoll überpürfen:

sqlplus system@oragpiSSL
 
SELECT SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') AS connect_protocol FROM dual;
 
CONNECT_PROTOCOL
-------------------
tcps

SSL überprüfen

Zwar nicht dafür vorgesehen, ein paar Erkenntnisse können aber gewonnen werden

SSLyze - Fast and full-featured SSL scanner ⇒ https://github.com/nabla-c0d3/sslyze

D:\tools\sslyze> .\sslyze.exe --regular  10.10.10.1:1522
 
 
 
..
SCAN RESULTS FOR 10.10.10.1:1522 - 10.10.10.1:1522
--------------------------------------------------
 
Unhandled exception when processing --reneg:
nassl.SslClient.ClientCertificateRequested - Server requested a client certificate issued by one of the following CAs: '/L=Munich/ST=Bavaria/C=DE/OU=D
BA_Department/O=gpiconsult/CN=gpi_dbaclient', '/L=Munich/ST=Bavaria/C=DE/OU=DBA_Department/O=gpiconsult/CN=gpi_dbserver01'.
 
  * Deflate Compression:
      OK - Compression disabled
 
  * OpenSSL Heartbleed:
      OK - Not vulnerable to Heartbleed
 
  * Certificate - Content:
      SHA1 Fingerprint:                  52f628163195f7089d7c131ce9753cd3b93d7473
      Common Name:                       gpi_dbserver01
      Issuer:                            gpi_dbserver01
      Serial Number:                     00
      Not Before:                        May  2 13:01:00 2015 GMT
      Not After:                         Apr 30 13:01:00 2020 GMT
      Signature Algorithm:               md5WithRSAEncryption
      Key Size:                          1024 bit
      Exponent:                          65537 (0x10001)
 
  * Certificate - Trust:
      Hostname Validation:               FAILED - Certificate does NOT match 10.10.10.1
      "Mozilla NSS - 08/2014" CA Store:  FAILED - Certificate is NOT Trusted: self signed certificate
      "Microsoft - 08/2014" CA Store:    FAILED - Certificate is NOT Trusted: self signed certificate
      "Apple - OS X 10.9.4" CA Store:    FAILED - Certificate is NOT Trusted: self signed certificate
      "Java 6 - Update 65" CA Store:     FAILED - Certificate is NOT Trusted: self signed certificate
      Certificate Chain Received:        ['gpi_dbserver01']
 
 ....
Openssl verwenden

Mit zum Beispiel Cygwin und openssl mit „openssl s_client -connect 10.10.10.1:1522“ die SSL Konfiguration abfragen:

$ openssl s_client -connect 10.10.10.1:1522
CONNECTED(00000003)
depth=0 L = Munich, ST = Bavaria, C = DE, OU = DBA_Department, O = gpiconsult, C                                                                                                                                                                                      N = gpi_dbserver01
verify error:num=18:self signed certificate
verify return:1
depth=0 L = Munich, ST = Bavaria, C = DE, OU = DBA_Department, O = gpiconsult, C                                                                                                                                                                                      N = gpi_dbserver01
verify return:1
2283200:error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate:                                                                                                                                                                                      s3_pkt.c:1293:SSL alert number 42
2283200:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:                                                                                                                                                                                      184:
---
Certificate chain
 0 s:/L=Munich/ST=Bavaria/C=DE/OU=DBA_Department/O=gpiconsult/CN=gpi_dbserver01
   i:/L=Munich/ST=Bavaria/C=DE/OU=DBA_Department/O=gpiconsult/CN=gpi_dbserver01
---
Server certificate
-----BEGIN CERTIFICATE-----
MIICXTCCAcYCAQAwDQYJKoZIhvcNAQEEBQAwdzEPMA0GA1UEBxMGTXVuaWNoMRAw
DgYDVQQIEwdCYXZhcmlhMQswCQYDVQQGEwJERTEXMBUGA1UECwwOREJBX0RlcGFy
dG1lbnQxEzARBgNVBAoTCmdwaWNvbnN1bHQxFzAVBgNVBAMMDmdwaV9kYnNlcnZl
cjAxMB4XDTE1MDUwMjEzMDEwMFoXDTIwMDQzMDEzMDEwMFowdzEPMA0GA1UEBxMG
TXVuaWNoMRAwDgYDVQQIEwdCYXZhcmlhMQswCQYDVQQGEwJERTEXMBUGA1UECwwO
REJBX0RlcGFydG1lbnQxEzARBgNVBAoTCmdwaWNvbnN1bHQxFzAVBgNVBAMMDmdw
aV9kYnNlcnZlcjAxMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCsCUkpb1YY
G+2qOzVk/cPdltuLTHV3SBr8VttfhnikzvkQeqyaYBs6xVfhUGLv3yl48Zr+xzhl
rV30mhbevribOywvbACelhAkr8WaujFhUpYGxd7fXD5CgBjb4C+v2rLjbK7wGZKI
u2icnD9XxtcryENqo5MmlUx3uL5i0WF1vQIDAQABMA0GCSqGSIb3DQEBBAUAA4GB
AE2LlIBd7MK6x/oJQbJwzFSOiAlyqWP04+72IIGa6xEPNsF9iuLSCVMuIJPT0ViJ
6LIx0Bxq9YdA9ezL4KSJaQLrkgUwPWUK8b2XEkZYcL2AfyLFA8GEzgTIYIB7Hrxz
A+0S1NWh5aPmyqdaiJ/fCWDYknMMLyEZ7YPfjcosHi8O
-----END CERTIFICATE-----
subject=/L=Munich/ST=Bavaria/C=DE/OU=DBA_Department/O=gpiconsult/CN=gpi_dbserver                                                                                                                                                                                      01
issuer=/L=Munich/ST=Bavaria/C=DE/OU=DBA_Department/O=gpiconsult/CN=gpi_dbserver0                                                                                                                                                                                      1
---
Acceptable client certificate CA names
/L=Munich/ST=Bavaria/C=DE/OU=DBA_Department/O=gpiconsult/CN=gpi_dbserver01
/L=Munich/ST=Bavaria/C=DE/OU=DBA_Department/O=gpiconsult/CN=gpi_dbaclient
---
SSL handshake has read 952 bytes and written 210 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES256-SHA
    Session-ID:
    Session-ID-ctx:
    Master-Key: 021CDA7443650F220AE391FEAAF3F8016C5EB5B8E22882BDCCCC1BD111D39516                                                                                                                                                                                      16C5CB0C305DB8CD63EBE33CB54AC538
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1431974375
    Timeout   : 300 (sec)
    Verify return code: 18 (self signed certificate)
---

Fehlersuche

Trace einschalten siehe Übersicht SQL*Net Probleme

TNS-12560 TNS: Fehler bei Protokolladapter

Auf den richtigen Wert für das TNS Protokoll achten ⇒ 1.0 TNS 0 = SSL!

Parameter SSL_VERSION in der sqlnet.ora!

ORA-28759: Fehler beim Öffnen von Datei

Wallet nicht gefunden, Wallet Pfad in der sqlnet.ora überprüfen, Leserechte prüfen

ORA-29024: Zertifikatvalidierung nicht erfolgreich

Zertifikat des Listeners auf dem Server ist nicht auf dem Client hinterlegt!

ORA-28864: SSL-Verbindung ordnungsgemäß getrennt

Allte Wallet war noch in der listner.ora konfiguriert, damit passten die Zertifikate nicht. Pfade anpassen und Listener neu starten.

ORA-12541 No Listener

see ⇒ Client Connections Using TCPS Through a Firewall Fail with ORA-12541 (Doc ID 180424.1)

Firewall überprüfen!

ORA-12696: Doppelte Verschl³sselung aktiviert, Anmeldung nicht zulõssig

Parameter für Symetrische Verschlüsselung waren aktiv! siehe ⇒ Das SQL*Net Protokoll mit einer symmetrischen Verschlüsselung wie DES / AES oder RC4 schützen

Die Checksum Parameter können allerdings verwendet werden.

SQL in Trace aber immer noch erkennbar!

Die SSL Option verschlüsselt auf einem tieferen Protokollebene als die symmetrische Verschlüsselung, daher bleiben die SQL Statements bei einem Trace mit Level 16 sichtbar!

Quellen

Dokumentation:

Support:

  • Oracle Support Document 1240824.1 (The Impact of the Sqlnet Settings on Database Security (sqlnet.ora Security Parameters and Wallet Location)
  • How to Enable the Usage of TLS 1.0 (SSL 3.1) in SSL Authentication/Encryption? (Doc ID 1521031.1
  • Configuring SSL for Client Authentication and Encryption With Self Signed Certificates On Both Ends Using orapki (Doc ID 401251.1)
  • How To Configure SSL for Client Authentication And Encryption Using Microsoft Certificate Store (MCS) (Doc ID 2188562.1)

JDBC

  • End To End Examples of using SSL With Oracle's JDBC THIN Driver (Doc ID 762286.1)
  • Minimal Configuration for encryption-only SSL using JDBC/thin (Doc ID 1124286.1)

Dataguard:

  • How To Enable SSL Encryption For Data Guard Redo Transport? (Doc ID 1143443.1)

Mehr dazu auch im Netz:

Über TLS Verschlüsselung:

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
"Autor: Gunther Pipperr"
dba/sql_net_ssl.txt · Zuletzt geändert: 2018/11/19 11:54 von Gunther Pippèrr