Skip to content

Commit 123d3a9

Browse files
Implement opt-out for PQ TLS
Java CRT 0.39.3 enables and prefers PQ by default, so `TLS_CIPHER_SYSTEM_DEFAULT` now uses PQ cipher suites. The `postQuantumTlsEnabled` builder option in aws-sdk-java-v2 now becomes an opt-out mechanism; setting it to false explicitly disables PQ by using policy `TLS_CIPHER_PREF_TLSv1_0_2023`.
1 parent 03046d5 commit 123d3a9

File tree

2 files changed

+10
-31
lines changed

2 files changed

+10
-31
lines changed

http-clients/aws-crt-client/src/main/java/software/amazon/awssdk/http/crt/internal/AwsCrtConfigurationUtils.java

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,11 @@
2020
import software.amazon.awssdk.annotations.SdkInternalApi;
2121
import software.amazon.awssdk.crt.io.SocketOptions;
2222
import software.amazon.awssdk.crt.io.TlsCipherPreference;
23-
import software.amazon.awssdk.http.crt.AwsCrtAsyncHttpClient;
2423
import software.amazon.awssdk.http.crt.TcpKeepAliveConfiguration;
25-
import software.amazon.awssdk.utils.Logger;
2624
import software.amazon.awssdk.utils.NumericUtils;
2725

2826
@SdkInternalApi
2927
public final class AwsCrtConfigurationUtils {
30-
private static final Logger log = Logger.loggerFor(AwsCrtAsyncHttpClient.class);
3128

3229
private AwsCrtConfigurationUtils() {
3330
}
@@ -55,19 +52,12 @@ public static SocketOptions buildSocketOptions(TcpKeepAliveConfiguration tcpKeep
5552
}
5653

5754
public static TlsCipherPreference resolveCipherPreference(Boolean postQuantumTlsEnabled) {
58-
TlsCipherPreference defaultTls = TlsCipherPreference.TLS_CIPHER_SYSTEM_DEFAULT;
59-
if (postQuantumTlsEnabled == null || !postQuantumTlsEnabled) {
60-
return defaultTls;
55+
// As of of v0.39.3, aws-crt-java prefers PQ by default, so only return the pre-PQ-default policy
56+
// below if the caller explicitly disables PQ by passing in false.
57+
if (Boolean.FALSE.equals(postQuantumTlsEnabled)) {
58+
return TlsCipherPreference.TLS_CIPHER_PREF_TLSv1_0_2023;
6159
}
62-
63-
TlsCipherPreference pqTls = TlsCipherPreference.TLS_CIPHER_PQ_DEFAULT;
64-
if (!pqTls.isSupported()) {
65-
log.warn(() -> "Hybrid post-quantum cipher suites are not supported on this platform. The SDK will use the system "
66-
+ "default cipher suites instead");
67-
return defaultTls;
68-
}
69-
70-
return pqTls;
60+
return TlsCipherPreference.TLS_CIPHER_SYSTEM_DEFAULT;
7161
}
7262

7363
}

http-clients/aws-crt-client/src/test/java/software/amazon/awssdk/http/crt/internal/AwsCrtConfigurationUtilsTest.java

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,41 +16,30 @@
1616
package software.amazon.awssdk.http.crt.internal;
1717

1818
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
19-
import static software.amazon.awssdk.crt.io.TlsCipherPreference.TLS_CIPHER_PQ_DEFAULT;
19+
import static software.amazon.awssdk.crt.io.TlsCipherPreference.TLS_CIPHER_PREF_TLSv1_0_2023;
2020
import static software.amazon.awssdk.crt.io.TlsCipherPreference.TLS_CIPHER_SYSTEM_DEFAULT;
2121

2222
import java.time.Duration;
2323
import java.util.stream.Stream;
24-
import org.junit.jupiter.api.AfterAll;
25-
import org.junit.jupiter.api.Assumptions;
26-
import org.junit.jupiter.api.Test;
2724
import org.junit.jupiter.params.ParameterizedTest;
2825
import org.junit.jupiter.params.provider.Arguments;
2926
import org.junit.jupiter.params.provider.MethodSource;
30-
import software.amazon.awssdk.crt.CrtResource;
3127
import software.amazon.awssdk.crt.io.SocketOptions;
3228
import software.amazon.awssdk.crt.io.TlsCipherPreference;
3329
import software.amazon.awssdk.http.crt.TcpKeepAliveConfiguration;
3430

3531
class AwsCrtConfigurationUtilsTest {
3632
@ParameterizedTest
3733
@MethodSource("cipherPreferences")
38-
void resolveCipherPreference_pqNotSupported_shouldFallbackToSystemDefault(Boolean preferPqTls,
39-
TlsCipherPreference tlsCipherPreference) {
40-
Assumptions.assumeFalse(TLS_CIPHER_PQ_DEFAULT.isSupported());
41-
assertThat(AwsCrtConfigurationUtils.resolveCipherPreference(preferPqTls)).isEqualTo(tlsCipherPreference);
42-
}
43-
44-
@Test
45-
void resolveCipherPreference_pqSupported_shouldHonor() {
46-
Assumptions.assumeTrue(TLS_CIPHER_PQ_DEFAULT.isSupported());
47-
assertThat(AwsCrtConfigurationUtils.resolveCipherPreference(true)).isEqualTo(TLS_CIPHER_PQ_DEFAULT);
34+
void resolveCipherPreference_shouldResolveCorrectly(Boolean postQuantumTlsEnabled,
35+
TlsCipherPreference expectedPreference) {
36+
assertThat(AwsCrtConfigurationUtils.resolveCipherPreference(postQuantumTlsEnabled)).isEqualTo(expectedPreference);
4837
}
4938

5039
private static Stream<Arguments> cipherPreferences() {
5140
return Stream.of(
5241
Arguments.of(null, TLS_CIPHER_SYSTEM_DEFAULT),
53-
Arguments.of(false, TLS_CIPHER_SYSTEM_DEFAULT),
42+
Arguments.of(false, TLS_CIPHER_PREF_TLSv1_0_2023),
5443
Arguments.of(true, TLS_CIPHER_SYSTEM_DEFAULT)
5544
);
5645
}

0 commit comments

Comments
 (0)