Skip to content

Commit b9655d3

Browse files
authored
Restrict cipher suites based on tested version (#248)
1 parent ce602cb commit b9655d3

File tree

1 file changed

+20
-32
lines changed

1 file changed

+20
-32
lines changed

TLS-Server-Scanner/src/main/java/de/rub/nds/tlsscanner/serverscanner/probe/CipherSuiteProbe.java

Lines changed: 20 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@
2626
import de.rub.nds.tlsscanner.serverscanner.probe.result.CipherSuiteResult;
2727
import de.rub.nds.tlsscanner.serverscanner.report.ServerReport;
2828
import de.rub.nds.tlsscanner.serverscanner.selector.ConfigSelector;
29-
import java.util.ArrayList;
3029
import java.util.Arrays;
3130
import java.util.LinkedList;
3231
import java.util.List;
32+
import java.util.stream.Collectors;
3333

3434
public class CipherSuiteProbe extends TlsServerProbe<ConfigSelector, ServerReport, CipherSuiteResult> {
3535

@@ -46,21 +46,12 @@ public CipherSuiteResult executeTest() {
4646
for (ProtocolVersion version : protocolVersions) {
4747
LOGGER.debug("Testing:" + version.name());
4848
if (version.isTLS13()) {
49-
pairLists.add(new VersionSuiteListPair(version, getSupportedCipherSuites()));
49+
pairLists.add(new VersionSuiteListPair(version, getSupportedTls13CipherSuites()));
5050
} else {
51-
List<CipherSuite> toTestList = new LinkedList<>();
52-
List<CipherSuite> versionSupportedSuites = new LinkedList<>();
53-
if (version == ProtocolVersion.SSL3) {
54-
toTestList.addAll(CipherSuite.SSL3_SUPPORTED_CIPHERSUITES);
55-
versionSupportedSuites = getSupportedCipherSuitesWithIntolerance(toTestList, version);
56-
} else {
57-
toTestList.addAll(Arrays.asList(CipherSuite.values()));
58-
toTestList.remove(CipherSuite.TLS_FALLBACK_SCSV);
59-
toTestList.remove(CipherSuite.TLS_EMPTY_RENEGOTIATION_INFO_SCSV);
60-
versionSupportedSuites = getSupportedCipherSuitesWithIntolerance(toTestList, version);
61-
if (versionSupportedSuites.isEmpty()) {
62-
versionSupportedSuites = getSupportedCipherSuitesWithIntolerance(version);
63-
}
51+
List<CipherSuite> toTestList = new LinkedList<>(Arrays.asList(CipherSuite.values()));
52+
List<CipherSuite> versionSupportedSuites = getSupportedCipherSuites(toTestList, version);
53+
if (versionSupportedSuites.isEmpty()) {
54+
versionSupportedSuites = getSupportedCipherSuites(CipherSuite.getImplemented(), version);
6455
}
6556
if (versionSupportedSuites.size() > 0) {
6657
pairLists.add(new VersionSuiteListPair(version, versionSupportedSuites));
@@ -70,18 +61,20 @@ public CipherSuiteResult executeTest() {
7061
return new CipherSuiteResult(pairLists);
7162
}
7263

73-
private List<CipherSuite> getSupportedCipherSuites() {
64+
private List<CipherSuite> getCipherSuitesForVersion(List<CipherSuite> baseList, ProtocolVersion version) {
65+
List<CipherSuite> applicableCipherSuites = baseList.stream()
66+
.filter(cipherSuite -> cipherSuite.isSupportedInProtocol(version)).collect(Collectors.toList());
67+
applicableCipherSuites.remove(CipherSuite.TLS_FALLBACK_SCSV);
68+
applicableCipherSuites.remove(CipherSuite.TLS_EMPTY_RENEGOTIATION_INFO_SCSV);
69+
return applicableCipherSuites;
70+
}
71+
72+
private List<CipherSuite> getSupportedTls13CipherSuites() {
7473
CipherSuite selectedSuite = null;
75-
List<CipherSuite> toTestList = new LinkedList<>();
74+
List<CipherSuite> toTestList = CipherSuite.getTls13CipherSuites();
7675
List<CipherSuite> supportedSuits = new LinkedList<>();
77-
for (CipherSuite suite : CipherSuite.values()) {
78-
if (suite.isTLS13()) {
79-
toTestList.add(suite);
80-
}
81-
}
8276
do {
83-
selectedSuite = getSelectedCipherSuite(toTestList);
84-
77+
selectedSuite = getSelectedTls13CipherSuite(toTestList);
8578
if (selectedSuite != null) {
8679
if (!toTestList.contains(selectedSuite)) {
8780
LOGGER.warn("Server chose a CipherSuite we did not propose!");
@@ -95,7 +88,7 @@ private List<CipherSuite> getSupportedCipherSuites() {
9588
return supportedSuits;
9689
}
9790

98-
private CipherSuite getSelectedCipherSuite(List<CipherSuite> toTestList) {
91+
private CipherSuite getSelectedTls13CipherSuite(List<CipherSuite> toTestList) {
9992
Config tlsConfig = configSelector.getTls13BaseConfig();
10093
tlsConfig.setWorkflowTraceType(WorkflowTraceType.DYNAMIC_HELLO);
10194
tlsConfig.setDefaultClientSupportedCipherSuites(toTestList);
@@ -114,13 +107,8 @@ private CipherSuite getSelectedCipherSuite(List<CipherSuite> toTestList) {
114107
}
115108
}
116109

117-
public List<CipherSuite> getSupportedCipherSuitesWithIntolerance(ProtocolVersion version) {
118-
return getSupportedCipherSuitesWithIntolerance(new ArrayList<>(CipherSuite.getImplemented()), version);
119-
}
120-
121-
public List<CipherSuite> getSupportedCipherSuitesWithIntolerance(List<CipherSuite> toTestList,
122-
ProtocolVersion version) {
123-
List<CipherSuite> listWeSupport = new LinkedList<>(toTestList);
110+
public List<CipherSuite> getSupportedCipherSuites(List<CipherSuite> baseList, ProtocolVersion version) {
111+
List<CipherSuite> listWeSupport = getCipherSuitesForVersion(baseList, version);
124112
List<CipherSuite> supported = new LinkedList<>();
125113

126114
boolean supportsMore = false;

0 commit comments

Comments
 (0)