2016-04-19 1 views
1

У меня есть HTTPS-вызовы страниц, которые работают нормально, и у меня есть HTTP Basic Auth, отлично работающий, что я не могу сделать, это получить Basic Auth, работающий на HTTPS-соединении.Basic Auth over HTTPS Java

Прилагаю пример кода, но он не работает. Я продолжаю получать 403. Я проверил имя пользователя и пароль, и это было успешным при тестировании его с помощью дополнения RESTClinet от Firefox.

Любая помощь будет отличной. Благодарю.

private static void getAPITest() throws MalformedURLException, IOException 
{   
    try { 


    System.setProperty("javax.net.ssl.trustStore","/home/USER/CERTS/myTrustStore"); 
    System.setProperty("javax.net.ssl.trustStorePassword", "PASSWORD"); 


    Authenticator myAuth = new Authenticator() 
     { 
      @Override 
      protected PasswordAuthentication getPasswordAuthentication() 
      { 
       return new PasswordAuthentication("USERNAME", "PASSWORD".toCharArray()); 
      } 
     }; 

     Authenticator.setDefault(myAuth); 


     String httpsURL = "https://someurlandapi.com"; 
     URL myurl = new URL(httpsURL); 
     HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection(); 
     //con.setRequestProperty("Authorization", "Basic " + authString); 
     con.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); 
     con.setRequestProperty("Accept", "application/json"); 
     con.setRequestMethod("POST");    

     InputStream ins = con.getInputStream(); 
     InputStreamReader isr = new InputStreamReader(ins); 
     BufferedReader in = new BufferedReader(isr); 

     String inputLine; 

     while ((inputLine = in.readLine()) != null) 
     { 
      System.out.println(inputLine); 
     } 

     ins.close(); 
     in.close(); 

    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

ответ

0

Я не думаю, что PasswordAuthentication делает то, что вы хотите. Но базовый auth действительно легко справляется с собой. Если вы используете Java8, то это просто Base64.getEncoder(). EncodeToString ((«USERNAME» + «:» + «PASSWORD»). GetBytes()).

+0

Да, я пробовал, но тот же вопрос еще 403. – DevilCode

0

оказывается, не имеет места перед основнымами:

con.setRequestProperty("Authorization", "Basic " + authStringEnc); 

и нужно:

conn.setRequestProperty("User-Agent", "Mozilla/5"); 

Быстрым примечание для тех, кто делает это, если вы создаете свои собственные доверенные сертификаты ты по необходимо будет добавить цепочку сертификатов сайтов/URL-адресов. В firefox вы можете щелкнуть по замку> Дополнительные сведения> Безопасность> Открыть сертификаты. Оттуда можно выделить экспорт сертификата с цепью он затем добавить его в доверенное хранилище с Keytool:

keytool -import -file websitecertificate.pem -alias websitecert -keystore myTrustStore