2014-02-05 7 views
0

다음 참조를 취하는 아파치 미나에서 startTLS를 구현하려고합니다. 다음과 같이 http://mina.apache.org/mina-project/apidocs/org/apache/mina/filter/ssl/SslFilter.html클라이언트 측 인증이없는 아파치 미나에서 startTLS

내 코드는 다음과 같습니다

@Override 공공 무효 messageReceived이 (IoSession 세션이, 개체 메시지)가 발생 예외 {

jsonparser (MSG)를;

if (condition) { 
    startTLS(); 

}}

SslFilter sslFilter; 공공 무효 startTLS에() {

try { 
    SSLContext sslContext = SSLContext.getInstance("TLSv1");    
    sslContext.init(null, null, new SecureRandom());  

    sslFilter = new SslFilter(sslContext); 
    sslFilter.setUseClientMode(true); 
    sslFilter.setNeedClientAuth(false); 
    session.getFilterChain().addFirst("mySSL", sslFilter);  
    session.setAttribute(SslFilter.DISABLE_ENCRYPTION_ONCE, Boolean.TRUE); 
    assert session.getAttribute(SslFilter.DISABLE_ENCRYPTION_ONCE) == null; 
} catch (Exception e) { 
    e.printStactTrace(); 

}

}

내가 JSON을 사용하여 물건을 넣어하려합니다. 그래서 내가받은 모든 메시지는 JSON 라이브러리로 파싱됩니다. 협상 메시지는 다음과 같습니다 SESSION_UNSECURED 추적 추적은 다음과 같다 :

02-05 12:50:20.365: W/System.err(994): Unexpected character (S) at position 0. 
02-05 12:50:20.374: W/System.err(994):  at org.json.simple.parser.Yylex.yylex(Yylex.java:610) 
02-05 12:50:20.394: W/System.err(994):  at org.json.simple.parser.JSONParser.nextToken(JSONParser.java:269) 
02-05 12:50:20.394: W/System.err(994):  at org.json.simple.parser.JSONParser.parse(JSONParser.java:118) 
02-05 12:50:20.404: W/System.err(994):  at org.json.simple.parser.JSONParser.parse(JSONParser.java:81) 
02-05 12:50:20.444: W/System.err(994):  at org.json.simple.parser.JSONParser.parse(JSONParser.java:75) 
02-05 12:50:20.444: W/System.err(994):  at network.com.parse(com.java:146) 
02-05 12:50:20.444: W/System.err(994):  at network.com.messageReceived(com.java:106) 
02-05 12:50:20.474: W/System.err(994):  at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:690) 
02-05 12:50:20.474: W/System.err(994):  at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417) 
02-05 12:50:20.474: W/System.err(994):  at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:47) 
02-05 12:50:20.474: W/System.err(994):  at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:765) 
02-05 12:50:20.487: W/System.err(994):  at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:214) 
02-05 12:50:20.494: W/System.err(994):  at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417) 
02-05 12:50:20.494: W/System.err(994):  at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:47) 
02-05 12:50:20.514: W/System.err(994):  at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:765) 
02-05 12:50:20.514: W/System.err(994):  at org.apache.mina.filter.ssl.SslHandler.flushScheduledEvents(SslHandler.java:322) 
02-05 12:50:20.524: W/System.err(994):  at org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:497) 
02-05 12:50:20.524: W/System.err(994):  at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417) 
02-05 12:50:20.524: W/System.err(994):  at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:47) 
02-05 12:50:20.524: W/System.err(994):  at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:765) 
02-05 12:50:20.556: W/System.err(994):  at org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:109) 
02-05 12:50:20.564: W/System.err(994):  at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417) 
02-05 12:50:20.564: W/System.err(994):  at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:410) 
02-05 12:50:20.574: W/System.err(994):  at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:710) 
02-05 12:50:20.574: W/System.err(994):  at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:664) 
02-05 12:50:20.604: W/System.err(994):  at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:653) 
02-05 12:50:20.604: W/System.err(994):  at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPollingIoProcessor.java:67) 
02-05 12:50:20.604: W/System.err(994):  at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1124) 
02-05 12:50:20.614: W/System.err(994):  at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64) 
02-05 12:50:20.614: W/System.err(994):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
02-05 12:50:20.614: W/System.err(994):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
02-05 12:50:20.625: W/System.err(994):  at java.lang.Thread.run(Thread.java:841) 

미리 감사드립니다.

답변

0

마지막으로 작동합니다. 구현은 다음과 같습니다.

public void startTLS() { 

    try { 
     sslContext = SSLContext.getInstance("TLS"); 
     sslContext.init(null, trustAllCerts, null); 
    } catch(NoSuchAlgorithmException nsa) { 
     System.out.println("Exception : No Such Algorithm"); 
    } catch(KeyManagementException kme) { 
     System.out.println("Exception : KeyManagementException:"); 
    }//try-catch 


    IoFilterChain chain = session.getFilterChain(); 
    SslFilter sslFilter = (SslFilter) chain.get("sslFilter"); 

    if (sslFilter == null) { 
     sslFilter = new SslFilter(sslContext); 
     sslFilter.setUseClientMode(true); 
     if ((cipherSuites != null) && !cipherSuites.isEmpty()) { 
      sslFilter.setEnabledCipherSuites(cipherSuites.toArray(new String[cipherSuites.size()])); 
     } 

     chain.addFirst("sslFilter", sslFilter); 

    }else { 
     try { 
      sslFilter.startSsl(this.session); 
     } catch(SSLException se) { 
      System.out.println("SslException:"+se); 
     } 
    }//if-else 

}//startTLS 

내가 실수를하면 pls에게 알려주세요.

안내해 주신 Emmanuel Lécharny에게 감사드립니다.