package com.dy.pipIrrSell.config; import com.dy.pipIrrGlobal.cert.WxCertUtil; import com.dy.pipIrrSell.wechatpay.PayInfo; import okhttp3.OkHttpClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ResourceLoader; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.OkHttp3ClientHttpRequestFactory; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManagerFactory; import javax.net.ssl.X509TrustManager; import java.io.InputStream; import java.security.KeyStore; /** * @author ZhuBaoMin * @date 2024-03-06 11:44 * @LastEditTime 2024-03-06 11:44 * @Description */ @Configuration public class RestTemplateWechatCertConfig { String mchid = PayInfo.mchid; @Autowired private ResourceLoader resourceLoader; @Bean @ConfigurationProperties(prefix = "org.liurb.core.rest-template.config.connection") public ClientHttpRequestFactory wechatHttpRequestFactory() throws Exception { KeyStore keyStore = KeyStore.getInstance("PKCS12"); InputStream in = WxCertUtil.getCert_p12InputStream(resourceLoader); keyStore.load(in, mchid.toCharArray()); KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); keyManagerFactory.init(keyStore, mchid.toCharArray()); SSLContext context = SSLContext.getInstance("TLS"); context.init(keyManagerFactory.getKeyManagers(), null, null); OkHttpClient okHttpClient = new OkHttpClient.Builder() .sslSocketFactory(context.getSocketFactory(), getDefaultX509TrustManager()) .build(); return new OkHttp3ClientHttpRequestFactory(okHttpClient); } private static X509TrustManager getDefaultX509TrustManager() throws Exception { TrustManagerFactory factory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); factory.init((KeyStore) null); return (X509TrustManager) factory.getTrustManagers()[0]; } }