Skip to content

Commit 39409a8

Browse files
committed
Add mutual tls test
1 parent 02588c4 commit 39409a8

5 files changed

Lines changed: 145 additions & 1 deletion

File tree

src/main/java/io/specto/hoverfly/junit/core/config/LocalHoverflyConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ public HoverflyConfig binaryLocation(String binaryLocation) {
170170
/**
171171
* Set client certificate and key for mutual TLS authentication with target server
172172
* @param clientCertPath certificate file in classpath. Must be a PEM encoded certificate, with .crt or .pem extensions
173-
* @param clientKeyPath key file in classpath. Must be any PEM encoded key, with .key or .pem extensions
173+
* @param clientKeyPath key file in classpath. Must be unencrypted and PEM encoded key, with .key or .pem extensions
174174
* @param destinations the destination filter to what target urls to enable mutual TLS authentication. Enable for all remote hosts if not provided.
175175
* @return the {@link LocalHoverflyConfig} for further customizations
176176
*/
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package io.specto.hoverfly.ruletest;
2+
3+
import static io.specto.hoverfly.junit.core.HoverflyConfig.localConfigs;
4+
import static io.specto.hoverfly.junit.dsl.HoverflyDsl.service;
5+
import static io.specto.hoverfly.junit.dsl.HttpBodyConverter.json;
6+
import static io.specto.hoverfly.junit.dsl.ResponseCreators.success;
7+
import static org.assertj.core.api.Assertions.assertThat;
8+
9+
import io.specto.hoverfly.junit.rule.HoverflyRule;
10+
import org.junit.ClassRule;
11+
import org.junit.Test;
12+
import org.springframework.http.HttpStatus;
13+
import org.springframework.http.ResponseEntity;
14+
import org.springframework.web.client.RestTemplate;
15+
import org.springframework.web.util.UriComponentsBuilder;
16+
17+
public class HoverflyRuleMutualTlsAuthenticationTest {
18+
19+
@ClassRule
20+
public static HoverflyRule hoverflyRule = HoverflyRule.inCaptureOrSimulationMode(
21+
"mutual-tls.json",
22+
localConfigs().clientAuth("ssl/client-auth.pem", "ssl/client-auth.key"));
23+
24+
@Test
25+
public void shouldWorkWithTestServerRequiredClientCertificate() {
26+
27+
// Given
28+
RestTemplate restTemplate = new RestTemplate();
29+
30+
// When
31+
ResponseEntity<Void> response = restTemplate.getForEntity(UriComponentsBuilder.fromHttpUrl("https://client.badssl.com")
32+
.toUriString(), Void.class);
33+
34+
// Then
35+
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
36+
}
37+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
{
2+
"data" : {
3+
"pairs" : [ {
4+
"request" : {
5+
"path" : [ {
6+
"matcher" : "exact",
7+
"value" : "/"
8+
} ],
9+
"method" : [ {
10+
"matcher" : "exact",
11+
"value" : "GET"
12+
} ],
13+
"destination" : [ {
14+
"matcher" : "exact",
15+
"value" : "client.badssl.com"
16+
} ],
17+
"scheme" : [ {
18+
"matcher" : "exact",
19+
"value" : "https"
20+
} ],
21+
"body" : [ {
22+
"matcher" : "exact",
23+
"value" : ""
24+
} ]
25+
},
26+
"response" : {
27+
"status" : 200,
28+
"body" : "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <link rel=\"shortcut icon\" href=\"/icons/favicon-green.ico\"/>\n <link rel=\"apple-touch-icon\" href=\"/icons/icon-green.png\"/>\n <title>client.badssl.com</title>\n <link rel=\"stylesheet\" href=\"/style.css\">\n <style>body { background: green; }</style>\n</head>\n<body>\n<div id=\"content\">\n <h1 style=\"font-size: 12vw;\">\n client.<br>badssl.com\n </h1>\n</div>\n\n<div id=\"footer\">\n This site requires a <a href=\"https://en.wikipedia.org/wiki/Transport_Layer_Security#Client-authenticated_TLS_handshake\">client-authenticated</a> TLS handshake.\n</div>\n\n</body>\n</html>\n",
29+
"encodedBody" : false,
30+
"templated" : false,
31+
"headers" : {
32+
"Cache-Control" : [ "no-store" ],
33+
"Connection" : [ "keep-alive" ],
34+
"Content-Type" : [ "text/html" ],
35+
"Date" : [ "Wed, 03 Jun 2020 23:55:23 GMT" ],
36+
"Etag" : [ "W/\"5e79513a-2af\"" ],
37+
"Hoverfly" : [ "Was-Here" ],
38+
"Last-Modified" : [ "Tue, 24 Mar 2020 00:15:54 GMT" ],
39+
"Server" : [ "nginx/1.10.3 (Ubuntu)" ]
40+
}
41+
}
42+
} ],
43+
"globalActions" : {
44+
"delays" : [ ]
45+
}
46+
},
47+
"meta" : {
48+
"schemaVersion" : "v5",
49+
"hoverflyVersion" : "v1.1.5",
50+
"timeExported" : "2020-06-04T00:55:23+01:00"
51+
}
52+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDHN18R6x5Oz+u6
3+
SOXLoxIscz5GHR6cDcCLgyPax2XfXHdJs+h6fTy61WGM+aXEhR2SIwbj5997s34m
4+
0MsbvkJrFmn0LHK1fuTLCihEEmxGdCGZA9xrwxFYAkEjP7D8v7cAWRMipYF/JP7V
5+
U7xNUo+QSkZ0sOi9k6bNkABKL3+yP6PqAzsBoKIN5lN/YRLrppsDmk6nrRDo4R3C
6+
D+8JQl9quEoOmL22Pc/qpOjL1jgOIFSE5y3gwbzDlfCYoAL5V+by1vu0yJShTTK8
7+
oo5wvphcFfEHaQ9w5jFg2htdq99UER3BKuNDuL+zejqGQZCWb0Xsk8S5WBuX8l3B
8+
rrg5giqNAgMBAAECggEAVRB/t9b9igmeTlzyQpHPIMvUu3uTpm742JmWpcSe61FA
9+
XmhDzInNdLnIfbnb3p44kj4Coy5PbzKlm01sbNxA4BkiBPE1yen1J/2eU/LJ6QuN
10+
jRjo9drFfR75UWPQ3xu9uJhQY2rocLILXmvy69FlG+ebThh8SPbTMtNaTFMb47An
11+
pk2FrW9+rzPswbklOxls/SDt78usRvfAjslm73IdBTOrbceF+GmYs3/SXz1gu05p
12+
LxY2rhC8piBlqnD/QbXBahZbhjb9SkDFn2typMFZKkJIIKDJaOI2E9tIlZ97/0nZ
13+
txqchMty8IuU9YYAfLXCmj2IEfnvLtL7thLfKLuWAQKBgQDyXBpEgKFzfy2a1AI0
14+
+1qL/u5UN14l7S6/wmyDTgVMXwoxhwPRXWD5PutQ8D6tMfC/y4AYt3OXg1blCvLD
15+
XysNj5SK+dpmQR0SyeWjd9zwxJAXvx0McJefCYd86YGcGhJsuX5bkHIeQlEc6df7
16+
yoqr1480VQx/+Fk1i6Zr0EIUFQKBgQDSbalUOfXZh2EVRQEgf3VoPlxAiwGGQcVT
17+
i+pbjMG3pOwmkVyJZusGtN5HN4Oi7n1oiyfMYGsszKQ5j4TDBGS70pNUzhTv3Vn8
18+
0Vsfz0arJRqJxviiv4FfDmsYXwObNKwOjR+LEn1NUPkOYOLdz1lDuWOu11LE90Dy
19+
Q6hg8WwCmQKBgQDTy5lI9AAjpqh7/XpQQrhGT2qHPjuQeU25Vnbt6GjI7OVDkvHL
20+
LQdpyYprGQgs4s+5TGWNNARYC/cMAh1Ujv5Yw3jUWrR5V73IhZeg20bBQYWKuwDv
21+
thVKblFw377cZAxl51R9QCX6O4oW8mRFLiMxORd0bD6YNrf/CyNMZJraYQKBgAE7
22+
o0JbFJWxtV/qh5cpKAb0VpYKOngO6pkSuMzQhlINJVUUhPZJJBdl9+dy69KIkzOJ
23+
nTIVXotkp5GuxZhe7jgrg7F7g6PkKCLTFzWYgVF/ZihoggxyEs/7xaTe6aZ/KILt
24+
UMH/2bwaPVtYNfwWuu8qpurfWBzPVhIVU2c+AuQBAoGAXMbw10vyiznlhyMFw5kx
25+
SzlBMqJBLJkzQBtpvXuT0lqqxTSNC3N4WxgVOLCHa6HqXiB0790YL8/RWunsXTk2
26+
c7ugThP6iMPNVAycWkIF4vvHTwZ9RCSmEQabRaqGGLz/bhLL3fi3lPGCR+iW2Dxq
27+
GTH3fhaM/pZZGdIC75x/69Y=
28+
-----END PRIVATE KEY-----
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIEqDCCApCgAwIBAgIUK5Ns4y2CzosB/ZoFlaxjZqoBTIIwDQYJKoZIhvcNAQEL
3+
BQAwfjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcM
4+
DVNhbiBGcmFuY2lzY28xDzANBgNVBAoMBkJhZFNTTDExMC8GA1UEAwwoQmFkU1NM
5+
IENsaWVudCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0xOTExMjcwMDE5
6+
NTdaFw0yMTExMjYwMDE5NTdaMG8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxp
7+
Zm9ybmlhMRYwFAYDVQQHDA1TYW4gRnJhbmNpc2NvMQ8wDQYDVQQKDAZCYWRTU0wx
8+
IjAgBgNVBAMMGUJhZFNTTCBDbGllbnQgQ2VydGlmaWNhdGUwggEiMA0GCSqGSIb3
9+
DQEBAQUAA4IBDwAwggEKAoIBAQDHN18R6x5Oz+u6SOXLoxIscz5GHR6cDcCLgyPa
10+
x2XfXHdJs+h6fTy61WGM+aXEhR2SIwbj5997s34m0MsbvkJrFmn0LHK1fuTLCihE
11+
EmxGdCGZA9xrwxFYAkEjP7D8v7cAWRMipYF/JP7VU7xNUo+QSkZ0sOi9k6bNkABK
12+
L3+yP6PqAzsBoKIN5lN/YRLrppsDmk6nrRDo4R3CD+8JQl9quEoOmL22Pc/qpOjL
13+
1jgOIFSE5y3gwbzDlfCYoAL5V+by1vu0yJShTTK8oo5wvphcFfEHaQ9w5jFg2htd
14+
q99UER3BKuNDuL+zejqGQZCWb0Xsk8S5WBuX8l3Brrg5giqNAgMBAAGjLTArMAkG
15+
A1UdEwQCMAAwEQYJYIZIAYb4QgEBBAQDAgeAMAsGA1UdDwQEAwIF4DANBgkqhkiG
16+
9w0BAQsFAAOCAgEAZBauLzFSOijkDadcippr9C6laHebb0oRS54xAV70E9k5GxfR
17+
/E2EMuQ8X+miRUMXxKquffcDsSxzo2ac0flw94hDx3B6vJIYvsQx9Lzo95Im0DdT
18+
DkHFXhTlv2kjQwFVnEsWYwyGpHMTjanvNkO7sBP9p1bN1qTE3QAeyMZNKWJk5xPl
19+
U298ERar6tl3Z2Cl8mO6yLhrq4ba6iPGw08SENxzuAJW+n8r0rq7EU+bMg5spgT1
20+
CxExzG8Bb0f98ZXMklpYFogkcuH4OUOFyRodotrotm3iRbuvZNk0Zz7N5n1oLTPl
21+
bGPMwBcqaGXvK62NlaRkwjnbkPM4MYvREM0bbAgZD2GHyANBTso8bdWvhLvmoSjs
22+
FSqJUJp17AZ0x/ELWZd69v2zKW9UdPmw0evyVR19elh/7dmtF6wbewc4N4jxQnTq
23+
IItuhIWKWB9edgJz65uZ9ubQWjXoa+9CuWcV/1KxuKCbLHdZXiboLrKm4S1WmMYW
24+
d0sJm95H9mJzcLyhLF7iX2kK6K9ug1y02YCVXBC9WGZc2x6GMS7lDkXSkJFy3EWh
25+
CmfxkmFGwOgwKt3Jd1pF9ftcSEMhu4WcMgxi9vZr9OdkJLxmk033sVKI/hnkPaHw
26+
g0Y2YBH5v0xmi8sYU7weOcwynkjZARpUltBUQ0pWCF5uJsEB8uE8PPDD3c4=
27+
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)