Summary: this page describes how to encrypt logins and passwords for the CAST Dashboards/RestAPI:
- when connecting to CAST Storage Service/PostgreSQL (for connections to the Measurement/Dashboard schemas and to the user role/authorization database)
- when configuring LDAP authentication
Introduction
When configuring CAST Dashboard / RestAPI connections to CAST Storage Service/PostgreSQL (i.e. Measurement/Dashboard schemas, or user roles/authorizations database) or to an LDAP server for corporate login mode, logins and passwords are defined in the relevant configuration files in clear text. This therefore represents a potential security risk. If your organization requires these logins and passwords to be encrypted, you can use the following instructions to do so.
Encrypting access to CAST Storage Service/PostgreSQL
- For CAST Dashboards 1.x, encrypted CAST Storage Service/PostgreSQL credentials are only supported for Dashboards deployed on Apache Tomcat 8 or above.
- By default in CAST Dashboards ≥ 2.5, the wizard installer will automatically encrypt the CAST Storage Service/PostgreSQL password.
To encrypt the login and password that are defined when configuring access to the CAST Storage Service/PostgreSQL instance where your Measurement/Dashboard schemas are located and to the CAST Storage Service/PostgreSQL instance where the User role/authorizations database is stored (by default this is called cast_dashboards), browse to the following URL to access the built in login/password key generation page:
WAR file deployment: http://<server>:[<port>]/<dashboard>/static/key.html ZIP/JAR file deployment: http://<server>:[<port>]/static/key.html
Login with a user (whether static list or Active Directory) that has the ADMIN role - by default no users have this role in either static list mode or in Active Directory mode - see User authentication for more information.
When successfully authenticated, you now have a choice of method for encryption:
Both username and password combined (available in all releases)
If you want to encrypt both the username and the password, enter them in section 2. In the example below, we have entered the default credentials for a CAST Storage Service/PostgreSQL instance (operator/CastAIP):
Now click the Encrypt button - CAST will then generate a key that relates to the credentials you entered:
You now need to copy this key to the clipboard or to a text file and then follow the instructions below for your specific dashboard release:
For CAST Dashboards 1.x
For CAST Dashboards 2.x
Either user or password (available in ≥ 2.5)
If you want to encrypt either the username OR the password (or BOTH) enter them in section 3. In the example below, we have entered the default username (operator) for a CAST Storage Service/PostgreSQL instance (but you can alternatively enter the password (CastAIP for example):
Now click the Encrypt button - CAST will then generate a key that relates to the credential you entered:
You now need to copy this key to the clipboard or to a text file. Next open the following file with a text editor:
WAR ≥ 2.5 CATALINA_HOME\webapps\<dashboard>\WEB-INF\classes\application.properties JAR ≥ 2.5 Microsoft Windows: %PROGRAMDATA%\CAST\Dashboards\<dashboard>\application.properties Linux: /root/CAST/Dashboards/<dashboard>/application.properties
Find the following sections of code (one is for the application schema CSS/PostgreSQL host and the other is for the user management schema host) and replace the lines "restapi.datasource[0].username" / "spring.datasource.username" OR "restapi.datasource[0].password" / "spring.datasource.password" with a line containing your generated "key", depending on the item you have encrypted:
## DATASOURCE # Resource1 is the datasource name used in domains.properties # Adapt server name (localhost) and port (2282) if required # You can add multiple datasources if you want to connect to multiple CSS Servers. Datasource name must be unique # You have to configure your domains names and relative schema names in domains.properties restapi.datasource[0].url=jdbc:postgresql://localhost:2282/postgres restapi.datasource[0].username=operator restapi.datasource[0].password=CastAIP restapi.datasource[0].poolname=Resource1 restapi.datasource[0].minimumIdle=10 restapi.datasource[0].maximumPoolSize=20 #datasource configuration for user management spring.datasource.url=jdbc:postgresql://localhost:2282/postgres?ApplicationName=DASHBOARDS¤tSchema=cast_dashboards spring.datasource.platform=postgres spring.datasource.username=operator spring.datasource.password=CastAIP spring.datasource.initialization-mode=always spring.datasource.driver-class-name=org.postgresql.Driver spring.liquibase.change-log=classpath:db/changelog/db.changelog-master.xml spring.liquibase.default-schema=cast_dashboards spring.liquibase.enabled=true
For example, we have encrypted ONLY the operator username and replaced it with the generated encryption key:
## DATASOURCE # Resource1 is the datasource name used in domains.properties # Adapt server name (localhost) and port (2282) if required # You can add multiple datasources if you want to connect to multiple CSS Servers. Datasource name must be unique # You have to configure your domains names and relative schema names in domains.properties restapi.datasource[0].url=jdbc:postgresql://localhost:2282/postgres restapi.datasource[0].username=CRYPTED2:A039A2CEC7EB3490D617DEE94B91A6CC restapi.datasource[0].password=CastAIP restapi.datasource[0].poolname=Resource1 restapi.datasource[0].minimumIdle=10 restapi.datasource[0].maximumPoolSize=20 #datasource configuration for user management spring.datasource.url=jdbc:postgresql://localhost:2282/postgres?ApplicationName=DASHBOARDS¤tSchema=cast_dashboards spring.datasource.platform=postgres spring.datasource.username=CRYPTED2:A039A2CEC7EB3490D617DEE94B91A6CC spring.datasource.password=CastAIP spring.datasource.initialization-mode=always spring.datasource.driver-class-name=org.postgresql.Driver spring.liquibase.change-log=classpath:db/changelog/db.changelog-master.xml spring.liquibase.default-schema=cast_dashboards spring.liquibase.enabled=true
- You can also encrypt the password and replace it with an encrypted key, or both the username AND password and replace both with individual keys.
- Save the file, reload the cache (see Reload the cache) and then reload your CAST Dashboard / RestAPI and ensure you can login and view the data you need to.
Encrypting access to an LDAP server
When configuring access to an LDAP server for authentication, an LDAP service account login and password must be specified in the .properties file in clear text as described in User authentication:
WAR 1.x security.ldap.account.dn=cn=serviceaccount,dc=example,dc=com security.ldap.account.password=password WAR/ZIP/JAR ≥ 2.x security.ldap.manager.dn=CN=serviceaccount,OU=RESOURCES,OU=FR,DC=example,DC=com security.ldap.manager.password=password
To avoid the need to do this, browse to the following URL to access the built in login/password key generation page:
WAR file deployment: http://<server>:[<port>]/<dashboard>/static/key.html ZIP/JAR file deployment: http://<server>:[<port>]/static/key.html
Login with a user (whether Default Authentication or LDAP) that has the ADMIN role - by default no users have this role in either mode - see User authentication for more information:
When successfully authenticated, you now have a choice of method for encryption:
Both service account login and password combined (available in all releases)
If you want to encrypt both the service account login and the password, enter them in section 2. In the example below, we have entered the required LDAP credentials:
Note that the encryption key combines the values assigned to the following lines in the .properties file:
WAR 1.x security.ldap.account.dn=cn=serviceaccount,dc=example,dc=com security.ldap.account.password=password WAR/ZIP/JAR ≥ 2.x security.ldap.manager.dn=CN=serviceaccount,OU=RESOURCES,OU=FR,DC=example,DC=com security.ldap.manager.password=password
Therefore, you must enter in the "username" and "password" fields in the encryption tool, EXACTLY what is entered in the "dn=" and "password=" lines in the .properties file. For example, if the .properties file contains:
WAR 1.x security.ldap.account.dn=CN=myserviceaccount,DC=example,DC=com security.ldap.account.password=mypassword WAR/ZIP/JAR ≥ 2.x security.ldap.manager.dn=CN=myserviceaccount,DC=example,DC=com security.ldap.manager.password=mypassword
...then you need to enter exactly the same in the following fields:
Now click the Encrypt button - CAST will then generate a key that relates to the credentials you entered:
You now need to copy this key to the clipboard or to a text file and then open the following file with a text editor:
WAR 1.x CATALINA_HOME\webapps\<dashboard>\WEB-INF\security.properties WAR ≥ 2.x CATALINA_HOME\webapps\<dashboard>\WEB-INF\classes\application.properties ZIP ≥ 2.x <unpacked_zip>\application.properties JAR ≥ 2.5 Microsoft Windows: %PROGRAMDATA%\CAST\Dashboards\<dashboard>\application.properties Linux: /root/CAST/Dashboards/<dashboard>/application.properties
Locate the following configuration in the file:
WAR 1.x # Parameters for ldap mode # ------------------------ security.ldap.url=ldap://directory.example.com/ security.ldap.account.dn=cn=serviceaccount,dc=example,dc=com security.ldap.account.password=password security.ldap.account.key= security.ldap.usersearch.base=dc=example,dc=com security.ldap.usersearch.filter=(&(objectClass=user)(sAMAccountName={0})) security.ldap.groupsearch.base=dc=example,dc=com security.ldap.groupsearch.filter=(&(objectClass=group)(member={0})) WAR/ ZIP / JAR ≥ 2.x ## SPRING SECURITY LDAP CONFIG # LDAP url, in the form ldap://HOST:PORT security.ldap.url= # The ldap base where users and groups can be found security.ldap.base= # The DN for accessing the LDAP repository. You can encrypt this using the aip encryption tool security.ldap.manager.dn= # The associated password. You can encrypt this using the aip encryption tool security.ldap.manager.password=
Now follow the instructions below for your specific dashboard release.
For CAST Dashboards 1.x
For CAST Dashboards 2.x
Either service account login or password (available in ≥ 2.5)
If you want to encrypt either the username OR the password (or BOTH) enter them in section 3. In the example below, we have entered the service account login:
Now click the Encrypt button - CAST will then generate a key that relates to the credentials you entered:
You now need to copy this key to the clipboard or to a text file. Next open the following file with a text editor:
WAR ≥ 2.5 CATALINA_HOME\webapps\<dashboard>\WEB-INF\classes\application.properties JAR ≥ 2.5 Microsoft Windows: %PROGRAMDATA%\CAST\Dashboards\<dashboard>\application.properties Linux: /root/CAST/Dashboards/<dashboard>/application.properties
Locate the following configuration in the file:
## SPRING SECURITY LDAP CONFIG # LDAP url, in the form ldap://HOST:PORT security.ldap.url= # The ldap base where users and groups can be found security.ldap.base= # The DN for accessing the LDAP repository. You can encrypt this using the aip encryption tool security.ldap.manager.dn= # The associated password. You can encrypt this using the aip encryption tool security.ldap.manager.password=
Enter the encrypted key in place of the service account login or the password (or both if you have encrypted both individually). In the example below, we have replaced the service account login with the encrypted key:
## SPRING SECURITY LDAP CONFIG # LDAP url, in the form ldap://HOST:PORT security.ldap.url= # The ldap base where users and groups can be found security.ldap.base= # The DN for accessing the LDAP repository. You can encrypt this using the aip encryption tool security.ldap.manager.dn=CRYPTED2:6E600F59C2145C3674D18C4CD9D206CD812BB979955A23642747A4BDE1F4DBE24E98D3E82E198C0AA97375692A43F853 # The associated password. You can encrypt this using the aip encryption tool security.ldap.manager.password=
- You can also encrypt the password and replace it with an encrypted key, or both the username AND password and replace both with individual keys.
- Save the file, reload the cache (see Reload the cache) and then reload your CAST Dashboard / RestAPI and ensure you can login and view the data you need to.
What happens if the LDAP credentials change (new password)?
If your LDAP credentials change, for example a new password is generated on the LDAP server, then access to the the CAST Dashboard for any LDAP user will fail. As such the encryption key for the new credentials will need to be regenerated in the key.html page, however, this page requires authentication therefore it will not be accessible in order to generate a new key. This can only be resolved by:
- temporarily restoring access using a login and password in plain text by editing the .properties file.
- accessing the key.html page and encrypting the new login/password into a key.
- re-adding the new encrypted keys by editing the .properties file.