2011-04-01 170 views
2

我需要一些幫助使DIGEST身份驗證正常工作。我正在使用apache 4.1庫。當我嘗試登錄我得到。Java摘要身份驗證POST XML

線程「main」 javax.net.ssl.SSLPeerUnverifiedException例外:同行不認證

我試圖登錄到Asterisk的Switchvox的開發擴展API,您只需發送一個XML後,它給你返回信息。我當然有正確的用戶名/密碼,我得到這個PERL腳本的工作,但我不能在JAVA中獲得它。

這裏是我的代碼

public class Main { 

public static void main(String[] args) throws Exception { 

    HttpHost targetHost = new HttpHost("192.168.143.253", 443, "https"); 

    DefaultHttpClient httpclient = new DefaultHttpClient(); 
    try { 
     httpclient.getCredentialsProvider().setCredentials(
       new AuthScope("192.168.143.253", targetHost.getPort()), 
       new UsernamePasswordCredentials("username", "mypassword")); 

     // Create AuthCache instance 
     AuthCache authCache = new BasicAuthCache(); 
     // Generate DIGEST scheme object, initialize it and add it to the local auth cache 

     DigestScheme digestAuth = new DigestScheme(); 

     authCache.put(targetHost, digestAuth); 

     // Add AuthCache to the execution context 
     BasicHttpContext localcontext = new BasicHttpContext(); 
     localcontext.setAttribute(ClientContext.AUTH_CACHE, authCache); 

     HttpGet httpget = new HttpGet("https://192.168.143.253/xml/"); 

     System.out.println("executing request: " + httpget.getRequestLine()); 
     System.out.println("to target: " + targetHost); 

     for (int i = 0; i < 3; i++) { 
      HttpResponse response = httpclient.execute(targetHost, httpget, localcontext); 
      HttpEntity entity = response.getEntity(); 

      System.out.println("----------------------------------------"); 
      System.out.println(response.getStatusLine()); 
      if (entity != null) { 
       System.out.println("Response content length: " + entity.getContentLength()); 
      } 
      EntityUtils.consume(entity); 
     } 

    } finally { 
     // When HttpClient instance is no longer needed, 
     // shut down the connection manager to ensure 
     // immediate deallocation of all system resources 
     httpclient.getConnectionManager().shutdown(); 
    } 
} 

}

回答

3

我終於找到了答案,我的問題。

public static void main(String args[]) { 

    final String username = "user"; 
    final String password = "password"; 



    Authenticator.setDefault(new Authenticator() { 
     @Override 
      protected PasswordAuthentication getPasswordAuthentication() { 
       PasswordAuthentication pa = new PasswordAuthentication (username, password.toCharArray()); 
       //System.out.println(pa.getUserName() + ":" + new String(pa.getPassword())); 
       return pa; 
      } 
      }); 
    BufferedReader in = null; 
    StringBuffer sb = new StringBuffer(); 

    try { 
     //URL url = new URL(strURL); 

     HttpsURLConnection connection = (HttpsURLConnection) new URL("https://secureHost/").openConnection(); 
        connection.setDefaultHostnameVerifier(new CustomizedHostnameVerifier()); 
        connection.setHostnameVerifier(new CustomizedHostnameVerifier()); 
        connection.setDoOutput(true); 
        connection.setDoInput(true); 
        connection.setRequestMethod("POST"); 
        connection.setRequestProperty("Content-Type","text/xml"); 
        PrintWriter out = new PrintWriter(connection.getOutputStream()); 
        String requestString = "<request method=\"switchvox.currentCalls.getList\"></request>"; 

        out.println(requestString); 
        out.close(); 

     in = new BufferedReader(new InputStreamReader(connection 
       .getInputStream())); 

     String line; 

     while ((line = in.readLine()) != null) { 
      sb.append(line).append("\n"); 
     } 
    } catch (java.net.ProtocolException e) { 
     sb.append("User Or Password is wrong!"); 
     e.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      if (in != null) { 
       in.close(); 
      } 
     } catch (Exception e) { 
      System.out.println("Exception"); 
     } 
    } 

    System.out.println("The Data is: " + sb.toString()); 

} 

}

+0

您沒有使用'DigestScheme digestAuth =新DigestScheme();'在你的答案。這是如何與Digest安全性(我知道代碼工作,我想知道它的安全性) – 2014-02-21 13:44:11