我想在使用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);
答案 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)