2012-01-14 24 views
2

最近Openfireクライアントで作業しています。私はこれまでに分かりませんでした(私はいくつかの手がかりを持っていますが、まだ固い解決策はありません)というこの奇妙な問題を抱えています。 我々は2台のopenfireサーバを持っている:java-smackクライアントからOpenfireに接続する際のSSLエラー

我々はそれがADSL経由でインターネットにconected通常のPC上でホストされたテストのために使用していたことを
  • まず、サーバは、すべてが完璧に働いて、スムーズに構成された、NATの後ろにいました。私たちのクライアントは問題なく接続していました。 、instaledから生産への接続時に

今まったく同じように設定し、試験1の場合と同じOS、OF OFと

  • 二ドイツのどこかにあるプロ専用サーバーを(の生産にそれを呼びましょう)私たちの

    javax.net.ssl.SSLException:受信致命的なアラートを: INTERNAL_ERROR sun.security.ssl.Alerts.getSSLException(不明なソース) でsun.securityで認証しようとしたとき、クライアント我々はこの問題を次のようexperianced。 ssl.Alerts.getSSLException(不明なソース) Sun.security.ssl.SSLSocketImpl.recvAlert(不明なソース) at sun.security.ssl.SSLSocketImpl.readRecord(不明なソース) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(不明なソース) at sun.security org.jivesoftware.smackでorg.jivesoftware.smack.XMPPConnection.proceedTLSReceived(XMPPConnection.java:806) でsun.security.ssl.SSLSocketImpl.startHandshake(不明なソース) で.ssl.SSLSocketImpl.startHandshake(不明なソース) .PacketReader.parsePackets(PacketReader.java:267) at org.jivesoftware.smack.PacketReader.access $ 000(PacketReader.java:43) at org.jivesoftware.smack.PacketReader $ 1.run(PacketReader.java:70) java.lang.IllegalStateException:サーバーに接続されていません。 org.jivesoftware.smack.XMPPConnection.sendPacket(XMPPConnection.java:445)org.jivesoftware.smack.SASLAuthentication.authenticateでorg.jivesoftware.smack.NonSASLAuthentication.authenticate(NonSASLAuthentication.java:69) で(SASLAuthenticationで 。 java:352) at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:203) at Main.connectToJabber(Main.java:31) at Main.main(Main.java:16) スレッド内の例外"main" java.lang.IllegalStateException:サーバーに接続されていません。 org.jivesoftware.smack.XMPPConnection.sendPacket(XMPPConnection.java:445)org.jivesoftware.smack.SASLAuthentication.authenticateでorg.jivesoftware.smack.NonSASLAuthentication.authenticate(NonSASLAuthentication.java:69) で(SASLAuthenticationで 。 Javaの:Main.connectToJabber Main.mainで(Main.java:31) (Main.java:16)

    でorg.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:203) で362)

    ここで一番面白いのは、私のフラットからクライアントを使ってプロダクションサーバに接続すると、そのエラーは表示されません。他の開発者のフラットからプロダクションに接続すると、このエラーが発生します。違うインターネットプロバイダ(私はそれがそれと関係があるかもしれないかどうか分からない)。 私たちはそれを見て一晩中過ごしましたが、これまでのところ何の手がかりもありませんでした。 私達はちょうど接続を確認するための基本的なコードを書いた:

    public static void connect() { 
        ConnectionConfiguration cc = new ConnectionConfiguration("prod ip", 
          5222); 
        cc.setCompressionEnabled(true); 
        cc.setSASLAuthenticationEnabled(true); 
        Connection connection = new XMPPConnection(cc); 
        try { 
         connection.connect(); 
         connection.login(login, pass, "resource"); 
         System.out.println(connection.isSecureConnection() + " " + connection.isUsingCompression()); 
    
        } catch (XMPPException e1) { 
         e1.getStackTrace(); 
        } 
    } 
    

    いくつかの所見:

    • をラインconnection.login(...)はそう何がエラーの原因となっている、エラーがない、コメントしたときそこに本番サーバに接続するのSystem.out ...が偽書き込むとき
    • テストサーバーを接続するのSystem.out ...偽の真の書き込み、
    • が偽
    • が試されますcc.setCompressionEnabled()cc.setSASLAuthenticationEnabled();すべての組み合わせは次のとおりです。 (真、真、偽真真偽偽偽)
    • エラーにもかかわらず、ユーザーは要約する に記録されます。テスト環境で

    接続を生産して、常に動作します:私の場所から - 問題なく、他の場所に記載されているエラー、 を使用していますSMACK API 3.2.1

    アイデアの1つは証明書で何かをしなければならないということでした。非常に

  • +0

    これを確認してください:http://community.igniterealtime.org/thread/42807 – home

    +0

    私はすでにしましたが、この質問はあなたが見ることができるように答えられていません(またはしていない) – Stugal

    +0

    あなたは ' 'connect'と' login'の間で 'スリープ'しようとしましたか?これは回避策でも同じ問題を抱えている可能性があります。 – home

    答えて

    1

    をにappriciated

    任意のヒントやアイデアはたぶんconnect()login()コールの間sleep(x)は、この問題を解決することができます。 sleep()は数秒で十分です。 Source

    +0

    はい、それは解決策ですが、xは変化し、ケースごとにチェックする必要があります – Stugal

    2

    悪い悪い解決策!接続速度がわからないし、接続が早い時期に確立されていれば、あなたのアプリがログインを続けるのを止めるからです。 私が今提供できる解決策はaddConnectionListenerで、 'reconnectionSuccessful()'関数でlogin()と呼んでください。この関数は、接続が切断されて接続された直後ではなく、初めて呼び出すことを望みます。もしそうでなければ、スワックライブラリの悪いアーキテクチャを示しています。

    0

    私もconnect()の後にスリープを使用しています...それは理想的ではありませんが、信頼できる回避策です。

    関連する問題