Ошибка входа на сервер vysper

Я делаю vysper xmpp сервер. Вот мой код:

public static void main(String[] args) throws Exception {

    XMPPServer server = new XMPPServer("myserver.org");

    StorageProviderRegistry providerRegistry = new MemoryStorageProviderRegistry();

    AccountManagement accountManagement = (AccountManagement) providerRegistry.retrieve(AccountManagement.class);

    Entity user = EntityImpl.parseUnchecked("user@myserver.org");
    accountManagement.addUser(user, "password");

    server.setStorageProviderRegistry(providerRegistry);

    server.addEndpoint(new TCPEndpoint())

    server.setTLSCertificateInfo(new File("keystore.jks"), "boguspw");

    //server.setTLSCertificateInfo(new File("bogus_mina_tls.cert"), "boguspw");

    server.start();
    System.out.println("Vysper server is running...");

    server.addModule(new EntityTimeModule());
    server.addModule(new VcardTempModule());
    server.addModule(new XmppPingModule());
    server.addModule(new PrivateDataModule());
}

Я пробовал оба файла сертификата. (Keystore.jks,bogus_mina_tls.cert)

После запуска сервера он подключается к нему и пытается войти, но не может войти.

SmackConfiguration.setPacketReplyTimeout (5000);

    config = new ConnectionConfiguration("myserver.org", port, "localhost");
    config.setSelfSignedCertificateEnabled(true);
    config.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);
    config.setSASLAuthenticationEnabled(true);

// config.setKeystorePath ("keystore.jks");

// config.setTruststorePath ("keystore.jks");

    config.setKeystorePath("bogus_mina_tls.cert");
    config.setTruststorePath("bogus_mina_tls.cert");

    config.setTruststorePassword("boguspw");

    XMPPConnection.DEBUG_ENABLED = true;
    connection = new XMPPConnection(config);

    try {
        connection.connect();

    } catch (XMPPException e) {
        System.out.println("Error connect");
        e.printStackTrace();
    }

    System.out.println("Connected: " + connection.isConnected());

    try {
        System.out.println(connection.isAuthenticated());
        connection.login("user", "password");

    } catch (XMPPException e) {
        System.out.println("Error login");
        e.printStackTrace();
    }

Я ловлю это исключение:

Ошибка PLAIN аутентификации SASL: неправильная кодировка: в org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:337) в org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:203) в org.jivesoft.sma Connection.login(Connection.java:348) на com.protocol7.vysper.intro.WorkingClient.init(WorkingClient.java:57) на com.protocol7.vysper.intro.WorkingClient.(WorkingClient.java:27) на ком.protocol7.vysper.intro.Runclient.main(Runclient.java:11)

Я видел эти примеры ( 1-й, 2-й), но они не работают.

1 ответ

Сначала обратите внимание, что сертификат сервера не используется для аутентификации пользователя, он используется для обеспечения безопасного канала связи между клиентом и сервером.

Из журнала вы можете видеть, что ваш метод аутентификации - "SASL PLAIN", используя пользователя и пароль.

На сервере вы устанавливаете имя пользователя / пароль как:

accountManagement.addUser("user@myserver.org", "password");

но на клиенте вы используете

connection.login("user", "password");

Это не согласуется с сообщением об ошибке, которое вы публикуете, но я бы посоветовал вам повторить попытку с правильным именем пользователя и паролем.

Другие вопросы по тегам