Encrypting passwords provides better security and less vulnerability to security attacks than saving passwords in plain text. It is recommended in a production setup. WSO2 API Manager provides a secure vault implementation that encrypts passwords, stores them in the registry, maps them to aliases and uses the alias instead of the actual passwords in configuration files. At runtime, the API Manager looks up aliases and decrypts the passwords. The secure vault is unable to encrypt the passwords of registry resources at the moment.
...
Shutdown the server if it is already running and open
<APIM_HOME>/repository/conf/security/cipher-tool.properties
file. It contains all the aliases to different server components.Note that the file has several aliases already defined as the alias name and the value where the value is
<file name>//<xpath to the property value to be secured>, <true if the XML element starts with a capital letter>
. Uncomment the entries you want to encrypt.Code Block transports.https.keystorePass=mgt-transports.xml//transports/transport[@name='https']/parameter[@name='keystorePass'],false Carbon.Security.KeyStore.Password=carbon.xml//Server/Security/KeyStore/Password,true Carbon.Security.KeyStore.KeyPassword=carbon.xml//Server/Security/KeyStore/KeyPassword,true Carbon.Security.TrustStore.Password=carbon.xml//Server/Security/TrustStore/Password,true UserManager.AdminUser.Password=user-mgt.xml//UserManager/Realm/Configuration/AdminUser/Password,true Datasources.WSO2_CARBON_DB.Configuration.Password=master-datasources.xml//datasources-configuration/datasources/datasource[name='WSO2_CARBON_DB']/definition[@type='RDBMS']/configuration/password,false #Datasource.WSO2AM_DB.configuration.password=master-datasources.xml//datasources-configuration/datasources/datasource[name='WSO2AM_DB']/definition[@type='RDBMS']/configuration/password,false #Datasource.WSO2AM_STATS_DB.configuration.password=master-datasources.xml//datasources-configuration/datasources/datasource[name='WSO2AM_STATS_DB']/definition[@type='RDBMS']/configuration/password,false #UserStoreManager.Property.ConnectionPassword=user-mgt.xml//UserManager/Realm/UserStoreManager/Property[@name='ConnectionPassword'],true #UserStoreManager.Property.password=user-mgt.xml//UserManager/Realm/UserStoreManager/Property[@name='password'],true #AuthManager.Password=api-manager.xml//APIManager/AuthManager/Password,true ...
Open
<APIM_HOME>/repository/conf/security/cipher-text.properties
file, which maps the default alias to their plain text passwords in square brackets. Uncomment the ones you want.Code Block Carbon.Security.KeyStore.Password=[wso2carbon]
Run the cipher tool available in here.
Usually, you get the cipher tool packed with the product in the<APIM_HOME>/bin
folder, but due to a known issue in the 1.8.0 release, we provide the correct file separately. This script reads the aliases, encrypts their plain-text passwords, and stores them in the secure vault. If you are using the default primary keystore, givewso2carbon
as its password when prompted.Tip Tip: By default, the primary keystore, which is
<APIM_HOME>/repository/resources/security/wso2carbon.jks
is used as the secure vault. If you want to use another keystore or a custom callback class to handle decryption, modify the<APIM_HOME>/repository/conf/security/secret-conf.properties
file as described inWSO2 Carbon Secure Vault in in the WSO2 Carbon documentation.Code Block On Windows: ciphertool.bat -Dconfigure On Linux: sh ciphertool.sh -Dconfigure
Note that the configuration files are automatically updated with the relevant password alias after running the cipher tool. For example, as the
Carbon.Security.KeyStore.Password
property is uncommented in this example, after you run the cipher tool, the plain-text password in<APIM_HOME>/repository/conf/carbon.xml
file will be replaced by the alias as follows.Code Block language xml <KeyStore> ... <!-- Keystore password--> <Password svns:secretAlias="Carbon.Security.KeyStore.Password">password</Password> ... </KeyStore>
Tip Tip: As you encrypted the primary keystore's password in this example, you are prompted to enter the primary keystore password every time you start the server.
...