Как Wiremock определяет, какую версию TLS использовать? - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть клиент, который отправляет запрос рукопожатия в Wiremock, указав TLS 1.2, но Wiremock отвечает обратно с версией TLS 1.0.Как получить Wiremock для использования версии 1.2

1 Ответ

0 голосов
/ 23 мая 2019

Вы когда-нибудь узнали, как заставить WireMock использовать TLS 1.2?

РЕДАКТИРОВАТЬ: Чтобы настроить WireMock, который поддерживает только TLS 1.2, вы должны реализовать свой собственный HttpServerFactory, который создает экземпляр вашего пользовательского HttpServer.Настройка WireMock будет выглядеть примерно так:

WireMockServer server = new WireMockServer(
    WireMockConfiguration.options()
        .httpServerFactory(new CustomHttpServerFactory())
        .dynamicHttpsPort()
        .dynamicPort());

ORIGINAL: Я обнаружил, что стандартная реализация WireMock использует JettyHttpServerFactory, которая ищет следующие классы: com.github.tomakehurst.wiremock.jetty94.Jetty94HttpServer и com.github.tomakehurst.wiremock.jetty92.Jetty92HttpServer.Если один из них найден, он создает экземпляр класса.

Jetty94HttpStarter имеет более высокий приоритет, чем Jetty92HttpStarter.

Моим решением было создать копию Jetty92HttpServer и поместить ее в пакет com.github.tomakehurst.wiremock.jetty92 в моем проекте.

package com.github.tomakehurst.wiremock.jetty92;

import com.github.tomakehurst.wiremock.core.Options;
import com.github.tomakehurst.wiremock.http.AdminRequestHandler;
import com.github.tomakehurst.wiremock.http.StubRequestHandler;
import com.github.tomakehurst.wiremock.jetty9.JettyHttpServer;
import com.github.tomakehurst.wiremock.servlet.MultipartRequestConfigurer;
import org.eclipse.jetty.util.ssl.SslContextFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Jetty92HttpServer extends JettyHttpServer {
    private final Logger logger = LoggerFactory.getLogger(JettyStarter.class);

    public Jetty92HttpServer(final Options options, final AdminRequestHandler adminRequestHandler, final StubRequestHandler stubRequestHandler) {
        super(options, adminRequestHandler, stubRequestHandler);
    }

    @Override
    public SslContextFactory buildSslContextFactory() {
        logger.debug("Creates CustomizedSslContextFactory");
        final SslContextFactory factory = new CustomizedSslContextFactory();

        logger.debug("Exclude protocols TLS, TLSv1 and TLSv1.1");
        factory.addExcludeProtocols("TLS", "TLSv1", "TLSv1.1");

        logger.debug("Set protocol=TLSv1.2");
        factory.setProtocol("TLSv1.2");

        return factory;
    }

    @Override
    public MultipartRequestConfigurer buildMultipartRequestConfigurer() {
        return new Jetty92MultipartRequestConfigurer();
    }
}

Я знаю, что это работает для Java 7, иэто должно работать для Java 8. Однако я не уверен, что это работает с Java 9 и выше, но я думаю, что это должно работать как ожидалось.

Я рекомендую следующие SO сообщения, поскольку они содержат некоторые ссылки, которые помоглиme:

...