-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/66504/
-----------------------------------------------------------

(Updated April 9, 2018, 2:55 p.m.)


Review request for ranger, bhavik patel, Gautam Borad, Abhay Kulkarni, Madhan 
Neethiraj, Mehul Parikh, Ramesh Mani, Sailaja Polavarapu, and Velmurugan 
Periasamy.


Changes
-------

Updated Description and Testing done section


Bugs: RANGER-2058
    https://issues.apache.org/jira/browse/RANGER-2058


Repository: ranger


Description (updated)
-------

**Problem Statement:** Ranger can not communicate to ssl enabled Postgres server


**Proposed Solution:**
To connect to a SSL Enabled Postgres Server JDBC connection string could be :
=>For validating CA: 
"jdbc:postgresql://127.0.0.1:3306/ranger?ssl=true&sslmode=verify-ca".
=>For Non validating CA: 
"jdbc:postgresql://127.0.0.1:3306/ranger?ssl=true&org.postgresql.ssl.NonValidatingFactory".

The 'ssl=true' property is added to the JDBC URL to attempt to communicate via 
SSL. 
The 'sslfactory=org.postgresql.ssl.NonValidatingFactory' property is set to 
bypass certificate validation.
The 'sslmode=verify-ca' property is set to connect only if the Postgres server 
trust certificate is available. If user wants to connect using truststore then 
he can configure truststore files(certificate information for the postgres  
server and client both). 
---
Following properties of install.properties file can be used to provide the SSL 
config options, keystore and truststore path to connect to SSL enabled Postgres 
server:

db_ssl_enabled=
db_ssl_required=
db_ssl_verifyServerCertificate=
db_ssl_auth_type=
javax_net_ssl_keyStore=
javax_net_ssl_keyStorePassword=
javax_net_ssl_trustStore=
javax_net_ssl_trustStorePassword=
---
**Rules:**
1. if [db_ssl_enabled=true] then ranger admin/kms JDBC URL will attempt to 
communicate to postgres via SSL.
2. if [db_ssl_enabled=true and [db_ssl_required=false and 
db_ssl_verifyServerCertificate=false]] then JDBC url will have parameter 
'sslfactory=org.postgresql.ssl.NonValidatingFactory' in it and CA validation 
will be skipped.
3. if [db_ssl_enabled=true and [db_ssl_required=true or 
db_ssl_verifyServerCertificate=true]] then JDBC url will have parameter 
'sslmode=verify-ca' in it and CA validation will be mandatory. 
   3.1) if [db_ssl_auth_type=1-way] then User have to provide the certificate 
and password through truststore 
properties(javax_net_ssl_trustStore,javax_net_ssl_trustStorePassword) 
   3.2) if [db_ssl_auth_type=2-way] then User have to provide the keystore and 
password through keystore 
properties(javax_net_ssl_keyStore,javax_net_ssl_keyStorePassword) and CA 
certificate and password through truststore 
properties(javax_net_ssl_trustStore,javax_net_ssl_trustStorePassword).

**Note:**
Ranger application and jisql utility should know from where to pick the 
certificates which can be set in the System properties like this :
-Djavax.net.ssl.keyStore=path_to_keystore_file
-Djavax.net.ssl.keyStorePassword=password
-Djavax.net.ssl.trustStore=path_to_truststore_file
-Djavax.net.ssl.trustStorePassword=password


Diffs
-----

  kms/scripts/db_setup.py a431b60 
  kms/scripts/dba_script.py bcd4aa2 
  kms/src/main/java/org/apache/hadoop/crypto/key/RangerKMSDB.java 12585ca 
  security-admin/scripts/db_setup.py b8664d2 
  security-admin/scripts/dba_script.py 69fff41 
  security-admin/src/main/java/org/apache/ranger/common/PropertiesUtil.java 
edd9d36 


Diff: https://reviews.apache.org/r/66504/diff/1/


Testing (updated)
-------

**Steps Performed(with patch):**
Installed Postgres and enabled SSL with the help of doc : 
https://www.postgresql.org/docs/9.5/static/ssl-tcp.html

Untar ranger-admin from Build having changes of proposed patch.
Provided ranger db root and admin db details in install.properties.
Provided values for below properties of install.properties file.
db_ssl_enabled=true
db_ssl_required=true
db_ssl_verifyServerCertificate=true
db_ssl_auth_type=1-way
javax_net_ssl_keyStore=/root/keystore
javax_net_ssl_keyStorePassword=secret
javax_net_ssl_trustStore=/root/truststore
javax_net_ssl_trustStorePassword=secret

Executed setup.sh script.

Tried to start ranger admin service.

**Expected behaviour :** Ranger admin should start normally and User should 
able to see Dashboard page after login.

