如果调用远程远程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 @ 2024-03-12 11:28  hobby0524  阅读(10)  评论(0编辑  收藏  举报