【问题标题】:How does Wiremock determine which TLS version to use?Wiremock 如何确定使用哪个 TLS 版本?
【发布时间】:2023-03-25 16:19:01
【问题描述】:

我有一个客户端通过指定 TLS 1.2 向wiremock 发送握手请求,但wiremock 使用TLS 1.0 版回复。 如何让wiremock 使用1.2 版

【问题讨论】:

    标签: java wiremock


    【解决方案1】:

    你有没有发现如何让 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 帖子,因为它们包含一些对我有帮助的链接:

    【讨论】:

      猜你喜欢
      • 2018-07-24
      • 2018-07-13
      • 1970-01-01
      • 2011-09-14
      • 2020-11-30
      • 1970-01-01
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多