**Actual behaviour :** Ranger admin was started and was able to login and see 
Ranger UI.

**Note :** 
Tested Ranger admin and Ranger kms on SSL enabled Postgres with one-way and 
two-way ssl configurations.
Tried below combination of SSL properties also with different ranger db 
combination to install ranger admin and ranger kms.

db_ssl_enabled|db_ssl_required|db_ssl_verifyServerCertificate|db_ssl_auth_type|javax_net_ssl_keyStore
   javax_net_ssl_trustStore
TRUE    TRUE    TRUE    2-way   provided        provided
TRUE    TRUE    TRUE    2-way   provided        not provided
TRUE    TRUE    TRUE    2-way   not provided    provided
TRUE    TRUE    TRUE    2-way   not provided    not provided
TRUE    TRUE    TRUE    1-way   provided        provided
TRUE    TRUE    TRUE    1-way   provided        not provided
TRUE    TRUE    TRUE    1-way   not provided    provided
TRUE    TRUE    TRUE    1-way   not provided    not provided
TRUE    TRUE    FALSE   2-way   provided        provided
TRUE    TRUE    FALSE   2-way   provided        not provided
TRUE    TRUE    FALSE   2-way   not provided    provided
TRUE    TRUE    FALSE   2-way   not provided    not provided
TRUE    TRUE    FALSE   1-way   provided        provided
TRUE    TRUE    FALSE   1-way   provided        not provided
TRUE    TRUE    FALSE   1-way   not provided    provided
TRUE    TRUE    FALSE   1-way   not provided    not provided
TRUE    FALSE   TRUE    2-way   provided        provided
TRUE    FALSE   TRUE    2-way   provided        not provided
TRUE    FALSE   TRUE    2-way   not provided    provided
TRUE    FALSE   TRUE    2-way   not provided    not provided
TRUE    FALSE   TRUE    1-way   provided        provided
TRUE    FALSE   TRUE    1-way   provided        not provided
TRUE    FALSE   TRUE    1-way   not provided    provided
TRUE    FALSE   TRUE    1-way   not provided    not provided
TRUE    FALSE   FALSE   2-way   provided        provided
TRUE    FALSE   FALSE   2-way   provided        not provided
TRUE    FALSE   FALSE   2-way   not provided    provided
TRUE    FALSE   FALSE   2-way   not provided    not provided
TRUE    FALSE   FALSE   1-way   provided        provided
TRUE    FALSE   FALSE   1-way   provided        not provided
TRUE    FALSE   FALSE   1-way   not provided    provided
TRUE    FALSE   FALSE   1-way   not provided    not provided
FALSE   TRUE    TRUE    2-way   provided        provided
FALSE   TRUE    TRUE    2-way   provided        not provided
FALSE   TRUE    TRUE    2-way   not provided    provided
FALSE   TRUE    TRUE    2-way   not provided    not provided
FALSE   TRUE    TRUE    1-way   provided        provided
FALSE   TRUE    TRUE    1-way   provided        not provided
FALSE   TRUE    TRUE    1-way   not provided    provided
FALSE   TRUE    TRUE    1-way   not provided    not provided
FALSE   TRUE    FALSE   2-way   provided        provided
FALSE   TRUE    FALSE   2-way   provided        not provided
FALSE   TRUE    FALSE   2-way   not provided    provided
FALSE   TRUE    FALSE   2-way   not provided    not provided
FALSE   TRUE    FALSE   1-way   provided        provided
FALSE   TRUE    FALSE   1-way   provided        not provided
FALSE   TRUE    FALSE   1-way   not provided    provided
FALSE   TRUE    FALSE   1-way   not provided    not provided
FALSE   FALSE   TRUE    2-way   provided        provided
FALSE   FALSE   TRUE    2-way   provided        not provided
FALSE   FALSE   TRUE    2-way   not provided    provided
FALSE   FALSE   TRUE    2-way   not provided    not provided
FALSE   FALSE   TRUE    1-way   provided        provided
FALSE   FALSE   TRUE    1-way   provided        not provided
FALSE   FALSE   TRUE    1-way   not provided    provided
FALSE   FALSE   TRUE    1-way   not provided    not provided
FALSE   FALSE   FALSE   2-way   provided        provided
FALSE   FALSE   FALSE   2-way   provided        not provided
FALSE   FALSE   FALSE   2-way   not provided    provided
FALSE   FALSE   FALSE   2-way   not provided    not provided
FALSE   FALSE   FALSE   1-way   provided        provided
FALSE   FALSE   FALSE   1-way   provided        not provided
FALSE   FALSE   FALSE   1-way   not provided    provided
FALSE   FALSE   FALSE   1-way   not provided    not provided


Thanks,

Pradeep Agrawal

Reply via email to