Quarkus Security Securing rest api with HTTPS
Quarkus is no doubt one the most super-fast framework for developing the Cloud Native java application.
If you have worked with Spring Boot application than I think you are gonna love Quarkus because of its simplicity, super-fast boot time and extremely low memory usage.
For the beginner, I would highly recommend going through my article
All right now what we are gonna do
- Create a simple REST endpoint application using JAVA, JAX-RS, and Quarks
- Securing the REST endpoint with HTTPS
Enough with the intro but the next questions comes into our mind Why we need to secure our REST endpoint?
Because we want to authorized and secure transactions and HTTPS makes this happen. Speaking of HTTPS, Transport Layer Security (TLS) is the official name for HTTPS.
The primary goal of TLS is to secure, ensure privacy and data integrity between two entities.
In this tutorial, we are going to enable the HTTPS using self-signed certificate.
Let's do some coding!
Create Quarkus application
Maven: You can bootstrap your project with
1mvn io.quarkus:quarkus-maven-plugin:1.3.1.Final:create \
2 -DprojectGroupId=my-groupId \
3 -DprojectArtifactId=my-artifactId \
4 -DprojectVersion=my-version \
5 -DclassName="com.jhooq.JhooqHelloWorld"
Gradle: Head over to Code.Quarkus.io and fill in the following bootstrap configuration
- [table id=quarkus-gradle-bootstrap /]
After that click on the "Generate Your Application"
Download the project zip file and import it inside your favorite IDE e.g Intellij, Eclipse.
"Hello World" - REST Endpoint java class
1import javax.ws.rs.GET;
2import javax.ws.rs.Path;
3import javax.ws.rs.Produces;
4import javax.ws.rs.core.MediaType;
5
6@Path("/hello")
7public class ExampleResource {
8
9 @GET
10 @Produces(MediaType.TEXT_PLAIN)
11 public String customerOrder() {
12 return "hello world ! From Jhooq";
13 }
14
15}
HTTPS: Securing connection with SSL
To secure the connection you need to add the following config key set to application.properties
1quarkus.http.insecure-requests=disabled
2quarkus.http.ssl.certificate.key-store-file=keystore/keystore.jks
3quarkus.http.ssl.certificate.key-store-password=mypassword
How to generate keystore.jks?
Goto command prompt/terminal and execute the following keygen command
1keytool -genkey -keyalg RSA -alias quarkusdemo -keystore keystore.jks -storepass mypassword -validity 365 -keysize 2048
It will generate a keystore.jks file with password - "mypassword".
Now you need to place this file inside - resources/keystore/keystore.jks
Test REST Endpoint using HTTPS
For testing, the REST Endpoint start your Quarkus Application
Maven
1./mvnw compile quarkus:dev
Gradle -
1./gradlew assemble quarkusDev
Test your endpoint in another command prompt/terminal
1>curl -I https://localhost:8443/hello
2HTTP/1.1 200 OK
3Content-Type: application/json