如果调用远程远程url接口为https,且存在客户端证书验证,如何在客户端处理

方法一:编程方式配置SSLContext与TrustManager
 
复制代码
// 加载PKCS12格式的客户端证书和私钥
        KeyStore keyStore = KeyStore.getInstance("PKCS12");
        char[] keystorePassword = "your Certificate Passphrase".toCharArray();
        String clientKeyPath = ResourceUtils.getFile("classpath:security/ctt.p12").getAbsolutePath();
        FileInputStream fis = new FileInputStream(clientKeyPath);
        try {
            keyStore.load(fis, keystorePassword);
        } finally {
            fis.close();
        }

        // 初始化KeyManagerFactory
        String algorithm = KeyManagerFactory.getDefaultAlgorithm();
        KeyManagerFactory kmf = KeyManagerFactory.getInstance(algorithm);
        kmf.init(keyStore, keystorePassword);

        // 创建TrustManagerFactory,这里假设我们信任服务器提供的证书
        TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init((KeyStore) null);

        // 创建SSLContext并设置KeyManager和TrustManager
        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
        String result = HttpRequest.post(schedulingConfigProperties.getTokenUrl())
                .header(HttpHeaders.CONNECTION, "keep-alive")
                .setSSLSocketFactory(sslContext.getSocketFactory())
                .timeout(20000)//超时,毫秒
                .form(paramMap)
                .addRequestInterceptor(request -> {
                })
                .execute().body();

  //然后在http client或者webservice client设置对应的客户端代理类中
    String result = HttpRequest.post(schedulingConfigProperties.getTokenUrl())
.header(HttpHeaders.CONNECTION, "keep-alive")
.setSSLSocketFactory(sslContext.getSocketFactory())
.timeout(20000)
.form(paramMap)
.addRequestInterceptor(request -> {
})
.execute().body();
 

 
复制代码

 

posted @   hobby0524  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示