Dawid Kulig created DIRMINA-1065:
------------------------------------

             Summary: Stuck on the SSL request
                 Key: DIRMINA-1065
                 URL: https://issues.apache.org/jira/browse/DIRMINA-1065
             Project: MINA
          Issue Type: Bug
    Affects Versions: 2.0.16
         Environment: java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

Linux 8d9ad913fa03 4.4.39-34.54.amzn1.x86_64 #1 SMP Fri Dec 30 19:11:28 UTC 
2016 x86_64 x86_64 x86_64 GNU/Linux
            Reporter: Dawid Kulig


I am having troubles with Apache MINA core library. When I deploy my 
application to a remote server some of the requests are not processed (around 
2%). It looks like there might be a problem with SSL.

When request is not being processed, it is always stuck on:

{code}org.apache.mina.filter.ssl.SslFilter  - Session Server[40](ssl...): 
Processing the SSL Data{code}

{code:title=full request log tail}
Feb 28 14:18:12 ip-172-31-55-130 docker/56215cf75435[2788]: 2017-02-28 
14:18:12,081 [NioProcessor-5] DEBUG org.apache.mina.filter.ssl.SslFilter  - 
Adding the SSL Filter sslFilter to the chain
Feb 28 14:18:12 ip-172-31-55-130 docker/56215cf75435[2788]: 2017-02-28 
14:18:12,081 [NioProcessor-5] DEBUG org.apache.mina.filter.ssl.SslHandler  - 
Session Server[40](no sslEngine) Initializing the SSL Handler
Feb 28 14:18:12 ip-172-31-55-130 docker/56215cf75435[2788]: 2017-02-28 
14:18:12,082 [NioProcessor-5] DEBUG org.apache.mina.filter.ssl.SslHandler  - 
Session Server[40](no sslEngine) SSL Handler Initialization done.
Feb 28 14:18:12 ip-172-31-55-130 docker/56215cf75435[2788]: 2017-02-28 
14:18:12,082 [NioProcessor-5] DEBUG org.apache.mina.filter.ssl.SslFilter  - 
Session Server[40](ssl...) : Starting the first handshake
Feb 28 14:18:12 ip-172-31-55-130 docker/56215cf75435[2788]: 2017-02-28 
14:18:12,082 [NioProcessor-5] DEBUG org.apache.mina.filter.ssl.SslHandler  - 
Session Server[40](ssl...) processing the NEED_UNWRAP state
Feb 28 14:18:12 ip-172-31-55-130 docker/56215cf75435[2788]: 2017-02-28 
14:18:12,082 [pool-7-thread-10] DEBUG 
org.apache.mina.core.filterchain.IoFilterEvent  - Firing a SESSION_OPENED event 
for session 40
Feb 28 14:18:12 ip-172-31-55-130 docker/56215cf75435[2788]: 2017-02-28 
14:18:12,082 [pool-7-thread-10] INFO com.myapp.Handler  - Session opened for ip 
/x.x.x.x:59558. There are 1 online clients now
Feb 28 14:18:12 ip-172-31-55-130 docker/56215cf75435[2788]: 2017-02-28 
14:18:12,082 [pool-7-thread-10] DEBUG 
org.apache.mina.core.filterchain.IoFilterEvent  - Event SESSION_OPENED has been 
fired for session 40
Feb 28 14:18:12 ip-172-31-55-130 docker/56215cf75435[2788]: 2017-02-28 
14:18:12,087 [NioProcessor-5] DEBUG org.apache.mina.filter.ssl.SslFilter  - 
Session Server[40](ssl...): Message received : HeapBuffer[pos=0 lim=200 
cap=2048: 16 03 03 00 C3 01 00 00 BF 03 03 58 B5 86 A4 02...]
Feb 28 14:18:12 ip-172-31-55-130 docker/56215cf75435[2788]: 2017-02-28 
14:18:12,087 [NioProcessor-5] DEBUG org.apache.mina.filter.ssl.SslHandler  - 
Session Server[40](ssl...) Processing the received message
Feb 28 14:18:12 ip-172-31-55-130 docker/56215cf75435[2788]: 2017-02-28 
14:18:12,087 [NioProcessor-5] DEBUG org.apache.mina.filter.ssl.SslHandler  - 
Session Server[40](ssl...) processing the NEED_UNWRAP state
Feb 28 14:18:12 ip-172-31-55-130 docker/56215cf75435[2788]: 2017-02-28 
14:18:12,087 [NioProcessor-5] DEBUG org.apache.mina.filter.ssl.SslHandler  - 
Session Server[40](ssl...) processing the NEED_TASK state
Feb 28 14:18:12 ip-172-31-55-130 docker/56215cf75435[2788]: 2017-02-28 
14:18:12,096 [NioProcessor-5] DEBUG org.apache.mina.filter.ssl.SslHandler  - 
Session Server[40](ssl...) processing the NEED_WRAP state
Feb 28 14:18:12 ip-172-31-55-130 docker/56215cf75435[2788]: 2017-02-28 
14:18:12,096 [NioProcessor-5] DEBUG org.apache.mina.filter.ssl.SslFilter  - 
Session Server[40](ssl...): Writing Message : WriteRequest: HeapBuffer[pos=0 
lim=1327 cap=2115: 16 03 03 05 2A 02 00 00 4D 03 03 58 B5 86 A4 A6...]
Feb 28 14:18:12 ip-172-31-55-130 docker/56215cf75435[2788]: 2017-02-28 
14:18:12,096 [NioProcessor-5] DEBUG org.apache.mina.filter.ssl.SslHandler  - 
Session Server[40](ssl...) processing the NEED_UNWRAP state
Feb 28 14:18:12 ip-172-31-55-130 docker/56215cf75435[2788]: 2017-02-28 
14:18:12,096 [NioProcessor-5] DEBUG org.apache.mina.filter.ssl.SslFilter  - 
Session Server[40](ssl...): Processing the SSL Data
{code}

