quarkus - 如何在 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 中似乎存在配置错误。根据文档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)
推荐阅读
- c# - 我将如何对生成以下 C# 类的 .proto 文件进行建模?
- google-cloud-platform - 从 Cloud Run 到 Cloud SQL postgre 的 GCP 连接错误
- java - 从 Spring Boot 应用程序渲染时,随机数被附加到 zip 中包含的文件名
- spring-boot - 使用带有错误处理的 spring webClient 并行调用不同的 Rest API,如果 1 个服务返回 4xx 或 5xx,则不应停止进一步处理
- arrays - 将项目从python中的另一个数组添加到对象数组
- custom-adapter - 无法将深色主题应用于自定义微调器
- c++ - 运行时错误:添加无符号偏移量
- android-studio - 如何从 onLongClick() 重新运行循环?
- html - 为什么规范网址没有改变?
- python - Azure Databricks 错误:AzureException:hadoop_azure_shaded.com.microsoft.azure.storage.StorageException:服务器无法对请求进行身份验证