/** * TLS-Attacker - A Modular Penetration Testing Framework for TLS * * Copyright 2014-2016 Ruhr University Bochum / Hackmanit GmbH * * Licensed under Apache License 2.0 * http://www.apache.org/licenses/LICENSE-2.0 */ package de.rub.nds.tlsattacker.testtls.impl; import de.rub.nds.tlsattacker.testtls.config.TestServerConfig; import de.rub.nds.tlsattacker.testtls.policy.TlsPeerProperties; import de.rub.nds.tlsattacker.tls.config.ConfigHandler; import de.rub.nds.tlsattacker.tls.constants.CipherSuite; import de.rub.nds.tlsattacker.tls.constants.ProtocolVersion; import java.util.Collections; import java.util.HashSet; import java.util.Set; /** * * @author Juraj Somorovsky - juraj.somorovsky@rub.de */ public class ProtocolVersionTest extends HandshakeTest { private final Set<ProtocolVersion> supportedProtocols; public ProtocolVersionTest(ConfigHandler configHandler, TestServerConfig serverConfig) { super(configHandler, serverConfig); supportedProtocols = new HashSet<>(); } @Override public void startTests() { for (ProtocolVersion pv : ProtocolVersion.values()) { if (pv == ProtocolVersion.DTLS10 || pv == ProtocolVersion.DTLS12) { continue; } testCipherSuites(pv); } result = "\n Supported protocols: " + protocolsToString(supportedProtocols); } private void testCipherSuites(ProtocolVersion pv) { for (CipherSuite cs : CipherSuite.values()) { serverConfig.setProtocolVersion(pv); serverConfig.setCipherSuites(Collections.singletonList(cs)); boolean success = false; try { success = executeHandshake(); } catch (Exception ex) { LOGGER.info(ex.getLocalizedMessage()); LOGGER.debug(ex.getLocalizedMessage(), ex); } if (success) { supportedProtocols.add(pv); return; } } } private String protocolsToString(Set<ProtocolVersion> protocols) { String output = ""; for (ProtocolVersion pv : protocols) { output = output + pv.name() + " "; } return output; } public Set<ProtocolVersion> getSupportedProtocols() { return supportedProtocols; } @Override public void fillTlsPeerProperties(TlsPeerProperties properties) { properties.setProtocolVersions(supportedProtocols); } }