如何忽略quarkus的microprofile rest客户端上的ssl

时间:2020-03-12 15:01:59

标签: quarkus

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

如果不使用生成器,我将找不到解决方法。

并且看来hostverifier根本不起作用。


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);

1 个答案:

答案 0 :(得分:1)

似乎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)