当前位置: 首页 > 知识库问答 >
问题:

如何向Spring WebClient添加客户机证书?

谷梁凌
2023-03-14
this.webCLient = WebClient.builder()
                .baseUrl("https://some-rest-api.com")
                .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON.toString())
                .build();
this.webClient.get()
                .uri("/getData")
                .exchange()
                .flatMap(clientResponse -> {
                    System.out.println(clientResponse);
                    return clientResponse.bodyToMono(MyClass.class);
                });

javax.net.ssl.SSLException: Received fatal alert: handshake_failure

共有1个答案

宗政卓
2023-03-14

我花了一些时间才找到托马斯答案中缺少的那部分。

在这里:

public static SslContext getTwoWaySslContext() {
        
    try(FileInputStream keyStoreFileInputStream = new FileInputStream(ResourceUtils.getFile(clientSslKeyStoreClassPath));
        FileInputStream trustStoreFileInputStream = new FileInputStream(ResourceUtils.getFile(clientSslTrustStoreClassPath));   
        ) {
        KeyStore keyStore = KeyStore.getInstance("jks");
        keyStore.load(keyStoreFileInputStream, clientSslKeyStorePassword.toCharArray());
        KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509");
        keyManagerFactory.init(keyStore, clientSslKeyStorePassword.toCharArray());
            
        KeyStore trustStore = KeyStore.getInstance("jks");
        trustStore.load(trustStoreFileInputStream, clientSslTrustStorePassword.toCharArray());
        TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance("SunX509");
        trustManagerFactory.init(trustStore);
            
        return SslContextBuilder.forClient()
            .keyManager(keyManagerFactory)
            .trustManager(trustManagerFactory)
            .build();
            
    } catch (Exception e) {
        log.error("An error has occurred: ", e);
    }
        
    return null;
}


HttpClient httpClient = HttpClient.create().secure(sslSpec -> sslSpec.sslContext(SslUtil.getTwoWaySslContext()));
ClientHttpConnector clientHttpConnector = new ReactorClientHttpConnector(httpClient);
WebClient webClient = webClientBuilder
    .clientConnector(clientHttpConnector)
    .baseUrl(baseUrl)
    .build();

享受吧!

 类似资料:
  • 问题内容: 我有以下代码使用SSL将服务器与客户端连接,现在我想添加客户端身份验证: (我有一个服务器密钥库(JCEKS类型)和一个客户端密钥库(JKS类型),服务器使用了一个信任库(证书),在其中我导入了两个证书,因为我也想使用此信任库进行客户端身份验证) 客户代码: 服务器代码: 在此先感谢您的帮助。 编辑:我在服务器端添加此代码: 但是,如果我删除cacerts中的客户端证书,则连接不会给我

  • 问题内容: 我当前的目标是添加一个新的客户属性(具有类型),该属性应显示为带有预定义选项的选择(已从模型加载,其中的条目可在后端进行编辑)。我正在努力正确使用方法,尤其是指定正确的源选项。另一个问题是新属性未保存到eav_entity_attribute表中 我使用的是Magento CE 1.5.1.0 问题答案: 这是渲染器基本属性的代码: 添加属性的不寻常步骤是,这似乎是客户属性所独有的。没

  • 问题内容: 我正在使用CLI工具来构建具有很酷的上传功能的混合移动应用程序,因此我可以在设备上测试该应用程序而无需通过应用程序商店(ionic- cli)。但是,在我的公司中,像许多其他公司一样,TLS请求使用我自己在钥匙串(OS X)的计算机上拥有的自定义CA证书重新签名。但是,nodejs不会使用钥匙串来获取其信任的CA列表。我无法控制ionic- cli应用程序,因此无法简单地将{ca:}属

  • 是否有任何方法可以将配置添加到库中定义的OpenFeign客户机,使其不影响任何其他客户机?

  • 有谁能提供一个如何在camel transport cxf客户机中正确添加拦截器的示例吗? 谢了。

  • 如何向JMeter脚本添加客户端证书和密钥? 每次我导航到