java - Wiremock 如何确定要使用哪个 TLS 版本?

标签 java wiremock

我有一个客户端通过指定 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.Jetty94HttpServercom.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 帖子,因为它们包含一些对我有帮助的链接:

关于java - Wiremock 如何确定要使用哪个 TLS 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54683954/

相关文章:

testing - 我应该使用基于协议(protocol)的 stub 服务还是 Wiremock.net?

java - 从 Activity 访问 View 类的 int 数据

java - Android:WireMock:com.android.dex.DexIndexOverflowException:方法ID不在[0,0xffff]中:65536

spring-boot - 具有动态响应的Wiremock Standalone

java - 如何获取目录 URL 的文件/目录列表?

java - SSLHandshakeException 没有共同的密码套件 - linux 仅使用 wiremock

java - 如何在 Wiremock 中使用相同的 header 进行响应?

java - Guice + Tomcat 潜在的内存泄漏

java - 为什么java会在这里死锁?

java - 如何将AnimationTimer与JavaFX应用程序线程分开?