使用Dropbox的Java API:DropboxSSLException:javax.net.ssl.SSLPeerUnverifiedException:对端未验证

我想使用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

回答:

想通了。我在OSX上使用OpenJDK。 我跑了JVM与-Djavax.net.debug=ssl进行调试,最终以root的例外是

java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty 

经过一番研究,我发现这里的解决方案: http://architecturalatrocities.com/post/19073788679/fixing-the-trustanchors-problem-when-running-openjdk-7

现在工作好!

以上是 使用Dropbox的Java API:DropboxSSLException:javax.net.ssl.SSLPeerUnverifiedException:对端未验证 的全部内容, 来源链接: utcz.com/qa/265544.html

回到顶部