I blogged recently about configuring SSL for Jetty based CXF services using 
Java APIs here.
http://aruld.info/programming-ssl-for-jetty-based-cxf-services/

The sample is all Apache licensed. So, feel free to use.

-Arul

  _____  

From: Arul Dhesiaseelan [mailto:[EMAIL PROTECTED]
To: [email protected]
Sent: Wed, 23 Jul 2008 13:40:25 -0600
Subject: Re: CXF ssl sample using CXF APIs

Glen,
  
  Created a JIRA report for this issue 
  (https://issues.apache.org/jira/browse/CXF-1718).
  
  Thanks!
  Arul
  
  Glen Mazza wrote:
  > Good to hear.  About the Java API issue, feel free to type up a JIRA report
  > on it.  Attach this thread to it:
  > http://www.nabble.com/CXF-ssl-sample-using-CXF-APIs-tt18570914.html
  >
  > Glen
  >
  >
  > Arul Dhesiaseelan wrote:
  >   
  >> Glen,
  >>
  >> Thanks for all your help. I appreciate your inputs.
  >>
  >> I did a quick test using the spring-configs and embedded Jetty server 
  >> (JaxWsServerFactoryBean). It worked like a charm. CXF uses Jetty SSL 
  >> connector to support SSL (CXFJettySslSocketConnector).
  >>
  >> My only gut feeling says if embedded Jetty supports SSL using 
  >> spring-config, it should support Java APIs as well.
  >>
  >> -Arul
  >>
  >> Glen Mazza wrote:
  >>     
  >>> Actually, we may not be able to support SSL with embedded Jetty
  >>> anyway--look
  >>> at this thread, as well as a J2SE 6.0 based alternative solution:
  >>>
  >>> 
http://www.nabble.com/Help-needed-for-SSL-and-Basic-authentication-tt17761832.html
  >>>
  >>> HTH,
  >>> Glen
  >>>
  >>>
  >>> Glen Mazza wrote:
  >>>   
  >>>       
  >>>> While I hope others can help you with your problem, if you want to use
  >>>> SSL, I suspect you'd be better off with a standalone container[1]
  >>>> anyway--WAR file, web.xml, all that good stuff--this way at least you
  >>>> know
  >>>> what you're coding on top of.  I just haven't researched SSL over
  >>>> embedded
  >>>> Jetty containers.
  >>>>
  >>>> Glen
  >>>>
  >>>> [1] http://www.jroller.com/gmazza/entry/setting_up_ssl_and_basic
  >>>>
  >>>>
  >>>> Arul Dhesiaseelan wrote:
  >>>>     
  >>>>         
  >>>>> Can someone look into this pls?
  >>>>>
  >>>>> I am close to making this work. But, figuring out what could be wrong
  >>>>> is 
  >>>>> still a puzzle to me.
  >>>>>
  >>>>> Thank you,
  >>>>> Arul
  >>>>>
  >>>>> Arul Dhesiaseelan wrote:
  >>>>>       
  >>>>>           
  >>>>>> Hello,
  >>>>>>
  >>>>>> I did some debugging using CXF 2.1.1 sources. I see the problem in 
  >>>>>> line 201 in JettyHTTPServerEngineFactory.createJettyHTTPServerEngine() 
  >>>>>> where it makes a call to ref.finalizeConfig().
  >>>>>>
  >>>>>> In JettyHTTPServerEngine.finalizeConfig(), it calls method 
  >>>>>> retrieveListenerFactory(). In this method the "tlsServerParameters" is 
  >>>>>> null so the protocol is defaulted to "http" and finally throws the 
  >>>>>> exception.
  >>>>>>
  >>>>>> This tells me that I am not correctly setting the TLSServerParameters 
  >>>>>> to the JettyHTTPServerEngine in my code in the correct order. Or, I am 
  >>>>>> not creating the JettyHTTPServerEngine instance properly.
  >>>>>>
  >>>>>> Does some one help me if I am missing something here?
  >>>>>>
  >>>>>> Appreciate your help.
  >>>>>>
  >>>>>> -Arul
  >>>>>>
  >>>>>> Arul Dhesiaseelan wrote:
  >>>>>>         
  >>>>>>             
  >>>>>>> Hello,
  >>>>>>>
  >>>>>>> I was trying to use CXF APIs to configure SSL on the service. But, I 
  >>>>>>> am getting an illegal state exception: Port 9001 is configured with 
  >>>>>>> wrong protocol "http" for "https://localhost:9001/hello";
  >>>>>>>
  >>>>>>>    JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean();
  >>>>>>>    sf.setServiceClass(HelloWorld.class);      
  >>>>>>> sf.getServiceFactory().setWrapped(true);
  >>>>>>>
  >>>>>>>    QName name = new QName("http://test.com";, "ws", "");
  >>>>>>>    sf.setServiceName(name);
  >>>>>>>    sf.setAddress("https://localhost:9001/hello";);
  >>>>>>>
  >>>>>>>    HelloWorld helloService = new HelloWorldImpl();
  >>>>>>>
  >>>>>>>    sf.getServiceFactory().setInvoker(new BeanInvoker(helloService));
  >>>>>>>    //org.apache.cxf.endpoint.Server server = sf.create();
  >>>>>>>
  >>>>>>>    JettyHTTPServerEngineFactory factory = 
  >>>>>>> sf.getBus().getExtension(JettyHTTPServerEngineFactory.class);
  >>>>>>>
  >>>>>>>    TLSServerParameters tlsParams = new TLSServerParameters();
  >>>>>>>    JettyHTTPServerEngine engine = null;
  >>>>>>>    try {
  >>>>>>>      engine = factory.createJettyHTTPServerEngine(9001, "https");
  >>>>>>>      KeyStore keyStore = KeyStore.getInstance("JKS");
  >>>>>>>      String trustpass = "password";
  >>>>>>>      File truststore = new 
  >>>>>>> 
File("C:\\apache-cxf-2.1.1\\samples\\wsdl_first_https\\certs\\cherry.jks"); 
  >>>>>>>
  >>>>>>>      keyStore.load(new FileInputStream(truststore), 
  >>>>>>> trustpass.toCharArray());
  >>>>>>>      KeyManagerFactory keyFactory = 
  >>>>>>> 
KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
  >>>>>>>      keyFactory.init(keyStore, trustpass.toCharArray());
  >>>>>>>      KeyManager[] km = keyFactory.getKeyManagers();
  >>>>>>>      tlsParams.setKeyManagers(km);
  >>>>>>>
  >>>>>>>      truststore = new 
  >>>>>>> 
File("C:\\apache-cxf-2.1.1\\samples\\wsdl_first_https\\certs\\truststore.jks"); 
  >>>>>>>
  >>>>>>>      keyStore.load(new FileInputStream(truststore), 
  >>>>>>> trustpass.toCharArray());
  >>>>>>>      TrustManagerFactory trustFactory = 
  >>>>>>> 
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
  >>>>>>>
  >>>>>>>      trustFactory.init(keyStore);
  >>>>>>>      TrustManager[] tm = trustFactory.getTrustManagers();
  >>>>>>>      tlsParams.setTrustManagers(tm);
  >>>>>>>      FiltersType filter = new FiltersType();
  >>>>>>>      filter.getInclude().add(".*_EXPORT_.*");
  >>>>>>>      filter.getInclude().add(".*_EXPORT1024_.*");
  >>>>>>>      filter.getInclude().add(".*_WITH_DES_.*");
  >>>>>>>      filter.getInclude().add(".*_WITH_NULL_.*");
  >>>>>>>      filter.getExclude().add(".*_DH_anon_.*");
  >>>>>>>      tlsParams.setCipherSuitesFilter(filter);
  >>>>>>>      ClientAuthentication ca = new ClientAuthentication();
  >>>>>>>      ca.setRequired(true);
  >>>>>>>      ca.setWant(true);
  >>>>>>>      tlsParams.setClientAuthentication(ca);
  >>>>>>>      tlsParams.setSecureSocketProtocol("SSL");
  >>>>>>>      if (engine != null) {
  >>>>>>>        engine.setTlsServerParameters(tlsParams);
  >>>>>>>      }
  >>>>>>>    } catch (KeyStoreException kse) {
  >>>>>>>    } catch (NoSuchAlgorithmException nsa) {
  >>>>>>>    } catch (FileNotFoundException fnfe) {
  >>>>>>>    } catch (UnrecoverableKeyException uke) {
  >>>>>>>    } catch (CertificateException ce) {
  >>>>>>>    } catch (GeneralSecurityException gse) {
  >>>>>>>    } catch (IOException ioe) {
  >>>>>>>    }
  >>>>>>>
  >>>>>>>    List<JettyHTTPServerEngine> engines = new 
  >>>>>>> ArrayList<JettyHTTPServerEngine>();
  >>>>>>>    if (engine != null)
  >>>>>>>      engines.add(engine);
  >>>>>>>    factory.setEnginesList(engines);
  >>>>>>>    org.apache.cxf.endpoint.Server server = sf.create();
  >>>>>>>    ((JettyHTTPServerEngine) ((JettyHTTPDestination) 
  >>>>>>> 
server.getDestination()).getEngine()).setJettyHTTPServerEngineFactory(factory); 
  >>>>>>>
  >>>>>>>
  >>>>>>>    String endpoint = 
  >>>>>>> server.getEndpoint().getEndpointInfo().getAddress();
  >>>>>>>    System.out.println("Server started at " + endpoint);
  >>>>>>>
  >>>>>>>
  >>>>>>> But when I start the service, I get the below error:
  >>>>>>>
  >>>>>>> Jul 21, 2008 9:15:10 AM 
  >>>>>>> org.apache.cxf.service.factory.ReflectionServiceFactoryBean 
  >>>>>>> buildServiceFromClass
  >>>>>>> INFO: Creating Service {http://test.com}ws from class 
  >>>>>>> com.test.cxf.HelloWorld
  >>>>>>> Exception in thread "main" java.lang.IllegalStateException: Port 9001 
  >>>>>>> is configured with wrong protocol "http" for 
  >>>>>>> "https://localhost:9001/hello";
  >>>>>>>    at 
  >>>>>>> 
org.apache.cxf.transport.http_jetty.JettyHTTPDestination.retrieveEngine(JettyHTTPDestination.java:115)
 
  >>>>>>>
  >>>>>>>    at 
  >>>>>>> 
org.apache.cxf.transport.http_jetty.JettyHTTPDestination.finalizeConfig(JettyHTTPDestination.java:134)
 
  >>>>>>>
  >>>>>>>    at 
  >>>>>>> 
org.apache.cxf.transport.http_jetty.JettyHTTPTransportFactory.createDestination(JettyHTTPTransportFactory.java:123)
 
  >>>>>>>
  >>>>>>>    at 
  >>>>>>> 
org.apache.cxf.transport.http_jetty.JettyHTTPTransportFactory.getDestination(JettyHTTPTransportFactory.java:103)
 
  >>>>>>>
  >>>>>>>    at 
  >>>>>>> org.apache.cxf.endpoint.ServerImpl.initDestination(ServerImpl.java:90)
  >>>>>>>    at org.apache.cxf.endpoint.ServerImpl.<init>(ServerImpl.java:69)
  >>>>>>>    at 
  >>>>>>> 
org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:115) 
  >>>>>>>
  >>>>>>>    at 
  >>>>>>> 
org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:164)
 
  >>>>>>>
  >>>>>>>    at com.test.cxf.Server.main(Server.java:104)
  >>>>>>>    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  >>>>>>>    at 
  >>>>>>> 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
  >>>>>>>
  >>>>>>>    at 
  >>>>>>> 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 
  >>>>>>>
  >>>>>>>    at java.lang.reflect.Method.invoke(Method.java:585)
  >>>>>>>    at 
  >>>>>>> com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
  >>>>>>>
  >>>>>>>
  >>>>>>> Any thoughts on this issue?
  >>>>>>>
  >>>>>>> Thank you,
  >>>>>>> -Arul
  >>>>>>>
  >>>>>>>
  >>>>>>> ______________________________
  >>>>>>>           
  >>>>>>>               
  >>>>>       
  >>>>>           
  >>>>     
  >>>>         
  >>>   
  >>>       
  >>
  >>     
  >
  >   
  
  
  ________________________________
  Scanned by MessageLabs for Flux
  ________________________________
    

Reply via email to