Вы когда-нибудь узнали, как заставить 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: