Skip to content

Commit b41547e

Browse files
baojian123mp911de
authored andcommitted
Replace Lettuce's verifyPeer with verifyMode.
Revert modifying type of VerifyMode for DefaultLettuceClientConfiguration constructor Closes #2899 Original pull request: #2934
1 parent 4ec6141 commit b41547e

7 files changed

+79
-11
lines changed

src/main/java/org/springframework/data/redis/connection/lettuce/DefaultLettuceClientConfiguration.java

+10-3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import io.lettuce.core.ClientOptions;
1919
import io.lettuce.core.ReadFrom;
20+
import io.lettuce.core.SslVerifyMode;
2021
import io.lettuce.core.resource.ClientResources;
2122

2223
import java.time.Duration;
@@ -30,12 +31,13 @@
3031
* @author Mark Paluch
3132
* @author Christoph Strobl
3233
* @author Yanming Zhou
34+
* @author Zhian Chen
3335
* @since 2.0
3436
*/
3537
class DefaultLettuceClientConfiguration implements LettuceClientConfiguration {
3638

3739
private final boolean useSsl;
38-
private final boolean verifyPeer;
40+
private final SslVerifyMode verifyMode;
3941
private final boolean startTls;
4042
private final Optional<ClientResources> clientResources;
4143
private final Optional<ClientOptions> clientOptions;
@@ -52,7 +54,7 @@ class DefaultLettuceClientConfiguration implements LettuceClientConfiguration {
5254
Duration timeout, Duration shutdownTimeout, @Nullable Duration shutdownQuietPeriod) {
5355

5456
this.useSsl = useSsl;
55-
this.verifyPeer = verifyPeer;
57+
this.verifyMode = verifyPeer ? SslVerifyMode.FULL : SslVerifyMode.NONE;
5658
this.startTls = startTls;
5759
this.clientResources = Optional.ofNullable(clientResources);
5860
this.clientOptions = Optional.ofNullable(clientOptions);
@@ -71,7 +73,12 @@ public boolean isUseSsl() {
7173

7274
@Override
7375
public boolean isVerifyPeer() {
74-
return verifyPeer;
76+
return verifyMode != SslVerifyMode.NONE;
77+
}
78+
79+
@Override
80+
public SslVerifyMode getVerifyMode() {
81+
return verifyMode;
7582
}
7683

7784
@Override

src/main/java/org/springframework/data/redis/connection/lettuce/DefaultLettucePoolingClientConfiguration.java

+7
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import io.lettuce.core.ClientOptions;
1919
import io.lettuce.core.ReadFrom;
20+
import io.lettuce.core.SslVerifyMode;
2021
import io.lettuce.core.resource.ClientResources;
2122

2223
import java.time.Duration;
@@ -30,6 +31,7 @@
3031
* @author Mark Paluch
3132
* @author Christoph Strobl
3233
* @author Yanming Zhou
34+
* @author Zhian Chen
3335
* @since 2.0
3436
*/
3537
class DefaultLettucePoolingClientConfiguration implements LettucePoolingClientConfiguration {
@@ -54,6 +56,11 @@ public boolean isVerifyPeer() {
5456
return clientConfiguration.isVerifyPeer();
5557
}
5658

59+
@Override
60+
public SslVerifyMode getVerifyMode() {
61+
return clientConfiguration.getVerifyMode();
62+
}
63+
5764
@Override
5865
public boolean isStartTls() {
5966
return clientConfiguration.isStartTls();

src/main/java/org/springframework/data/redis/connection/lettuce/LettuceClientConfiguration.java

+11-4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import io.lettuce.core.ClientOptions;
1919
import io.lettuce.core.ReadFrom;
2020
import io.lettuce.core.RedisURI;
21+
import io.lettuce.core.SslVerifyMode;
2122
import io.lettuce.core.TimeoutOptions;
2223
import io.lettuce.core.resource.ClientResources;
2324

@@ -50,6 +51,7 @@
5051
* @author Mark Paluch
5152
* @author Christoph Strobl
5253
* @author Yanming Zhou
54+
* @author Zhian Chen
5355
* @since 2.0
5456
* @see org.springframework.data.redis.connection.RedisStandaloneConfiguration
5557
* @see org.springframework.data.redis.connection.RedisSentinelConfiguration
@@ -67,6 +69,11 @@ public interface LettuceClientConfiguration {
6769
*/
6870
boolean isVerifyPeer();
6971

72+
/**
73+
* @return the {@link io.lettuce.core.SslVerifyMode}.
74+
*/
75+
SslVerifyMode getVerifyMode();
76+
7077
/**
7178
* @return {@literal true} to use Start TLS ({@code true} if the first write request shouldn't be encrypted).
7279
*/
@@ -166,7 +173,7 @@ static LettuceClientConfiguration defaultConfiguration() {
166173
class LettuceClientConfigurationBuilder {
167174

168175
boolean useSsl;
169-
boolean verifyPeer = true;
176+
SslVerifyMode verifyMode = SslVerifyMode.FULL;
170177
boolean startTls;
171178
@Nullable ClientResources clientResources;
172179
ClientOptions clientOptions = ClientOptions.builder().timeoutOptions(TimeoutOptions.enabled()).build();
@@ -189,7 +196,7 @@ class LettuceClientConfigurationBuilder {
189196
public LettuceClientConfigurationBuilder apply(RedisURI redisUri) {
190197

191198
this.useSsl = redisUri.isSsl();
192-
this.verifyPeer = redisUri.isVerifyPeer();
199+
this.verifyMode = redisUri.getVerifyMode();
193200
this.startTls = redisUri.isStartTls();
194201

195202
if (!redisUri.getTimeout().equals(RedisURI.DEFAULT_TIMEOUT_DURATION)) {
@@ -347,7 +354,7 @@ public LettuceClientConfigurationBuilder shutdownQuietPeriod(Duration shutdownQu
347354
*/
348355
public LettuceClientConfiguration build() {
349356

350-
return new DefaultLettuceClientConfiguration(useSsl, verifyPeer, startTls, clientResources, clientOptions,
357+
return new DefaultLettuceClientConfiguration(useSsl, verifyMode != SslVerifyMode.NONE, startTls, clientResources, clientOptions,
351358
clientName, readFrom, redisCredentialsProviderFactory, timeout, shutdownTimeout, shutdownQuietPeriod);
352359
}
353360
}
@@ -372,7 +379,7 @@ class LettuceSslClientConfigurationBuilder {
372379
*/
373380
public LettuceSslClientConfigurationBuilder disablePeerVerification() {
374381

375-
delegate.verifyPeer = false;
382+
delegate.verifyMode = SslVerifyMode.NONE;
376383
return this;
377384
}
378385

src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java

+29-4
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import io.lettuce.core.RedisConnectionException;
2525
import io.lettuce.core.RedisCredentialsProvider;
2626
import io.lettuce.core.RedisURI;
27+
import io.lettuce.core.SslVerifyMode;
2728
import io.lettuce.core.api.StatefulConnection;
2829
import io.lettuce.core.api.StatefulRedisConnection;
2930
import io.lettuce.core.cluster.ClusterClientOptions;
@@ -63,6 +64,7 @@
6364
import org.springframework.data.redis.connection.RedisConfiguration.ClusterConfiguration;
6465
import org.springframework.data.redis.connection.RedisConfiguration.WithDatabaseIndex;
6566
import org.springframework.data.redis.connection.RedisConfiguration.WithPassword;
67+
import org.springframework.data.redis.connection.lettuce.LettuceConnection.PipeliningFlushPolicy;
6668
import org.springframework.data.redis.util.RedisAssertions;
6769
import org.springframework.data.util.Optionals;
6870
import org.springframework.lang.Nullable;
@@ -115,6 +117,7 @@
115117
* @author Andrea Como
116118
* @author Chris Bono
117119
* @author John Blum
120+
* @author Zhian Chen
118121
*/
119122
public class LettuceConnectionFactory implements RedisConnectionFactory, ReactiveRedisConnectionFactory,
120123
InitializingBean, DisposableBean, SmartLifecycle {
@@ -490,6 +493,19 @@ public void setVerifyPeer(boolean verifyPeer) {
490493
getMutableConfiguration().setVerifyPeer(verifyPeer);
491494
}
492495

496+
/**
497+
* Returns the mode to verify peers when using SSL.
498+
* <p>
499+
* FULL will enable a full certificate verification.
500+
* CA means Lettuces only verify the certificate and skip verifying th hostname matches. NONE will disable
501+
* verification and {@link #isVerifyPeer() isVerifyPeer} will return false with this mode.
502+
*
503+
* @return the verify mode of {@link io.lettuce.core.SslVerifyMode}.
504+
*/
505+
public SslVerifyMode getVerifyMode() {
506+
return getMutableConfiguration().getVerifyMode();
507+
}
508+
493509
/**
494510
* Returns whether to issue a StartTLS.
495511
*
@@ -1360,7 +1376,7 @@ private RedisURI getSentinelRedisURI() {
13601376
this.clientConfiguration.getClientName().ifPresent(it::setClientName);
13611377

13621378
it.setSsl(this.clientConfiguration.isUseSsl());
1363-
it.setVerifyPeer(this.clientConfiguration.isVerifyPeer());
1379+
it.setVerifyPeer(this.clientConfiguration.getVerifyMode());
13641380
it.setStartTls(this.clientConfiguration.isStartTls());
13651381
it.setTimeout(this.clientConfiguration.getCommandTimeout());
13661382
});
@@ -1659,7 +1675,7 @@ void resetConnection() {
16591675
static class MutableLettuceClientConfiguration implements LettuceClientConfiguration {
16601676

16611677
private boolean useSsl;
1662-
private boolean verifyPeer = true;
1678+
private SslVerifyMode verifyMode = SslVerifyMode.FULL;
16631679
private boolean startTls;
16641680

16651681
private @Nullable ClientResources clientResources;
@@ -1680,11 +1696,20 @@ void setUseSsl(boolean useSsl) {
16801696

16811697
@Override
16821698
public boolean isVerifyPeer() {
1683-
return verifyPeer;
1699+
return verifyMode != SslVerifyMode.NONE;
1700+
}
1701+
1702+
@Override
1703+
public SslVerifyMode getVerifyMode() {
1704+
return verifyMode;
16841705
}
16851706

16861707
void setVerifyPeer(boolean verifyPeer) {
1687-
this.verifyPeer = verifyPeer;
1708+
this.verifyMode = verifyPeer? SslVerifyMode.FULL: SslVerifyMode.NONE;
1709+
}
1710+
1711+
void setVerifyPeer(SslVerifyMode verifyMode) {
1712+
this.verifyMode = verifyMode;
16881713
}
16891714

16901715
@Override

src/test/java/org/springframework/data/redis/connection/lettuce/LettuceClientConfigurationUnitTests.java

+5
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import io.lettuce.core.ClientOptions;
2121
import io.lettuce.core.RedisURI;
22+
import io.lettuce.core.SslVerifyMode;
2223
import io.lettuce.core.TimeoutOptions;
2324
import io.lettuce.core.resource.ClientResources;
2425

@@ -34,6 +35,7 @@
3435
* @author Mark Paluch
3536
* @author Christoph Strobl
3637
* @author Yanming Zhou
38+
* @author Zhian Chen
3739
*/
3840
class LettuceClientConfigurationUnitTests {
3941

@@ -45,6 +47,7 @@ void shouldCreateEmptyConfiguration() {
4547

4648
assertThat(configuration.isUseSsl()).isFalse();
4749
assertThat(configuration.isVerifyPeer()).isTrue();
50+
assertThat(configuration.getVerifyMode().equals(SslVerifyMode.FULL));
4851
assertThat(configuration.isStartTls()).isFalse();
4952
assertThat(configuration.getClientOptions()).hasValueSatisfying(actual -> {
5053

@@ -78,6 +81,7 @@ void shouldConfigureAllProperties() {
7881

7982
assertThat(configuration.isUseSsl()).isTrue();
8083
assertThat(configuration.isVerifyPeer()).isFalse();
84+
assertThat(configuration.getVerifyMode().equals(SslVerifyMode.NONE));
8185
assertThat(configuration.isStartTls()).isTrue();
8286
assertThat(configuration.getClientOptions()).contains(clientOptions);
8387
assertThat(configuration.getClientResources()).contains(sharedClientResources);
@@ -115,6 +119,7 @@ void shouldApplySettingsFromRedisURI() {
115119

116120
assertThat(configuration.isUseSsl()).isTrue();
117121
assertThat(configuration.isVerifyPeer()).isTrue();
122+
assertThat(configuration.getVerifyMode().equals(SslVerifyMode.FULL));
118123
assertThat(configuration.isStartTls()).isFalse();
119124
assertThat(configuration.getClientName()).contains("bar");
120125
assertThat(configuration.getCommandTimeout()).isEqualTo(Duration.ofSeconds(10));

src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java

+13
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import io.lettuce.core.ClientOptions;
2727
import io.lettuce.core.RedisClient;
2828
import io.lettuce.core.RedisURI;
29+
import io.lettuce.core.SslVerifyMode;
2930
import io.lettuce.core.api.StatefulConnection;
3031
import io.lettuce.core.api.StatefulRedisConnection;
3132
import io.lettuce.core.cluster.ClusterClientOptions;
@@ -76,6 +77,7 @@
7677
* @author Andrea Como
7778
* @author Chris Bono
7879
* @author John Blum
80+
* @author Zhian Chen
7981
*/
8082
class LettuceConnectionFactoryUnitTests {
8183

@@ -374,7 +376,9 @@ void sslOptionsShouldBeDisabledByDefaultOnClient() {
374376
assertThat(redisUri.isStartTls()).isFalse();
375377
assertThat(connectionFactory.isStartTls()).isFalse();
376378
assertThat(redisUri.isVerifyPeer()).isTrue();
379+
assertThat(redisUri.getVerifyMode().equals(SslVerifyMode.FULL));
377380
assertThat(connectionFactory.isVerifyPeer()).isTrue();
381+
assertThat(connectionFactory.getVerifyMode().equals(SslVerifyMode.FULL));
378382
}
379383

380384
@Test // DATAREDIS-476
@@ -393,7 +397,9 @@ void sslShouldBeSetCorrectlyOnClient() {
393397
assertThat(redisUri.isSsl()).isTrue();
394398
assertThat(connectionFactory.isUseSsl()).isTrue();
395399
assertThat(redisUri.isVerifyPeer()).isTrue();
400+
assertThat(redisUri.getVerifyMode().equals(SslVerifyMode.FULL));
396401
assertThat(connectionFactory.isVerifyPeer()).isTrue();
402+
assertThat(connectionFactory.getVerifyMode().equals(SslVerifyMode.FULL));
397403
}
398404

399405
@Test // DATAREDIS-480
@@ -411,7 +417,9 @@ void verifyPeerOptionShouldBeSetCorrectlyOnClient() {
411417
RedisURI redisUri = (RedisURI) getField(client, "redisURI");
412418

413419
assertThat(redisUri.isVerifyPeer()).isFalse();
420+
assertThat(redisUri.getVerifyMode().equals(SslVerifyMode.NONE));
414421
assertThat(connectionFactory.isVerifyPeer()).isFalse();
422+
assertThat(connectionFactory.getVerifyMode().equals(SslVerifyMode.NONE));
415423
}
416424

417425
@Test // DATAREDIS-480
@@ -450,7 +458,9 @@ void sslShouldBeSetCorrectlyOnSentinelClient() {
450458
assertThat(redisUri.isSsl()).isTrue();
451459
assertThat(connectionFactory.isUseSsl()).isTrue();
452460
assertThat(redisUri.isVerifyPeer()).isTrue();
461+
assertThat(redisUri.getVerifyMode().equals(SslVerifyMode.FULL));
453462
assertThat(connectionFactory.isVerifyPeer()).isTrue();
463+
assertThat(connectionFactory.getVerifyMode().equals(SslVerifyMode.FULL));
454464
}
455465

456466
@Test // DATAREDIS-990
@@ -470,6 +480,7 @@ void verifyPeerOptionShouldBeSetCorrectlyOnSentinelClient() {
470480

471481
assertThat(redisUri.isVerifyPeer()).isFalse();
472482
assertThat(connectionFactory.isVerifyPeer()).isFalse();
483+
assertThat(connectionFactory.getVerifyMode().equals(SslVerifyMode.NONE));
473484
}
474485

475486
@Test // DATAREDIS-990
@@ -545,6 +556,7 @@ void verifyPeerTLSOptionShouldBeSetCorrectlyOnClusterClient() {
545556

546557
for (RedisURI uri : initialUris) {
547558
assertThat(uri.isVerifyPeer()).isTrue();
559+
assertThat(uri.getVerifyMode().equals(SslVerifyMode.FULL));
548560
}
549561
}
550562

@@ -745,6 +757,7 @@ void shouldApplyClientConfiguration() {
745757

746758
assertThat(connectionFactory.isUseSsl()).isTrue();
747759
assertThat(connectionFactory.isVerifyPeer()).isFalse();
760+
assertThat(connectionFactory.getVerifyMode().equals(SslVerifyMode.NONE));
748761
assertThat(connectionFactory.isStartTls()).isTrue();
749762
assertThat(connectionFactory.getClientResources()).isEqualTo(sharedClientResources);
750763
assertThat(connectionFactory.getTimeout()).isEqualTo(Duration.ofMinutes(5).toMillis());

src/test/java/org/springframework/data/redis/connection/lettuce/LettucePoolingClientConfigurationUnitTests.java

+4
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import io.lettuce.core.ClientOptions;
2121
import io.lettuce.core.ReadFrom;
22+
import io.lettuce.core.SslVerifyMode;
2223
import io.lettuce.core.TimeoutOptions;
2324
import io.lettuce.core.resource.ClientResources;
2425

@@ -35,6 +36,7 @@
3536
* @author Mark Paluch
3637
* @author Christoph Strobl
3738
* @author Longlong Zhao
39+
* @author Zhian Chen
3840
*/
3941
class LettucePoolingClientConfigurationUnitTests {
4042

@@ -46,6 +48,7 @@ void shouldCreateEmptyConfiguration() {
4648
assertThat(configuration.getPoolConfig()).isNotNull();
4749
assertThat(configuration.isUseSsl()).isFalse();
4850
assertThat(configuration.isVerifyPeer()).isTrue();
51+
assertThat(configuration.getVerifyMode().equals(SslVerifyMode.FULL));
4952
assertThat(configuration.isStartTls()).isFalse();
5053
assertThat(configuration.getClientOptions()).hasValueSatisfying(actual -> {
5154

@@ -80,6 +83,7 @@ void shouldConfigureAllProperties() {
8083
assertThat(configuration.getPoolConfig()).isEqualTo(poolConfig);
8184
assertThat(configuration.isUseSsl()).isTrue();
8285
assertThat(configuration.isVerifyPeer()).isFalse();
86+
assertThat(configuration.getVerifyMode().equals(SslVerifyMode.NONE));
8387
assertThat(configuration.isStartTls()).isTrue();
8488
assertThat(configuration.getClientOptions()).contains(clientOptions);
8589
assertThat(configuration.getClientResources()).contains(sharedClientResources);

0 commit comments

Comments
 (0)