Skip to content

Commit 5a66a9d

Browse files
committed
Add TrustAllCertificates in CRT S3 Client options
1 parent 299cbb0 commit 5a66a9d

File tree

3 files changed

+47
-1
lines changed

3 files changed

+47
-1
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"type": "feature",
3+
"category": "AWS SDK for Java v2",
4+
"contributor": "",
5+
"description": "API to Add TrustAllCertificates in CRT S3 Client options for test purposes"
6+
}

services/s3/src/main/java/software/amazon/awssdk/services/s3/crt/S3CrtHttpConfiguration.java

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,13 @@ public final class S3CrtHttpConfiguration implements ToCopyableBuilder<S3CrtHttp
3838
private final Duration connectionTimeout;
3939
private final S3CrtProxyConfiguration proxyConfiguration;
4040
private final S3CrtConnectionHealthConfiguration healthConfiguration;
41+
private final Boolean shouldTrustAllCertificates;
4142

4243
private S3CrtHttpConfiguration(DefaultBuilder builder) {
4344
this.connectionTimeout = builder.connectionTimeout;
4445
this.proxyConfiguration = builder.proxyConfiguration;
4546
this.healthConfiguration = builder.healthConfiguration;
47+
this.shouldTrustAllCertificates = builder.shouldTrustAllCertificates;
4648
}
4749

4850
/**
@@ -73,6 +75,13 @@ public S3CrtConnectionHealthConfiguration healthConfiguration() {
7375
return healthConfiguration;
7476
}
7577

78+
/**
79+
* Return the configured {@link Builder#shouldTrustAllCertificates}.
80+
*/
81+
public Boolean shouldTrustAllCertificates() {
82+
return shouldTrustAllCertificates;
83+
}
84+
7685
@Override
7786
public boolean equals(Object o) {
7887
if (this == o) {
@@ -90,14 +99,18 @@ public boolean equals(Object o) {
9099
if (!Objects.equals(proxyConfiguration, that.proxyConfiguration)) {
91100
return false;
92101
}
93-
return Objects.equals(healthConfiguration, that.healthConfiguration);
102+
if (!Objects.equals(healthConfiguration, that.healthConfiguration)) {
103+
return false;
104+
}
105+
return Objects.equals(shouldTrustAllCertificates, that.shouldTrustAllCertificates);
94106
}
95107

96108
@Override
97109
public int hashCode() {
98110
int result = connectionTimeout != null ? connectionTimeout.hashCode() : 0;
99111
result = 31 * result + (proxyConfiguration != null ? proxyConfiguration.hashCode() : 0);
100112
result = 31 * result + (healthConfiguration != null ? healthConfiguration.hashCode() : 0);
113+
result = 31 * result + (shouldTrustAllCertificates != null ? shouldTrustAllCertificates.hashCode() : 0);
101114
return result;
102115
}
103116

@@ -115,6 +128,19 @@ public interface Builder extends CopyableBuilder<S3CrtHttpConfiguration.Builder,
115128
*/
116129
Builder connectionTimeout(Duration connectionTimeout);
117130

131+
132+
/**
133+
* <p>
134+
* Option to disable SSL cert validation and SSL host name verification.
135+
* This turns off x.509 validation.
136+
* By default, this option is off.
137+
* Only enable this option for testing purposes.
138+
* </p>
139+
* @param shouldTrustAllCertificates True if SSL cert validation is disabled.
140+
* @return The builder of the method chaining.
141+
*/
142+
Builder shouldTrustAllCertificates(Boolean shouldTrustAllCertificates);
143+
118144
/**
119145
* Sets the http proxy configuration to use for this client.
120146
*
@@ -165,6 +191,7 @@ Builder connectionHealthConfiguration(Consumer<S3CrtConnectionHealthConfiguratio
165191
private static final class DefaultBuilder implements Builder {
166192
private S3CrtConnectionHealthConfiguration healthConfiguration;
167193
private Duration connectionTimeout;
194+
private Boolean shouldTrustAllCertificates;
168195
private S3CrtProxyConfiguration proxyConfiguration;
169196

170197
private DefaultBuilder() {
@@ -174,6 +201,7 @@ private DefaultBuilder(S3CrtHttpConfiguration httpConfiguration) {
174201
this.healthConfiguration = httpConfiguration.healthConfiguration;
175202
this.connectionTimeout = httpConfiguration.connectionTimeout;
176203
this.proxyConfiguration = httpConfiguration.proxyConfiguration;
204+
this.shouldTrustAllCertificates = httpConfiguration.shouldTrustAllCertificates;
177205
}
178206

179207
@Override
@@ -182,6 +210,12 @@ public Builder connectionTimeout(Duration connectionTimeout) {
182210
return this;
183211
}
184212

213+
@Override
214+
public Builder shouldTrustAllCertificates(Boolean shouldTrustAllCertificates) {
215+
this.shouldTrustAllCertificates = shouldTrustAllCertificates;
216+
return this;
217+
}
218+
185219
@Override
186220
public Builder proxyConfiguration(S3CrtProxyConfiguration proxyConfiguration) {
187221
this.proxyConfiguration = proxyConfiguration;

services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/crt/S3NativeClientConfiguration.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,11 @@ public S3NativeClientConfiguration(Builder builder) {
6767
TlsContextOptions clientTlsContextOptions =
6868
TlsContextOptions.createDefaultClient()
6969
.withCipherPreference(TlsCipherPreference.TLS_CIPHER_SYSTEM_DEFAULT);
70+
71+
if (builder.httpConfiguration != null
72+
&& builder.httpConfiguration.shouldTrustAllCertificates() != null) {
73+
clientTlsContextOptions.withVerifyPeer(!builder.httpConfiguration.shouldTrustAllCertificates());
74+
}
7075
this.tlsContext = new TlsContext(clientTlsContextOptions);
7176
this.credentialProviderAdapter =
7277
builder.credentialsProvider == null ?
@@ -175,6 +180,7 @@ public static final class Builder {
175180
private Integer maxConcurrency;
176181
private URI endpointOverride;
177182
private Boolean checksumValidationEnabled;
183+
178184
private S3CrtHttpConfiguration httpConfiguration;
179185
private StandardRetryOptions standardRetryOptions;
180186

0 commit comments

Comments
 (0)