[RESOLVIDO]Erro com url HTTPs utilizando Jersey

1 resposta
programaçãojava
V

Pessoal,

Estou tentando acessar um serviço de email que a url é https. Até semana passada estava funcionando perfeitamente. agora esta dando o seguinte erro:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
	at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1868)
	at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)
	at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270)
	at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1337)
	at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:154)
	at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
	at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
	at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:998)
	at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1294)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1321)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1305)
	at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:523)
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
	at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1087)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250)
	at org.glassfish.jersey.client.HttpUrlConnector$3.getOutputStream(HttpUrlConnector.java:267)
	at org.glassfish.jersey.message.internal.CommittingOutputStream.commitStream(CommittingOutputStream.java:200)
	at org.glassfish.jersey.message.internal.CommittingOutputStream.commitStream(CommittingOutputStream.java:194)
	at org.glassfish.jersey.message.internal.CommittingOutputStream.commit(CommittingOutputStream.java:262)
	at org.glassfish.jersey.message.internal.OutboundMessageContext.commitStream(OutboundMessageContext.java:812)
	at org.glassfish.jersey.client.ClientRequest.writeEntity(ClientRequest.java:526)
	at org.glassfish.jersey.client.HttpUrlConnector._apply(HttpUrlConnector.java:270)
	at org.glassfish.jersey.client.HttpUrlConnector.apply(HttpUrlConnector.java:182)
	at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:227)
	at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:671)
	at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
	at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
	at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
	at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:422)
	at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:667)
	at testeemail.Teste.main(Teste.java:45)

Código fonte que estou utilizando e estava funcionando até outro dia!

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Form;
import javax.ws.rs.core.MediaType;
import org.glassfish.jersey.client.ClientResponse;
import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;

/**
 *
 * @author Vinicius
 */
public class Teste {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try {
            
            
            Client client = ClientBuilder.newClient();
            client.register(HttpAuthenticationFeature.basic("api", "key-XXXXXXXXXXXXXXXX"));
            WebTarget mgRoot = client.target("https://api.mailgun.net/v3");
            Form reqData = new Form();
            reqData.param("from", "[email removido]");
          

            reqData.param("to", "[email removido]");
            reqData.param("subject", "teste");
            reqData.param("html", "teste envio");
            try {
                mgRoot.path("/{domain}/messages")
                        .resolveTemplate("domain", "app.novaera.com.br")
                        .request(MediaType.APPLICATION_FORM_URLENCODED)
                        .buildPost(Entity.
                                entity(reqData, MediaType.APPLICATION_FORM_URLENCODED)).invoke(ClientResponse.class);
            } catch (Exception e) {
                e.printStackTrace();
            }
        } catch (Exception e) {
           e.printStackTrace();
        }
    }
    
}

1 Resposta

V

Pessoal,
Para que tiver problemas é só acrescentar o código abaixo:

TrustManager[] trustManager = new X509TrustManager[]{new X509TrustManager() {

                @Override
                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }

                @Override
                public void checkClientTrusted(X509Certificate[] certs, String authType) {

                }

                @Override
                public void checkServerTrusted(X509Certificate[] certs, String authType) {

                }
            }};

            SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, trustManager, null);
            
            Client client = ClientBuilder.newBuilder().sslContext(sslContext).build();

Obrigado a todos!

Criado 3 de março de 2018
Ultima resposta 5 de mar. de 2018
Respostas 1
Participantes 1