2013-01-04 14 views
3

我想使用Dropbox Java API讓我的Java應用程序上傳文件。不知何故,我最終得到的是我無法解決的SSL錯誤。有什麼建議麼?使用Dropbox的Java API:DropboxSSLException:javax.net.ssl.SSLPeerUnverifiedException:對端未驗證

我使用這個代碼(http://aaka.sh/patel/2011/12/20/authenticating-dropbox-java-api/)

public class DropboxTest { 

    // App key & secret that Dropbox's developer website gives your app 
    private static final String APP_KEY = "myAppKey"; 
    private static final String APP_SECRET = "myAppSecret"; 
    // Define AccessType for DropboxAPI object 
    final static private AccessType ACCESS_TYPE = AccessType.APP_FOLDER; 
    private static DropboxAPI<WebAuthSession> mDBApi; 

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

     // Initialize the goods/session 
     AppKeyPair appKeys = new AppKeyPair(APP_KEY, APP_SECRET); 
     WebAuthSession session = new WebAuthSession(appKeys, ACCESS_TYPE); 

     // Initialize DropboxAPI object 
     mDBApi = new DropboxAPI<WebAuthSession>(session); 

     // Get ready for user input 
     Scanner input = new Scanner(System.in); 

     // Open file that stores tokens, MUST exist as a blank file 
     File tokensFile = new File("TOKENS"); 

     System.out.println("Enter 'a' to authenticate, or 't' to test reauthentication: "); 
     String command = input.next(); 

     if(command.equals("a")){ 

      try { 

       // Present user with URL to allow app access to Dropbox account on 
       System.out.println("Please go to this URL and hit \"Allow\": " + mDBApi.getSession().getAuthInfo().url); 
       AccessTokenPair tokenPair = mDBApi.getSession().getAccessTokenPair(); 

       // Wait for user to Allow app in browser 
       System.out.println("Finished allowing? Enter 'next' if so: "); 
       if(input.next().equals("next")){ 
        RequestTokenPair tokens = new RequestTokenPair(tokenPair.key, tokenPair.secret); 
        mDBApi.getSession().retrieveWebAccessToken(tokens); 
        PrintWriter tokenWriter = new PrintWriter(tokensFile); 
        tokenWriter.println(session.getAccessTokenPair().key); 
        tokenWriter.println(session.getAccessTokenPair().secret); 
        tokenWriter.close(); 
        System.out.println("Authentication Successful!"); 

       } 

      } catch (DropboxException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

     else if(command.equals("t")){ 

      Scanner tokenScanner = new Scanner(tokensFile);  // Initiate Scanner to read tokens from TOKEN file 
      String ACCESS_TOKEN_KEY = tokenScanner.nextLine(); // Read key 
      String ACCESS_TOKEN_SECRET = tokenScanner.nextLine(); // Read secret 
      tokenScanner.close(); //Close Scanner 

      //Re-auth 
      AccessTokenPair reAuthTokens = new AccessTokenPair(ACCESS_TOKEN_KEY, ACCESS_TOKEN_SECRET); 
      mDBApi.getSession().setAccessTokenPair(reAuthTokens); 
      System.out.println("Re-authentication Sucessful!"); 

      //Run test command 
      System.out.println("Hello there, " + mDBApi.accountInfo().displayName); 

     } 
    } 
} 

最終要與SSL例外:

com.dropbox.client2.exception.DropboxSSLException: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated 
    at com.dropbox.client2.RESTUtility.execute(RESTUtility.java:416) 
    at com.dropbox.client2.RESTUtility.execute(RESTUtility.java:337) 
    at com.dropbox.client2.RESTUtility.streamRequest(RESTUtility.java:192) 
    at com.dropbox.client2.session.WebAuthSession.setUpToken(WebAuthSession.java:218) 
    at com.dropbox.client2.session.WebAuthSession.getAuthInfo(WebAuthSession.java:158) 
    at com.dropbox.client2.session.WebAuthSession.getAuthInfo(WebAuthSession.java:128) 
    at DropboxTest.main(DropboxTest.java:45) 
Caused by: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated 
    at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:397) 
    at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128) 
    at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:399) 
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:143) 
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149) 
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:108) 
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554) 
    at com.dropbox.client2.RESTUtility.execute(RESTUtility.java:385) 
    ... 6 more 
+0

您使用的是什麼版本的Java? – beny23

+0

1.7但1.6給出了相同的錯誤 – tzippy

+0

我剛去https://www.dropbox.com/developers/reference/api,並提出了一個不可信的SSL證書(我使用了Chrome 19),所以這可能是同一個問題。 – beny23

回答