17171818package com .rabbitmq .client .amqp .impl ;
1919
20+ import static com .rabbitmq .client .amqp .impl .Cli .*;
2021import static com .rabbitmq .client .amqp .impl .TestUtils .environmentBuilder ;
22+ import static com .rabbitmq .client .amqp .impl .TlsTestUtils .*;
2123import static java .lang .String .format ;
2224import static java .nio .charset .StandardCharsets .UTF_8 ;
2325import static org .assertj .core .api .Assertions .assertThatThrownBy ;
@@ -45,9 +47,7 @@ void publishWithVerifiedConnectionConsumeWithUnverifiedConnection(TestInfo info)
4547 environment
4648 .connectionBuilder ()
4749 .tls ()
48- .sslContext (
49- TlsTestUtils .sslContext (
50- TlsTestUtils .trustManagerFactory (TlsTestUtils .caCertificate ())))
50+ .sslContext (sslContext (trustManagerFactory (caCertificate ())))
5151 .connection ()
5252 .build ();
5353 Connection consumingConnection =
@@ -106,9 +106,7 @@ void connectionConfigurationShouldOverrideEnvironmentConfiguration() throws Exce
106106 () ->
107107 env .connectionBuilder ()
108108 .tls ()
109- .sslContext (
110- TlsTestUtils .sslContext (
111- TlsTestUtils .trustManagerFactory (TlsTestUtils .clientCertificate ())))
109+ .sslContext (sslContext (trustManagerFactory (TlsTestUtils .clientCertificate ())))
112110 .connection ()
113111 .build ())
114112 .isInstanceOf (AmqpException .AmqpSecurityException .class )
@@ -135,16 +133,14 @@ void trustEverythingSslContext() throws Exception {
135133
136134 @ Test
137135 void verifiedConnectionWithCorrectServerCertificate () throws Exception {
138- SSLContext sslContext =
139- TlsTestUtils .sslContext (TlsTestUtils .trustManagerFactory (TlsTestUtils .caCertificate ()));
136+ SSLContext sslContext = sslContext (trustManagerFactory (caCertificate ()));
140137 try (Connection ignored =
141138 environment .connectionBuilder ().tls ().sslContext (sslContext ).connection ().build ()) {}
142139 }
143140
144141 @ Test
145142 void verifiedConnectionWithWrongServerCertificate () throws Exception {
146- SSLContext sslContext =
147- TlsTestUtils .sslContext (TlsTestUtils .trustManagerFactory (TlsTestUtils .clientCertificate ()));
143+ SSLContext sslContext = sslContext (trustManagerFactory (TlsTestUtils .clientCertificate ()));
148144 assertThatThrownBy (
149145 () -> environment .connectionBuilder ().tls ().sslContext (sslContext ).connection ().build ())
150146 .isInstanceOf (AmqpException .AmqpSecurityException .class )
@@ -156,9 +152,9 @@ void verifiedConnectionWithWrongServerCertificate() throws Exception {
156152 void saslExternalShouldSucceedWithUserForClientCertificate () throws Exception {
157153 X509Certificate clientCertificate = TlsTestUtils .clientCertificate ();
158154 SSLContext sslContext =
159- TlsTestUtils . sslContext (
155+ sslContext (
160156 TlsTestUtils .keyManagerFactory (TlsTestUtils .clientKey (), clientCertificate ),
161- TlsTestUtils . trustManagerFactory (TlsTestUtils . caCertificate ()));
157+ trustManagerFactory (caCertificate ()));
162158 String username = clientCertificate .getSubjectX500Principal ().getName ();
163159 Cli .rabbitmqctlIgnoreError (format ("delete_user %s" , username ));
164160 Cli .rabbitmqctl (format ("add_user %s foo" , username ));
@@ -177,4 +173,63 @@ void saslExternalShouldSucceedWithUserForClientCertificate() throws Exception {
177173 Cli .rabbitmqctl (format ("delete_user %s" , username ));
178174 }
179175 }
176+
177+ @ Test
178+ void hostnameVerificationShouldFailWhenSettingHostToLoopbackInterface () throws Exception {
179+ SSLContext sslContext = sslContext (trustManagerFactory (caCertificate ()));
180+ assertThatThrownBy (
181+ () ->
182+ environment
183+ .connectionBuilder ()
184+ .host ("127.0.0.1" )
185+ .tls ()
186+ .sslContext (sslContext )
187+ .connection ()
188+ .build ())
189+ .isInstanceOf (AmqpException .AmqpSecurityException .class )
190+ .cause ()
191+ .isInstanceOf (SSLHandshakeException .class )
192+ .hasMessageContaining ("subject alternative names" );
193+ }
194+
195+ @ Test
196+ void connectToLoopbackInterfaceShouldWorkIfNoHostnameVerification () throws Exception {
197+ SSLContext sslContext = sslContext (trustManagerFactory (caCertificate ()));
198+ try (Connection ignored =
199+ environment
200+ .connectionBuilder ()
201+ .host ("127.0.01" )
202+ .tls ()
203+ .sslContext (sslContext )
204+ .hostnameVerification (false )
205+ .connection ()
206+ .build ()) {}
207+ }
208+
209+ @ Test
210+ void connectToNonDefaultVirtualHostShouldSucceed () throws Exception {
211+ String vhost = "test_tls" ;
212+ String username = "tls" ;
213+ String password = "tls" ;
214+ try {
215+ addVhost (vhost );
216+ addUser (username , password );
217+ setPermissions (username , vhost , ".*" );
218+
219+ SSLContext sslContext = sslContext (trustManagerFactory (caCertificate ()));
220+ try (Connection ignored =
221+ environment
222+ .connectionBuilder ()
223+ .username (username )
224+ .password (password )
225+ .virtualHost (vhost )
226+ .tls ()
227+ .sslContext (sslContext )
228+ .connection ()
229+ .build ()) {}
230+ } finally {
231+ deleteUser (username );
232+ deleteVhost (vhost );
233+ }
234+ }
180235}
0 commit comments