首页 > 解决方案 > 如何在 quarkus 的 microprofile rest 客户端上忽略 ssl

问题描述

我想在使用 RestClient 调用 https rest api 时忽略主机名验证并忽略客户端认证验证

如果不使用构建器,我无法找到一种方法。

并且似乎主机验证程序根本不起作用。


public interface RHPAMRestClient {

  // Starts a new process instance of a specified process.
  @POST
  @Path("/server/containers/{containerId}/processes/{processId}/instances")
  @Produces(MediaType.APPLICATION_JSON)
  @Consumes(MediaType.APPLICATION_JSON)
  Object startProcess(@PathParam String containerId, @PathParam String processId, Object req);
}

RHPAMRestClient c = RestClientBuilder.newBuilder()
    .baseUri(new URI(""))
    .sslContext(SSLContexts.custom().loadTrustMaterial((chain, authType) -> true).build())
    .hostnameVerifier((hostname, session) -> { 
        System.err.println("hostname verifier");
        return true;
    })
    .build(RHPAMRestClient.class);

    c.startProcess("", "", null);

标签: quarkus

解决方案


Quarkus 中似乎存在配置错误。根据文档https://quarkus.io/guides/native-and-ssl,使用 quarkus-rest-client 时应启用 ssl 支持,属性quarkus.ssl.native应为true.

但似乎是这样false,这会导致org.jboss.resteasy.microprofile.client.RestClientBuilderImpl覆盖您的设置

if (!SSL_ENABLED) {
            resteasyClientBuilder.httpEngine((new URLConnectionClientEngineBuilder()).resteasyClientBuilder(resteasyClientBuilder).build());
            resteasyClientBuilder.sslContext((SSLContext)null);
            resteasyClientBuilder.trustStore((KeyStore)null);
            resteasyClientBuilder.keyStore((KeyStore)null, "");
        }

强制属性为 true 将神奇地使一切按预期工作。所以,只需设置

quarkus.ssl.native=true在你的application.properties文件中

(使用 Quarkus 1.3.1.Final)


推荐阅读