版本:org.springframework:spring-web:5.1.8.RELEASE、org.apache.httpcomponents:httpclient:4.5.9
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
import javax.net.ssl.SSLContext;
import java.io.IOException;
import java.io.InputStream;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
@Bean
public RestTemplate restTemplate(@Value("${weixin.key.file}") String keyFile, @Value("${weixin.key.password}") String keyPassword) {
InputStream keyStream = getClass().getResourceAsStream(keyFile);
KeyStore keyStore;
try {
keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(keyStream, keyPassword.toCharArray());
} catch (KeyStoreException | CertificateException | NoSuchAlgorithmException | IOException e) {
throw new RuntimeException(e.getMessage(), e);
}
SSLContext sslContext;
try {
sslContext = SSLContexts.custom().loadKeyMaterial(keyStore, keyPassword.toCharArray()).build();
} catch (NoSuchAlgorithmException | KeyManagementException | KeyStoreException | UnrecoverableKeyException e) {
throw new RuntimeException(e.getMessage(), e);
}
CloseableHttpClient httpClient = HttpClients.custom().setSSLContext(sslContext).build();
HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
return new RestTemplate(httpRequestFactory);
}
(完)
本文介绍了如何在Spring的RestTemplate和Apache HttpClient中配置并加载SSL证书,特别是PKCS12格式的证书,以及针对微信API的证书处理方法。涉及到的库版本为spring-web:5.1.8.RELEASE和httpclient:4.5.9。

729

被折叠的 条评论
为什么被折叠?



