/** * 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.BotanPolicyParser; import de.rub.nds.tlsattacker.testtls.policy.TlsPeerProperties; import de.rub.nds.tlsattacker.tls.config.ConfigHandler; import de.rub.nds.tlsattacker.tls.config.ConfigHandlerFactory; import de.rub.nds.tlsattacker.tls.config.GeneralConfig; import de.rub.nds.tlsattacker.tls.util.LogLevel; import java.io.FileNotFoundException; import java.util.LinkedList; import java.util.List; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** * * @author Juraj Somorovsky <juraj.somorovsky@rub.de> */ public class TestTLSServer { public static Logger LOGGER = LogManager.getLogger(TestTLSServer.class); private final TestServerConfig testConfig; private ConfigHandler configHandler; private final GeneralConfig generalConfig; public TestTLSServer(TestServerConfig serverTestConfig, GeneralConfig generalConfig) { this.testConfig = serverTestConfig; this.generalConfig = generalConfig; } public boolean startTests() { configHandler = ConfigHandlerFactory.createConfigHandler("client"); configHandler.initialize(generalConfig); List<TestTLS> tests = new LinkedList<>(); TlsPeerProperties properties = new TlsPeerProperties(); LOGGER.log(LogLevel.CONSOLE_OUTPUT, "Starting TLS Test"); ProtocolVersionTest protocolVersionTest = new ProtocolVersionTest(configHandler, testConfig); protocolVersionTest.startTests(); tests.add(protocolVersionTest); CryptoTest cryptoTest = new CryptoTest(configHandler, testConfig); cryptoTest.startTests(); tests.add(cryptoTest); NamedCurvesTest ncTest = new NamedCurvesTest(configHandler, testConfig, cryptoTest.getSupportedCipherSuites()); tests.add(ncTest); ncTest.startTests(); SignatureAndHashAlgorithmsTest shTest = new SignatureAndHashAlgorithmsTest(configHandler, testConfig, cryptoTest.getSupportedCipherSuites()); shTest.startTests(); tests.add(shTest); CipherSuiteOrderTest csOrderTest = new CipherSuiteOrderTest(configHandler, testConfig); csOrderTest.startTests(); tests.add(csOrderTest); // removing for now // AttacksTest attacks = new AttacksTest(configHandler, testConfig); // tests.add(attacks); // for (TestTLS test : tests) { // test.startTests(); // } StringBuilder sb = new StringBuilder(); for (TestTLS test : tests) { test.fillTlsPeerProperties(properties); sb.append("\n").append(test.getClass().getSimpleName()).append(test.getResult()); } LOGGER.log(LogLevel.CONSOLE_OUTPUT, sb.toString()); boolean policyCompliant = true; if (testConfig.getPolicy() != null) { BotanPolicyParser parser = new BotanPolicyParser(); try { parser.parsePolicy(testConfig.getPolicy()); TlsPeerProperties configuredProperties = parser.getTlsProperties(); policyCompliant = properties.compliesPolicy(configuredProperties); } catch (FileNotFoundException ex) { LOGGER.error("Cannot find the provided file " + testConfig.getPolicy()); LOGGER.info(ex.getLocalizedMessage(), ex); policyCompliant = false; } } return policyCompliant; } }