2011-02-05 2 views
1

Я написал приложение Java, которое я запуская с помощью следующей команды:com.google.gdata.util.AuthenticationException: Ошибка соединения с логином URI

java -jar MyApp.jar 

Приложение использует библиотеки GData Java Google, чтобы отредактировать Google Spreadsheet. Когда я запускаю это приложение с моего Mac, он работает нормально. Однако мне нужно запустить его на моем выделенном сервере. Когда я загрузить его туда и попытаться запустить его, я получаю следующее сообщение об ошибке:

$ java -jar MyApp.jar 
com.google.gdata.util.AuthenticationException: Error connecting with login URI 
    at com.google.gdata.client.GoogleAuthTokenFactory.getAuthToken(GoogleAuthTokenFactory.java:489) 
    at com.google.gdata.client.GoogleAuthTokenFactory.setUserCredentials(GoogleAuthTokenFactory.java:346) 
    at com.google.gdata.client.GoogleService.setUserCredentials(GoogleService.java:362) 
    at com.google.gdata.client.GoogleService.setUserCredentials(GoogleService.java:317) 
    at org.graalcenter.stats.bot.GraalStatBot.main(GraalStatBot.java:42) 
Caused by: javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty 
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:208) 
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1611) 
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1574) 
    at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1557) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1150) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1127) 
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:423) 
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) 
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:850) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250) 
    at com.google.gdata.client.GoogleAuthTokenFactory.makePostRequest(GoogleAuthTokenFactory.java:551) 
    at com.google.gdata.client.GoogleAuthTokenFactory.getAuthToken(GoogleAuthTokenFactory.java:487) 
    ... 4 more 
Caused by: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty 
    at sun.security.validator.PKIXValidator.(PKIXValidator.java:75) 
    at sun.security.validator.Validator.getInstance(Validator.java:178) 
    at sun.security.ssl.X509TrustManagerImpl.getValidator(X509TrustManagerImpl.java:129) 
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:225) 
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:270) 
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:973) 
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:142) 
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:533) 
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:471) 
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:904) 
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1116) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1143) 
    ... 11 more 
Caused by: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty 
    at java.security.cert.PKIXParameters.setTrustAnchors(PKIXParameters.java:200) 
    at java.security.cert.PKIXParameters.(PKIXParameters.java:120) 
    at java.security.cert.PKIXBuilderParameters.(PKIXBuilderParameters.java:104) 
    at sun.security.validator.PKIXValidator.(PKIXValidator.java:73) 
    ... 22 more 

Это код, который вызывает ошибку:

public static void main(String[] args) { 
     FeedURLFactory factory = FeedURLFactory.getDefault(); 
     SpreadsheetService service = new SpreadsheetService("my-app"); 

     try { 
      service.setUserCredentials(USER_NAME, USER_PASSWORD, ACCOUNT_TYPE); 
     } catch (AuthenticationException ex) { 
      ex.printStackTrace(); 
      System.exit(0); 
     } 
    }

Я попытался погуглить ошибку, и это предполагает что он часто вызван прокси; однако я не за прокси-сервером на моем выделенном сервере. Другие приложения Java, которые я написал, отлично работают с сетью.

Любые идеи, как исправить это? Вся помощь приветствуется. Благодаря!

ответ

1

Вы получаете сообщение об ошибке, скорее всего, потому, что на вашем сервере отсутствует файл хранилища доверия, который содержит сертификаты SSL, или содержит что-то недействительное.

Попробуйте это:

  • На сервере: найти/-name jssecacerts
  • На сервере: поиск/-name cacerts
  • Возьмите записку на пути эти файлы находятся в Move. эти файлы где-то, т.е. to/tmp/
  • Скопируйте свой файл доверия из imac (возможно /Library/Java/JavaVirtualMachines/1.6.0_22-b04-307.jdk/Contents/Home/lib/security/cacerts) на ваш сервер, на путь вы видели ранее
  • Retry приложение

Также вы можете проверять файлы на обоих компьютерах с помощью утилиты Keytool (см JSSE Reference Guide для получения дополнительной информации) и сравнить их различия.