1

次のコマンドで起動する Java アプリケーションを作成しました。

java -jar MyApp.jar

このアプリケーションは、Google の GData Java ライブラリを使用して Google スプレッドシートを編集します。このアプリケーションを 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 アプリケーションは、ネットワークで正常に動作します。

これを修正する方法はありますか?すべての助けに感謝します。ありがとう!

4

1 に答える 1

1

SSL証明書を保持するトラストストアファイルがサーバーにないか、無効なものが含まれていることが原因で、エラーが発生している可能性があります。

これを試してみてください:

  • サーバー上:find / -name jssecacerts
  • サーバー上:find / -name cacerts
  • これらのファイルが存在するパスに注意してください。これらのファイルをどこかに移動します。/tmp/へ
  • トラストストアファイルをimac(おそらく/Library/Java/JavaVirtualMachines/1.6.0_22-b04-307.jdk/Contents/Home/lib/security/cacerts)からサーバーに、前に見たパスにコピーします
  • アプリケーションを再試行してください

また、keytoolユーティリティを使用して両方のコンピュータのファイルを検査し(詳細については、JSSEリファレンスガイドを参照)、それらの違いを比較することもできます。

于 2011-02-05T22:07:58.493 に答える