7
respostas

Cliente Rest

` public class TestaRest {

public static void main(String[] args) {


    OkHttpClient client = new OkHttpClient().newBuilder()
              .build();

            MediaType mediaType = MediaType.parse("application/json");

            JSONObject jSonPass = new JSONObject();

            jSonPass.put("password", "00000000");



            RequestBody body = RequestBody.create(mediaType, jSonPass.toString() );


            Request request = new Request.Builder()
               .url("https://126.1.3.13/sys/log_in")
              .method("PUT", body)
              .addHeader("Referer", "https://126.1.3.13")
              .addHeader("Content-Type", "application/json")
              .build();
            try {
                Response response = client.newCall(request).execute();
                System.out.println( response );
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


}

}


Estou tentando fazer um put para esta url: https://126.1.3.13/sys/log_in e está 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.Alert.createSSLException(Unknown Source) at sun.security.ssl.TransportContext.fatal(Unknown Source) at sun.security.ssl.TransportContext.fatal(Unknown Source) at sun.security.ssl.TransportContext.fatal(Unknown Source) at sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(Unknown Source) at sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate(Unknown Source) at sun.security.ssl.CertificateMessage$T12CertificateConsumer.consume(Unknown Source) at sun.security.ssl.SSLHandshake.consume(Unknown Source) at sun.security.ssl.HandshakeContext.dispatch(Unknown Source)

7 respostas

Oi Jorge,

Pela exception parece ser um problema com o certificado digital do endereço que você está acessando: https://126.1.3.13

Você vai precisar configurar o certificado digital no Java.

Olá Rodrigo! Obrigado pelo retorno.

Então eu tenho que solicitar o certicado para a empresa do Rest e fazer a instalação conforme este comando abaixo?

keytool -import -alias example -keystore “C:\Program Files\Java\jdk1.8.0_201\jre\lib\security\cacerts” -file

Isso mesmo!

Com isso o Java vai conseguir localizar o certificado e seu código deve funcionar normalmente.

Bons estudos!

Rodrigo, obrigado pelo apoio!

solicitei para empresa dona do rest assim que ele me mandar vou testar quais quer coisa volta falar com você ok vou deixar aberto por enquanto OK valeu!

Rodrigo bom dia! a empresa falou que nao precisa de certificado é somente assinatura que poderia desabilitar SSL, achei um codigo que desabilita o SSL aceita como confiavel usando o HttpURLConnect, conforme o codigo a baixo mais erro de segurancao nao tem mais porem meu retorno é 403.

import java.io.IOException; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.Socket; import java.net.URL; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.cert.X509Certificate;

import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLEngine; import javax.net.ssl.TrustManager; import javax.net.ssl.X509ExtendedTrustManager;

import org.json.simple.JSONObject;

public class Testes {

@SuppressWarnings("unchecked")
public static void main(String[] args) throws IOException {

    JSONObject jSonPass = new JSONObject();

    jSonPass.put("password", "00000000");    


     HttpsURLConnection urlConnection = null;

     URL url = new URL ("https://126.1.3.13/sys/log_in");

    // Bypassing the SSL verification to execute our code successfully
      disableSSLVerification ();

      urlConnection = (HttpsURLConnection) url.openConnection();
      urlConnection.setConnectTimeout(20000);
      urlConnection.setReadTimeout(20000);
      urlConnection.setDoOutput(true);
      urlConnection.setRequestMethod("PUT");
      urlConnection.setRequestProperty("Content-Type", "application/json");
      urlConnection.setRequestProperty("Referer", "https://126.1.3.13");
      urlConnection.setRequestProperty("Accept", "application/json"); 
      urlConnection.setRequestProperty( "text/plain", "utf-8");

      String jsonInputString  = jSonPass.toString();

      try(OutputStream os = urlConnection.getOutputStream()) {
            byte[] input = jsonInputString.getBytes("utf-8");
            os.write(input, 0, input.length);            
        }

      System.out.println(urlConnection.getOutputStream());         

      System.out.println ("Resposta" + url + ": " + ((HttpURLConnection) url.openConnection ()).getResponseCode ());


      /* 
      BufferedReader br = new BufferedReader(new InputStreamReader((urlConnection.getInputStream())));

        String output,json="";
        while ((output = br.readLine()) != null) {
            json+= output;
        }
        System.out.println(json); */

      urlConnection.disconnect();





}


// Method used for bypassing SSL verification
   public static void disableSSLVerification () {

      TrustManager [] trustAllCerts = new TrustManager [] {new X509ExtendedTrustManager () {


         @Override
         public void checkClientTrusted (X509Certificate [] chain, String authType, Socket socket) {

         }

         @Override
         public void checkServerTrusted (X509Certificate [] chain, String authType, Socket socket) {

         }

         @Override
         public void checkClientTrusted (X509Certificate [] chain, String authType, SSLEngine engine) {

         }

         @Override
         public void checkServerTrusted (X509Certificate [] chain, String authType, SSLEngine engine) {

         }

         @Override
         public java.security.cert.X509Certificate [] getAcceptedIssuers () {
            return null;
         }

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

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

      }};

      SSLContext sc = null;
      try {
         sc = SSLContext.getInstance ("SSL");
         sc.init (null, trustAllCerts, new java.security.SecureRandom ());
      } catch (KeyManagementException | NoSuchAlgorithmException e) {
         e.printStackTrace ();
      }
      HttpsURLConnection.setDefaultSSLSocketFactory (sc.getSocketFactory ());
   }

}

Res: Resposta: https://126.1.3.13/sys/log_in: 403

e no Postman funciona e também no WizToos.org RESTClient 3.5

A principio resolveu a questão do certificado.

Agora é questão de permissão para acessar esse endereço, pois está retornando 403 - Forbidden

Sim, mais como que com o postman eu acesso da mesma maquina e tambem do WizTools.orgRESTClient que feito em java. O que devo verificar agora?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software