My application was recently using apache-mina 2.0.7. I thought upgrading the 
MINA core to 2.0.16 might help, but it didn't. 
My another observation is that, this is not happening on my local environment 
(MacOS) only on the remote Amazon server. 

Please find below part of the server-side code: 

{code}
@Provides
    ProtocolCodecFilter providesCodecFilter(ResponseProtoEncoder encoder, 
RequestProtoDecoder decoder) {
        return new ProtocolCodecFilter(encoder, decoder);
    }

    @Provides
    KeyStore providesKeyStore() throws NoSuchProviderException, 
NoSuchAlgorithmException, KeyStoreException, CertificateException, IOException {
        if(keystoreName == null)
            return null;
        KeyStoreFactory f = new KeyStoreFactory();
        
f.setDataUrl(this.getClass().getClassLoader().getResource(keystoreName));
        f.setPassword(keystorePassword);
        return f.newInstance();
    }

    @Provides
    SSLContext providesSslContext(KeyStore keyStore) throws Exception {
        if(keyStore == null)
            return null;
        SslContextFactory f = new SslContextFactory();
        
f.setKeyManagerFactoryAlgorithm(KeyManagerFactory.getDefaultAlgorithm());
        
f.setTrustManagerFactory(TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()));
        f.setTrustManagerFactoryKeyStore(keyStore);
        f.setKeyManagerFactoryKeyStore(keyStore);
        f.setKeyManagerFactoryKeyStorePassword(keyPassword);
        return f.newInstance();
    }

    @Provides @Singleton
    SslFilter providesSslFilter(SSLContext sslContext) {
        if(sslContext == null)
            return null;
        SslFilter sslFilter = new SslFilter(sslContext);
        if(needClientAuth)
            sslFilter.setNeedClientAuth(true);
        return sslFilter;
    }

    @Provides
    IoFilterChainBuilder 
providesDefaultIoFilterChainBuilder(ProtocolCodecFilter codecFilter, SslFilter 
sslFilter) {
        DefaultIoFilterChainBuilder res = new DefaultIoFilterChainBuilder();
        Map<String, IoFilter> filters = new LinkedHashMap<String, IoFilter>();
        if(sslFilter != null)
            filters.put("sslFilter", sslFilter);
        filters.put("codecFilter", codecFilter);
        filters.put("executorFilter", new ExecutorFilter(new 
UnorderedThreadPoolExecutor()));
        res.setFilters(filters);
        return res;
    }

    @Provides @Singleton
    SocketAcceptor providesSocketAcceptor(InetSocketAddress addr, IoHandler 
handler, IoFilterChainBuilder filterChainBuilder) throws IOException {
        SocketAcceptor res = new NioSocketAcceptor();
        res.setDefaultLocalAddress(addr);
        res.setFilterChainBuilder(filterChainBuilder);
        res.setHandler(handler);
        res.setReuseAddress(true);
        res.setCloseOnDeactivation(true);
        res.bind();
        return res;
    }
{code}
Any kind of help would be much appreciated!





--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to