Benutzer-Werkzeuge

Webseiten-Werkzeuge


nosql:security_oracle_nosql_db_v3

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
nosql:security_oracle_nosql_db_v3 [2015/03/04 11:26]
gpipperr [JMX Console verbinden]
nosql:security_oracle_nosql_db_v3 [2015/03/04 14:49] (aktuell)
gpipperr
Zeile 1: Zeile 1:
 +=====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!
 +<code bash>
 +#als root
 +ln -s /usr/java/jdk1.8.0_05/bin/keytool /usr/bin/keytool
 +</code>
 +==== 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 <code bash>
 +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
 +
 +</code>
 +  * Verzeichnis security auf alle KVRROOT's und Knoten verteilen <code bash>
 +cd /opt/oracle/kvdata/NODE01/KVStore/
 +
 +cp -r security /opt/oracle/kvdata/NODE02/KVStore/
 +cp -r security /opt/oracle/kvdata/NODE03/KVStore/
 +
 +</code>
 +  * Security Information in jeder config.xml auf allen Knoten hinzufügen<code bash>
 +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.
 +</code>  
 +  * Store wieder starten
 +  * Am Store as Admin im Security Mode anmelden <code bash>
 +java -Xmx256m -Xms256m -jar $KVHOME/lib/kvstore.jar runadmin -port 5100 -host myserver -security $KVROOT/security/client.security
 +
 +Logged in admin as anonymous
 +
 +kv->
 +</code>
 +  * Admin User anlegen <code bash>
 +
 +
 +
 +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]
 +
 +
 +</code>
 +  * testen mit <code bash>
 +java -Xmx256m -Xms256m -jar $KVHOME/lib/kvstore.jar runadmin -port 5100 -host myserver -security $KVROOT/security/client.security -username root
 +</code>
 +  * Pwd File für diesen User anlegen<code bash>
 +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
 +</code>
 +  * Security Config anlegen <code bash>
 +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
 +
 +</code>
 +  * testen <code bash>
 +java -Xmx256m -Xms256m -jar $KVHOME/lib/kvstore.jar runadmin -port 5100 -host myserver -security /u00/app/oracle/kvdata/NODE01/KVStore/security/root_user.security
 +</code>
 +  * Datei root.pwd und root_user.security auf alle Knoten verteilen<code bash>
 +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 
 +</code>
 +
 +=== Nach dem Einrichten des Root Users keine Daten mehr sichtbar!===
 +
 +Per Default erhält der User die Rollen :
 +<code bash>
 +kv-> show user -name root
 +user: id=u1 name=root enabled=true type=LOCAL retain-passwd=inactive granted-roles=[public, sysadmin]
 +</code>
 +
 +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 ):
 +<code bash>
 +plan grant -role readwrite -user root -wait 
 +
 +</code> 
 +
 +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:
 +<code bash>
 +
 +cd $KVSTORE/KVStore/log
 +
 +grep KVAuditInfo  *
 +
 +</code>
 +
 +==== JMX Console verbinden ====
 +
 +Der Truststore muss dazu angeben werden:
 +
 +<code cmd>
 +
 +C:\Program Files (x86)\Java\jdk1.7.0_45\bin\jconsole -J-Djavax.net.ssl.trustStore="D:\\security\\client.trust"  myserver:5100
 +
 +</code>
 +
 +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:
 +<code java>
 + 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)
 +</code>
 +==== 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:
 +
 +<code java>
 +
 +//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!");
 +}      
 +
 +</code> 
 +
 +
 +Über einen User Trust file mit **"System.setProperty("oracle.kv.security", trustFile)"**:
 +<code java>
 +......
 +
 +// 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!");
 +        }
 +    }
 +...    
 +
 +</code>
 +==== 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:
 +<code bash>
 +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
 +
 +
 +</code>
 +
 +Und wieder starten
 +
 +
 +===Zum erneuten Einschalten===
 +
 +Store stoppen.
 +
 +Wieder erneut einbinden:
 +<code bash>
 +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
 +
 +</code>
 +
 +Store erneut wieder starten.
 +
 +===== Quellen =====
 +
 +
 +  * http://docs.oracle.com/cd/NOSQL/html/SecurityGuide/index.html
  
"Autor: Gunther Pipperr"
nosql/security_oracle_nosql_db_v3.txt · Zuletzt geändert: 2015/03/04 14:49 von gpipperr