Я недавно работаю над клиентом Openfire. У меня есть эта странная проблема, которую я до сих пор не мог понять (у меня есть некоторые подсказки, но все еще нет твердого решения).
У нас есть 2 сервера openfire:
- Первое, что мы использовали для тестирования, было размещено на обычном ПК, подключенном к интернету через adsl, сервер находился за NAT, все настроено плавно, работает отлично. Наш клиент подключался без проблем.
- второй (назовем его производственным) профессиональный выделенный сервер, расположенный где-то в Германии с установленной OF, той же ОС, что и на тестовой, с настройкой OF точно так же
Теперь при подключении к продукции от нашего клиента у нас возникла следующая проблема при попытке аутентификации:
javax.net.ssl.SSLException: получено фатальное предупреждение: internal_error
at sun.security.ssl.Alerts.getSSLException (неизвестный источник)
at sun.security.ssl.Alerts.getSSLException (неизвестный источник)
at sun.security.ssl.SSLSocketImpl.recvAlert (неизвестный источник)
at sun.security.ssl.SSLSocketImpl.readRecord (неизвестный источник)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake (неизвестный источник)
at sun.security.ssl.SSLSocketImpl.startHandshake (неизвестный источник)
at sun.security.ssl.SSLSocketImpl.startHandshake (неизвестный источник)
в org.jivesoftware.smack.XMPPConnection.proceedTLSReceived (XMPPConnection.java:806)
в org.jivesoftware.smack.PacketReader.parsePackets (PacketReader.java:267)
в org.jivesoftware.smack.PacketReader.access $ 000 (PacketReader.java:43)
в org.jivesoftware.smack.PacketReader $ 1.run (PacketReader.java:70)
java.lang.IllegalStateException: не подключен к серверу.
в org.jivesoftware.smack.XMPPConnection.sendPacket (XMPPConnection.java:445)
в org.jivesoftware.smack.NonSASLAuthentication.authenticate (NonSASLAuthentication.java:69)
в org.jivesoftware.smack.SASLAuthentication.authenticate (SASLAuthentication.java:352)
в org.jivesoftware.smack.XMPPConnection.login (XMPPConnection.java:203)
на Main.connectToJabber (Main.java:31)
в Main.main (Main.java:16)
Исключение в потоке "main" java.lang.IllegalStateException: Не подключен к серверу.
в org.jivesoftware.smack.XMPPConnection.sendPacket (XMPPConnection.java:445)
в org.jivesoftware.smack.NonSASLAuthentication.authenticate (NonSASLAuthentication.java:69)
в org.jivesoftware.smack.SASLAuthentication.authenticate (SASLAuthentication.java:362)
в org.jivesoftware.smack.XMPPConnection.login (XMPPConnection.java:203)
на Main.connectToJabber (Main.java:31)
в Main.main (Main.java:16)
Теперь самая забавная часть: когда я подключаюсь к производственному серверу с помощью нашего клиента из моей квартиры, я не вижу этой ошибки, когда мы подключаемся к производственной от другой квартиры разработчика, у нас появляется эта ошибка, мы есть разные интернет-провайдеры (я не знаю, может ли это как-то связано с этим).
Мы провели всю ночь, глядя на это и до сих пор не поняли.
Мы написали основной код, чтобы проверить соединение:
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 ... пишет true false,
- При подключении к производственному серверу System.out ... пишет false false
- Пробовал со всеми комбинациями: cc.setCompressionEnabled () cc.setSASLAuthenticationEnabled (); (правда, правда, ложь правда, правда ложь, ложь ложь)
- несмотря на ошибку, пользователь вошел в систему
Подведем итог:
Связь со средой тестирования работает всегда, с производством: с моего места - нет проблем, в другом месте - упомянутая ошибка,
мы используем SMACK API 3.2.1
Одна из идей заключалась в том, что он должен что-то делать с сертификатами.
Любые намеки или идеи высоко ценится