E aí, Matheus!
Entendi, APIs com certificados .pfx podem ser um desafio. Vamos ver se consigo te dar uma luz com o Spring Boot.
Pra configurar o certificado no Java, especialmente no Spring Boot, geralmente você precisa mexer um pouco nas configurações do RestTemplate
ou WebClient
. No seu caso, parece que tá usando o Feign, então dá uma olhada nisso:
import feign.Client;
import feign.httpclient.ApacheHttpClient;
public class ClientConfig {
@Bean
public Client feignClient() {
return new ApacheHttpClient(client());
}
@Bean
public CloseableHttpClient client() {
// Aqui é onde você configura o certificado .pfx
// Pode ser algo assim:
CloseableHttpClient client = HttpClients.custom()
.setSSLSocketFactory(sslConnectionSocketFactory())
.build();
return client;
}
private SSLConnectionSocketFactory sslConnectionSocketFactory() {
try {
// Aqui você lê o arquivo .pfx e configura o SSLContext
KeyStore keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(getClass().getResourceAsStream("/caminho/para/seu/arquivo.pfx"), "suaSenha".toCharArray());
return new SSLConnectionSocketFactory(
new SSLContextBuilder()
.loadKeyMaterial(keyStore, "suaSenha".toCharArray())
.build(),
NoopHostnameVerifier.INSTANCE);
} catch (Exception e) {
throw new RuntimeException("Erro ao configurar o certificado", e);
}
}
}
Essa é uma configuração básica. Não se esqueça de ajustar os caminhos e senhas, claro.
Pra isso, você também vai precisar adicionar a dependência no seu pom.xml
ou build.gradle
:
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.63.Final</version>
</dependency>
Uma dúvida é projeto particular?