diff --git a/integration-tests/rest-client/generate-trust-store-for-self-signed.sh b/integration-tests/rest-client/generate-trust-store-for-self-signed.sh new file mode 100755 index 00000000000000..a15a1994a39023 --- /dev/null +++ b/integration-tests/rest-client/generate-trust-store-for-self-signed.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +########################################################################################################################################## +# Script that generates the trustStore containing the self signed certificate used in 'io.quarkus.it.rest.client.selfsigned.ExternalSelfSignedResource' # +########################################################################################################################################## + + +echo -n | openssl s_client -connect self-signed.badssl.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > self-signed.cert +keytool -importcert -file self-signed.cert -alias self-signed -keystore self-signed -storepass changeit -noprompt +rm self-signed.cert diff --git a/integration-tests/rest-client/pom.xml b/integration-tests/rest-client/pom.xml index bf77e6b144705e..b271a14d68b0ee 100644 --- a/integration-tests/rest-client/pom.xml +++ b/integration-tests/rest-client/pom.xml @@ -70,6 +70,8 @@ en + ${project.basedir}/self-signed + changeit @@ -119,9 +121,11 @@ false true true + true false false ${graalvmHome} + -J-Djavax.net.ssl.trustStore=${project.basedir}/self-signed, -J-Djavax.net.ssl.trustStorePassword=changeit @@ -131,4 +135,4 @@ - \ No newline at end of file + diff --git a/integration-tests/rest-client/self-signed b/integration-tests/rest-client/self-signed new file mode 100644 index 00000000000000..52feac47daf37d Binary files /dev/null and b/integration-tests/rest-client/self-signed differ diff --git a/integration-tests/rest-client/src/main/java/io/quarkus/it/rest/client/selfsigned/ExternalSelfSignedResource.java b/integration-tests/rest-client/src/main/java/io/quarkus/it/rest/client/selfsigned/ExternalSelfSignedResource.java new file mode 100644 index 00000000000000..f62a6f7d674625 --- /dev/null +++ b/integration-tests/rest-client/src/main/java/io/quarkus/it/rest/client/selfsigned/ExternalSelfSignedResource.java @@ -0,0 +1,45 @@ +package io.quarkus.it.rest.client.selfsigned; + +import java.io.IOException; +import java.net.URL; + +import javax.net.ssl.HttpsURLConnection; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +/** + * This has nothing to do with rest-client, but we add it here in order to avoid creating + * a new integration test that would slow down our CI + */ +@Path("/self-signed") +public class ExternalSelfSignedResource { + + @GET + @Produces(MediaType.TEXT_PLAIN) + public String perform() throws IOException { + try { + return doGetCipher(); + } catch (IOException e) { + + // if it fails it might be because the remote service is down, so sleep and try again + try { + Thread.sleep(1000); + } catch (InterruptedException ignored) { + + } + + return doGetCipher(); + } + } + + private String doGetCipher() throws IOException { + // this URL provides an always on example of an HTTPS URL utilizing self-signed certificate + URL url = new URL("https://self-signed.badssl.com/"); + HttpsURLConnection con = (HttpsURLConnection) url.openConnection(); + con.setRequestMethod("GET"); + con.getResponseCode(); + return con.getCipherSuite(); + } +} diff --git a/integration-tests/rest-client/src/test/java/io/quarkus/it/rest/client/selfsigned/ExternalSelfSignedITCase.java b/integration-tests/rest-client/src/test/java/io/quarkus/it/rest/client/selfsigned/ExternalSelfSignedITCase.java new file mode 100644 index 00000000000000..d7d20bcc28bc91 --- /dev/null +++ b/integration-tests/rest-client/src/test/java/io/quarkus/it/rest/client/selfsigned/ExternalSelfSignedITCase.java @@ -0,0 +1,8 @@ +package io.quarkus.it.rest.client.selfsigned; + +import io.quarkus.test.junit.NativeImageTest; + +@NativeImageTest +public class ExternalSelfSignedITCase extends ExternalSelfSignedTestCase { + +} diff --git a/integration-tests/rest-client/src/test/java/io/quarkus/it/rest/client/selfsigned/ExternalSelfSignedTestCase.java b/integration-tests/rest-client/src/test/java/io/quarkus/it/rest/client/selfsigned/ExternalSelfSignedTestCase.java new file mode 100644 index 00000000000000..7b2530e7d93bbc --- /dev/null +++ b/integration-tests/rest-client/src/test/java/io/quarkus/it/rest/client/selfsigned/ExternalSelfSignedTestCase.java @@ -0,0 +1,23 @@ +package io.quarkus.it.rest.client.selfsigned; + +import static org.hamcrest.Matchers.empty; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.not; + +import org.junit.jupiter.api.Test; + +import io.quarkus.test.junit.QuarkusTest; +import io.restassured.RestAssured; + +@QuarkusTest +public class ExternalSelfSignedTestCase { + + @Test + public void included() { + RestAssured.when() + .get("/self-signed") + .then() + .statusCode(200) + .body(is(not(empty()))); + } +}