3
respostas

NÃO CONSIGO CHAMAR API COM UM CERTIFICADO .PFX

Quando chamo a api pelo insominia só preciso importar o arquivo .pfx, mas quando é no java eu não consigo utilizar alguem poderia me ajuda ?. Estou usando a versão 3.0.0 do spring boot. Queria passar a configuração para o ClientConfig. alguem consegue sugerir como ficaria essa configurção e informar quais versões utilizaram ?

@FeignClient(name = "sicoob-auth", url = "${application-property.sicoob.auth.url}" ,configuration = ClientConfig.class)
public interface SicoobAuthClient {

    @PostMapping("/auth/realms/cooperado/protocol/openid-connect/token")
    Object getToken(@RequestParam("grant_type") String grantType,
                    @RequestParam("client_id") String clientId,
                    @RequestParam("scope") String scope);
}
3 respostas

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?

Conseguiria entrar em contato cmg pelo discord ? ainda não consegui meu discord : Tardelly Santos #8294

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>4.0.3</version>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.63.Final</version>
        </dependency>

Insira aqui a descrição dessa imagem para ajudar na acessibilidade