/** * 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.tls; import com.beust.jcommander.JCommander; import de.rub.nds.tlsattacker.tls.config.ClientCommandConfig; import de.rub.nds.tlsattacker.tls.config.GeneralConfig; import de.rub.nds.tlsattacker.tls.config.CommandConfig; import de.rub.nds.tlsattacker.tls.config.ConfigHandler; import de.rub.nds.tlsattacker.tls.config.ConfigHandlerFactory; import de.rub.nds.tlsattacker.tls.config.ServerCommandConfig; import de.rub.nds.tlsattacker.tls.config.WorkflowTraceSerializer; import de.rub.nds.tlsattacker.tls.workflow.SessionResumptionWorkflowConfiguration; import de.rub.nds.tlsattacker.tls.workflow.TlsContext; import de.rub.nds.tlsattacker.tls.workflow.WorkflowExecutor; import de.rub.nds.tlsattacker.transport.TransportHandler; import java.io.FileOutputStream; /** * @author Juraj Somorovsky (juraj.somorovsky@rub.de) * @author Philip Riese <philip.riese@rub.de> */ public class Main { public static void main(String[] args) throws Exception { GeneralConfig generalConfig = new GeneralConfig(); JCommander jc = new JCommander(generalConfig); ServerCommandConfig server = new ServerCommandConfig(); jc.addCommand(ServerCommandConfig.COMMAND, server); ClientCommandConfig client = new ClientCommandConfig(); jc.addCommand(ClientCommandConfig.COMMAND, client); jc.parse(args); if (generalConfig.isHelp() || jc.getParsedCommand() == null) { jc.usage(); return; } CommandConfig config; if (jc.getParsedCommand().equals(ServerCommandConfig.COMMAND)) { config = server; } else { config = client; } ConfigHandler configHandler = ConfigHandlerFactory.createConfigHandler(jc.getParsedCommand()); configHandler.initialize(generalConfig); if (configHandler.printHelpForCommand(jc, config)) { return; } TransportHandler transportHandler = configHandler.initializeTransportHandler(config); TlsContext tlsContext = configHandler.initializeTlsContext(config); WorkflowExecutor workflowExecutor = configHandler.initializeWorkflowExecutor(transportHandler, tlsContext); workflowExecutor.executeWorkflow(); // if (config.isVerifyWorkflowCorrectness()) { // workflowExecutor.checkConfiguredProtocolMessagesOrder(); // } transportHandler.closeConnection(); // setting and executing the session resumption workflow trace if (config.isSessionResumption()) { TransportHandler transportHandlerSR = configHandler.initializeTransportHandler(config); SessionResumptionWorkflowConfiguration SRworkflow = new SessionResumptionWorkflowConfiguration(tlsContext, config); SRworkflow.createWorkflow(); WorkflowExecutor workflowExecutorSR = configHandler.initializeWorkflowExecutor(transportHandlerSR, tlsContext); workflowExecutorSR.executeWorkflow(); transportHandlerSR.closeConnection(); } if (config.getWorkflowOutput() != null && !config.getWorkflowOutput().isEmpty()) { FileOutputStream fos = new FileOutputStream(config.getWorkflowOutput()); WorkflowTraceSerializer.write(fos, tlsContext.getWorkflowTrace()); } } }