Witam,
Szukam rozwiązania pewnego problemu.
Zapragnąłem użyć serwera WildFly w najnowszej wersji do trzymania ziaren, które będą wywoływane przy pomocy zwykłego nie-webowego klienta.
Chciałbym wykorzystać SSL lub TLS do weryfikacji, że strony komunikacji są prawidłowe, a następnie do obustronnego szyfrowania danych (każda strona powinna szyfrować kluczem publicznym drugiej strony). Następnie klient powinien dokonać uwierzytelnienia na serwerze z użyciem loginu i hasła, które serwer zweryfikuje sobie na serwerze. Ostatni krok, to autoryzacja na podstawie ról użytkowników zapisanych w bazie danych.
I teraz tak...
Serwer ma swój klucz prywatny, a klient ma klucz publiczny serwera. Dzięki temu klient używa TLS do sprawdzenia, czy łączy się z prawdziwym serwerem.
Następnie klient loguje się i serwer poprawnie sprawdza jego dane w bazie. Następuje wywołanie ziarna i zwracana jest odpowiedź. Działa nawet uzależnienie wywołania ziarna od ról wpisanych użytkownikowi w bazie. Brakuje mi elementu z autoryzacją klienta na serwerze (klucz publiczny klienta w magazynie zaufania serwera) no i szyfrowania. Jak na razie, wireshark czyta moje dane, jak z otwartej księgi.
Używam:

<security-realm name="ApplicationRealm">
  <server-identities>
    <ssl>
      <keystore path="server.keystore" relative-to="jboss.server.config.dir" keystore-password="password" alias="testKey"/>
    </ssl>
  </server-identities>
  <authentication>
    <jaas name="other"/>
  </authentication>
</security-realm>

...

<security-domain name="other" cache-type="default">
    <authentication>
      <login-module code="Database" flag="required">
        <module-option name="dsJndiName" value="java:jboss/datasources/testDB"/>
        <module-option name="principalsQuery" value="SELECT haslo FROM uzytkownik WHERE login=?"/>
        <module-option name="rolesQuery" value="SELECT r.rola, 'Roles' FROM rola r INNER JOIN uzytkownik u ON u.id = r.id_uzytkownik WHERE u.login=?"/>
        <module-option name="password-stacking" value="useFirstPass"/>
        <module-option name="hashAlgorithm" value="SHA-256"/>
        <module-option name="hashEncoding" value="base64"/>
        <module-option name="hashCharset" value="utf-8"/>
     </login-module>
   </authentication>
 </security-domain>

Po stronie klienta:

final Properties clientConfigProps = new Properties();
System.setProperty("javax.net.ssl.trustStore", "resources/client.truststore") ;
System.setProperty("javax.net.ssl.trustStorePassword", "password1") ;
clientConfigProps.put("endpoint.name", "client");
clientConfigProps.put("remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED", "true");
clientConfigProps.put("remote.connections", "default");
clientConfigProps.put("remote.connection.default.host", "appserver");
clientConfigProps.put("remote.connection.default.port", "8080");
clientConfigProps.put("remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS", "true");
clientConfigProps.put("remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT", "false");
clientConfigProps.put("remote.connection.default.connect.options.org.xnio.Options.SASL_DISALLOWED_MECHANISMS", "JBOSS-LOCAL-USER");
clientConfigProps.put("remote.connection.default.connect.options.org.xnio.Options.SSL_STARTTLS", "true");
clientConfigProps.put("remote.connection.default.username", "admin");
clientConfigProps.put("remote.connection.default.password", "password");
final EJBClientConfiguration ejbClientConfiguration = new PropertiesBasedEJBClientConfiguration(clientConfigProps);
final ContextSelector<EJBClientContext> ejbClientContextSelector = new ConfigBasedEJBClientContextSelector(ejbClientConfiguration);
EJBClientContext.setSelector(ejbClientContextSelector);
final Properties jndiProperties = new Properties();
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
Context ctx = new InitialContext(jndiProperties);
Bean b = (BeanRemote) ctx.lookup("ejb:App/module-0.0.1-SNAPSHOT/Bean!path.to.BeanRemote");
b.destroyWorld();

Proszę o pomoc, jak to dalej ugryźć.