【发布时间】:2023-03-25 16:19:01
【问题描述】:
我有一个客户端通过指定 TLS 1.2 向wiremock 发送握手请求,但wiremock 使用TLS 1.0 版回复。 如何让wiremock 使用1.2 版
【问题讨论】:
我有一个客户端通过指定 TLS 1.2 向wiremock 发送握手请求,但wiremock 使用TLS 1.0 版回复。 如何让wiremock 使用1.2 版
【问题讨论】:
你有没有发现如何让 WireMock 使用 TLS 1.2?
编辑:要设置仅支持 TLS 1.2 的 WireMock,您必须实现自己的 HttpServerFactory,以构建自定义 HttpServer 的实例。 WireMock 设置是这样的:
WireMockServer server = new WireMockServer(
WireMockConfiguration.options()
.httpServerFactory(new CustomHttpServerFactory())
.dynamicHttpsPort()
.dynamicPort());
原文:
我发现标准的 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 帖子,因为它们包含一些对我有帮助的链接:
【讨论】: