I think I figured it out.  I had to add another server side ejbd
configuration.  If I pass -Dejbd.discovery="ejb:ejbds://{bind}:{port}" to
the JVM on the server side (in addition to -Dejbd.secure=true), then the
server properly replies back to the client with a ClusterResponse containing
ejbds.  Subsequent EJB calls, etc, work fine.



bitz wrote:
> 
> The server side of OpenEJB is responding with a different protocol than
> the client is using.  The OpenEJB client side class Client, in it's
> processRequest() method, as part of the handshake with the server, is
> sending a ClusterRequest object to the server.  The CluserRequest object
> contains the correct URI, "ejbds://127.0.0.1:4201", but when the server
> responds with a ClusterResponse object later in the processRequest()
> method, the URI is "ejbd:0.0.0.0:4201".  This URI's protocol, ejbd, is
> then used for all future connections to the server, which fails, as noted
> in the last post.
> 
> Is OpenEJB's support of SSL incomplete?
> 
> Thanks in advance.
> 
> 
> bitz wrote:
>> 
>> I figured out a way to set the server side 'secure' boolean on
>> ServerDaemon.  I can pass -Dejbd.secure=true to the JVM.  Not sure if
>> this is the correct way to do it, but it gets me a little further.  The
>> client ctx.lookup() is successful, so the client connects to the server
>> ok, at least once.  On the subsequent call to my remote method,
>> remote.getServerTime(), the OpenEJB client code no longer knows that the
>> connection should be ejbds.  It's reverting to ejbd, and creates a
>> standard Socket instead of SSLSocket.  The remote method call fails. 
>> I'll keep debugging, but it looks like there might be a defect somewhere,
>> unless I'm doing something wrong.
>> 
>> 
>> 
>> bitz wrote:
>>> 
>>> I'm using a snapshot of geronimo 2.2 which uses OpenEJB 3.1.2.  I'm
>>> writing a test application to try out ejbds, which provides support for
>>> OpenEJB client-server communications over SSL. According to these, 
>>> 
>>> http://www.nabble.com/EJBd-protocol-over-SSL-td22188312.html
>>> http://issues.apache.org/jira/browse/OPENEJB-785
>>> 
>>> it should work.  I'm running the client and Geronimo on the same
>>> machine.  Here's my client code,
>>> 
>>> final URI serverURI = new URI( "ejbds", null, "127.0.0.1", 4201, null,
>>> null, null );
>>> final Properties contextProperties = new Properties( );
>>> contextProperties.put( Context.INITIAL_CONTEXT_FACTORY,
>>> "org.apache.openejb.client.RemoteInitialContextFactory" );
>>> contextProperties.put( Context.PROVIDER_URL, serverURI.toString( ) );
>>> contextProperties.put("ejbd.secure", "true"); 
>>>             
>>> final InitialContext ctx = new InitialContext( contextProperties );
>>> final MyEjbService remote = (MyEjbService)ctx.lookup("MyEjbRemote");
>>> final String serverTime = remote.getServerTime();
>>> System.out.println("server time: " + serverTime);
>>> 
>>> The OpenEJB client code is detecting "ejbds" as the protocol and
>>> creating an SSLSocket, but the client fails on the ctx.lookup() call.  
>>> 
>>> java.lang.RuntimeException: Invalid response from server: -1
>>> at org.apache.openejb.client.JNDIContext.lookup(JNDIContext.java:277)
>>> at javax.naming.InitialContext.lookup(InitialContext.java:392)
>>> ...
>>> 
>>> The geronimo.log server-side shows,
>>> 
>>> java.io.IOException: Unexpected byte 128
>>> at
>>> org.apache.openejb.server.ejbd.KeepAliveServer$Session.service(KeepAliveServer.java:221)
>>> at
>>> org.apache.openejb.server.ejbd.KeepAliveServer.service(KeepAliveServer.java:233)
>>> at org.apache.openejb.server.ejbd.EjbServer.service(EjbServer.java:66)
>>> ...
>>> 
>>> When I dig into the OpenEjb server code, ServerDaemon.java, it appears
>>> to need a "secure" property to be set to true.  When I debug the code,
>>> ServerDaemon.java configures the socket listener when the GBean starts,
>>> then never again, so I'm not sure how this is supposed to work. Using
>>> contextProperties.put("ejbd.secure", "true") on the client side has no
>>> effect.  And I can't find a way to set the 'secure' attribute in
>>> Geronimo's config.xml.  Geronimo fails to start, complaining that
>>> 'secure' is unrecognized when I add it as an attribute to
>>> EJBNetworkService.
>>> 
>>> One of the links above mentions doing
>>> properties.setProperty("ejbd.secure", "true") on the server side, but
>>> where/how would I do that?
>>> 
>>> What am I missing?
>>> 
>>> Any help would be appreciated.
>>>  
>>> 
>> 
>> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/OpenEJB-over-SSL-tp26034601p26083500.html
Sent from the OpenEJB User mailing list archive at Nabble.com.

Reply via email to