{{announcement.body}}
{{announcement.title}}

How to Configure and Use Secure Properties In Mule 4

DZone 's Guide to

How to Configure and Use Secure Properties In Mule 4

Take a look at how to create and configure secure properties in Mule 4.

· Integration Zone ·
Free Resource

Properties in Mule 4 can be encrypted to keep our sensitive data like ClientID and Client Password. Secure property module provided by mulesoftWe can be used to encrypt a .yaml or .properties file. Generally, in properties files, we store information like Client ID, Secret, UserId, UserPassword, Splunk Tokens, Oauth Token, AWS Keys, etc. 

We need to encrypt the data inside any property files to restrict unauthorized access and to protect the data. 

Let’s discuss how to achieve this using MuleSoft's Secure Property.

Creating Secure Properties Is Done in Three Steps

Step 1: Create a configuration properties file.

Step 2: We can encrypt the whole file or encrypt individual property. For individual property, we can define secure properties in the file by enclosing the encrypted values between the sequence![value].

Step 3: Configure the file in the project with the Mule Secure Configuration Properties Extension module dependency. The file must point to or include the decryption key.

Create a Configuration Properties File

The first task in securing configuration properties is to create a YAML configuration file (.yaml) or a Spring-formatted Properties file (.properties), where you define the properties in src/main/resources in your Mule project. The Mule Secure Configuration Properties extension module enables you to configure YAML or Properties file types.

Refer to the below artifacts for more information.

Open Anypoint Studio -> Go to Project Folder -> src/main/resources ->Select Create New file(File extension can be either .yaml or .properties)

 test.yaml

dev.properties


The following test.yaml, dev.properties  files contains non encrypted configuration properties values:

test.yaml (sample yaml file)

http:

  port: "8081"

username: "Priyanka@pp"

password: "1254343654pp"



dev.properties (sample properties file)

encrypted.value1= sfdsgfdgfj1234566

encrypted.value2= xyz123568abc


testPropertyA=testValueA

testPropertyB=testValueB


How to Define Secure Configuration Properties in The File

1. Adding the Premium Security Connector in AnyPoint Studio:

Install new software

Open Anypoint Studio -> Go to Help -> Select Install New Software 

Click the Add button and it will open a window, provide Name as Anypoint Enterprise Security and provide location as http://security-update-site-1.4.s3.amazonaws.com and press ok.

Go to the work drop-down and check Anypoint Enterprise Security — in the dropdown list. 

Select it and select the Premium checkbox -> click Next — accept the policy and finish.

Accept and click next

Now go to the application and right-click on dev.properties and go to -> Open with -> Mule Properties Editor. Now your property file is open in the table editor view.

Mule properties

Double click on any key. It will open a new window. Now press the button Encrypt. In the next window specify the ‘algorithm’ (Algorithm used to encrypt/decrypt the value example- AES, Blowfish) and provide an encryption key(key size must be at least: '16' if it is AES algorithm) to encrypt. Press the OK button.
Encrypt

Keys

Decrypt

Similarly, you can encrypt the rest of the properties and open the file with a text editor.

Text editor

***Note: We can not encrypt the YAML file this way as after the encryption process all the property key alignment will be rearranged. ***

But encryption of YAML file can be achieved using Java encryption JAR

2. Encrypt Properties Using the Secure Properties Tool(jar)

Download Secure-properties-tool.jar and put it into any folder location. Put the unencrypted yaml file in the same location.

dev.properties


Use the following syntax to encrypt or decrypt all the content of a properties file:

Java
 




x
18


 
1
String level-------
2
 
               
3
java -cp secure-properties-tool.jar com.mulesoft.tools.SecurePropertiesTool
4
 
               
5
string <operation><algorithm><mode><key><input property>
6
 
               
7
 
               
8
java -cp secure-properties-tool.jar com.mulesoft.tools.SecurePropertiesTool string encrypt Blowfish CBC 123456789 PriyankaPaul
9
 
               
10
 
               
11
File/file level--------
12
 
               
13
java -cp secure-properties-tool.jar com.mulesoft.tools.SecurePropertiesTool
14
 
               
15
<method><operation><algorithm><mode><key><input file><output file>
16
 
               
17
 
               
18
java -cp secure-properties-tool.jar com.mulesoft.tools.SecurePropertiesTool file encrypt AES CBC 1234567812345678 dev-properties.yaml dev-out.yaml




Example of encryption:

             Encryption

Encryption


The Final Step Is Configuring Secure Property Module and Dependency in The Project

Add the secure property module in your project and configure the same. It can be downloaded from exchange also

Maven dependency:  

Java
 








File: Property file name 

Key: encryption /decryption key. This token will be passed in runtime configuration as program argument example: -Dtoken=1234567812345678

Define the correct Algorithm and mode used for encryption.

Secure properties

Use of Secure Property in The Project

In any global configuration you can use this secure property as ${secure:: property.name}

In dwl we can also use secure property as p(‘secure:: property.name’)

In this below example we used http port as ${secure:: http.port} and decrypted_username_value: p('secure::username') 


Please note, the decryption process will be done implicitly by the Mule Runtime engine and this requires only the Key (passed as VM argument) which was used to encrypt the password and voilà you're done!!!!

 





Thank you for reading.

Topics:
anypoint mulesoft, mule 4, mule api, mule security, mulesoft 4

Published at DZone with permission of Priyanka Paul . See the original article here.

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}