Inhaltsverzeichnis
Sicherheitsfeature in der Oracle NoSQL V3 - Protokoll Verschlüsselung und User Login
Ab der Version 3 der Oracle NoSQL Datenbank sind erste Sicherheitsfeatures integriert.
Die Kommunikation zwischen dem Client und der Datenbank lässt sich mit SSL verschlüsseln, ein User Login kann eingerichtet werden.
Allerdings ist ein echtes Schema Konzept, wie in der Oracle RDBMS noch nicht umgesetzt.
Vorbereitung
Für das Einrichten des Stores muss das Java Werkzeug „keytool“ im Pfad liegen!
Auf allen Knoten bei Bedarf entsprechend verlinken!
#als root ln -s /usr/java/jdk1.8.0_05/bin/keytool /usr/bin/keytool
Netzwerk Verschlüsselung
SSL Verschlüsselung über das Netzwerk kann aktiviert werden.
User Login
In der EE Edition kann eine Oracle Wallet für das Passwort verwendet werden.
Nachträglich eine Security Konfiguration hinzufügen in einer CE Edition
Ablauf:
- Store stoppen
- Basis Security Configuration anlegen
java -Xmx256m -Xms256m -jar $KVHOME/lib/kvstore.jar securityconfig security-> config create -pwdmgr pwdfile -root /opt/oracle/kvdata/NODE01/KVStore Enter a password for the Java KeyStore: Re-enter the KeyStore password for verification: Created files /opt/oracle/kvdata/NODE01/KVStore/security/store.trust /opt/oracle/kvdata/NODE01/KVStore/security/client.trust /opt/oracle/kvdata/NODE01/KVStore/security/security.xml /opt/oracle/kvdata/NODE01/KVStore/security/store.passwd /opt/oracle/kvdata/NODE01/KVStore/security/client.security /opt/oracle/kvdata/NODE01/KVStore/security/store.keys
- Verzeichnis security auf alle KVRROOT's und Knoten verteilen
cd /opt/oracle/kvdata/NODE01/KVStore/ cp -r security /opt/oracle/kvdata/NODE02/KVStore/ cp -r security /opt/oracle/kvdata/NODE03/KVStore/
- Security Information in jeder config.xml auf allen Knoten hinzufügen
security-> config add-security -root /opt/oracle/kvdata/NODE01/KVStore -secdir security -config config.xml Configuration updated. security-> config add-security -root /opt/oracle/kvdata/NODE02/KVStore -secdir security -config config.xml Configuration updated. security-> config add-security -root /opt/oracle/kvdata/NODE03/KVStore -secdir security -config config.xml Configuration updated.
- Store wieder starten
- Am Store as Admin im Security Mode anmelden
java -Xmx256m -Xms256m -jar $KVHOME/lib/kvstore.jar runadmin -port 5100 -host myserver -security $KVROOT/security/client.security Logged in admin as anonymous kv->
- Admin User anlegen
kv-> plan create-user -name root -admin -wait Enter the new password: Re-enter the new password: Executed plan 15, waiting for completion... Plan 15 ended successfully show user -name root user: id=u1 name=root enabled=true type=LOCAL retain-passwd=inactive granted-roles=[public, sysadmin]
- testen mit
java -Xmx256m -Xms256m -jar $KVHOME/lib/kvstore.jar runadmin -port 5100 -host myserver -security $KVROOT/security/client.security -username root
- Pwd File für diesen User anlegen
java -Xmx256m -Xms256m -jar $KVHOME/lib/kvstore.jar securityconfig pwdfile create -file $KVROOT/security/root.pwd java -Xmx256m -Xms256m -jar $KVHOME/lib/kvstore.jar securityconfig pwdfile secret -file $KVROOT/security/root.pwd -set -alias root -secret MyRootPWD
- Security Config anlegen
cd $KVROOT/security # use this as template cp client.security root_user.security #edit the entries vi root_user.security oracle.kv.ssl.trustStore=client.trust oracle.kv.transport=ssl oracle.kv.ssl.protocols=TLSv1.2,TLSv1.1,TLSv1 oracle.kv.ssl.hostnameVerifier=dnmatch(CN\=NoSQL) oracle.kv.auth.pwdfile.file=root.pwd oracle.kv.auth.username=root
- testen
java -Xmx256m -Xms256m -jar $KVHOME/lib/kvstore.jar runadmin -port 5100 -host myserver -security /u00/app/oracle/kvdata/NODE01/KVStore/security/root_user.security
- Datei root.pwd und root_user.security auf alle Knoten verteilen
cd /opt/oracle/kvdata/NODE01/KVStore/security cp root.pwd root_user.security /opt/oracle/kvdata/NODE02/KVStore/security cp root.pwd root_user.security /opt/oracle/kvdata/NODE03/KVStore/security
Nach dem Einrichten des Root Users keine Daten mehr sichtbar!
Per Default erhält der User die Rollen :
kv-> show user -name root user: id=u1 name=root enabled=true type=LOCAL retain-passwd=inactive granted-roles=[public, sysadmin]
Damit kann der User „Root“ zwar den Store verwalten aber keine Daten sehen!
Role je nach Bedarf hinzufügen ( http://docs.oracle.com/cd/NOSQL/html/SecurityGuide/role_management.html#roles ):
plan grant -role readwrite -user root -wait
Nun kann der User root wieder alle Einträge im Store sehen!
Auditieren
In den Logfiles unter $KVSTORE/KVStore/log nach dem Key „KVAuditInfo“ greppen:
cd $KVSTORE/KVStore/log grep KVAuditInfo *
JMX Console verbinden
Der Truststore muss dazu angeben werden:
C:\Program Files (x86)\Java\jdk1.7.0_45\bin\jconsole -J-Djavax.net.ssl.trustStore="D:\\security\\client.trust" myserver:5100
Logging Properies für die Fehlersuche „-J-Djava.util.logging.config.file=d:\log.properties“ verwenden
Wird der Pfad zum Zertifikat nicht hinterleg, erhält man den folgenden aussagekräftigen Fehler:
Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: non-JRMP server at remote endpoint] Cause: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: non-JRMP server at remote endpoint] java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: non-JRMP server at remote endpoint] at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:338) at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:248)
Mit dem Store in Java verbinden
Vorbereitung: Security Verzeichnis auf den Client kopieren
Normale Anmeldung an den Store mit Username/Password und Trust File für die SSL Verschlüsselung:
//Call back Handler für die erneute Authentifizierung public static ReauthenticateHandler reauthHandler; ...... // get the host to connect as first parameter String host = "localhost:5000"; // get the store Name String store = "KVStore"; // get the root user name String username = "username"; // get the user password String userpwd = "MyPWD"; // get the path to the trust file String trustFile = "D:\\security\\client.trust"; ...... try { KVStoreConfig kvconfig = new KVStoreConfig(store, host); /* Set the required security properties */ Properties secProps = new Properties(); secProps.setProperty(KVSecurityConstants.TRANSPORT_PROPERTY, KVSecurityConstants.SSL_TRANSPORT_NAME); secProps.setProperty(KVSecurityConstants.SSL_TRUSTSTORE_FILE_PROPERTY, trustFile); kvconfig.setSecurityProperties(secProps); // Store Zugriff kvstore = KVStoreFactory.getStore(kvconfig, new PasswordCredentials(username, password.toCharArray()), reauthHandler); } catch (AuthenticationFailureException afe) { System.out.println("authentication failed!"); }
Über einen User Trust file mit „System.setProperty(„oracle.kv.security“, trustFile)„:
...... // get the host and port String host = "localhost"; int port=5000; // get the store Name String store = "KVStore"; // get the path to the trust file String trustFile = "D:\\security\\root_user.security"; ...... .... public CountRecords(String host, int port, String store, String trustFile) { #Trust file eines Users einbinden: System.setProperty("oracle.kv.security", trustFile); try { KVStoreConfig kvconfig = new KVStoreConfig(store, host + ":" + port); // Store Zugriff kvstore = KVStoreFactory.getStore(kvconfig); } catch (AuthenticationFailureException afe) { System.out.println("authentication failed!"); } } ...
Security wieder auf NONE setzen
Um die Sicherheitseinstellungen wieder auszuschalten, muss die config.xml pro Knoten angepasst werden und ein Neustart des Stores ist notwendig.
Store zuvor stoppen!
Store Security wieder entfernen:
java -Xmx256m -Xms256m -jar $KVHOME/lib/kvstore.jar securityconfig security->config remove-security -root /opt/oracle/kvdata/NODE01/KVStore security->config remove-security -root /opt/oracle/kvdata/NODE02/KVStore security->config remove-security -root /opt/oracle/kvdata/NODE03/KVStore
Und wieder starten
Zum erneuten Einschalten
Store stoppen.
Wieder erneut einbinden:
java -Xmx256m -Xms256m -jar $KVHOME/lib/kvstore.jar securityconfig config add-security -root /opt/oracle/kvdata/NODE01/KVStore config add-security -root /opt/oracle/kvdata/NODE02/KVStore config add-security -root /opt/oracle/kvdata/NODE03/KVStore
Store erneut wieder starten.