Hi Dan,
Thanks for adding the feature.
Meanwhile, I started to use spring configuration. The server is configured for 
X.509 Client certificate authentication to STS, and the client cert is added to 
server truststore.
I followed the STSClient sample in http://cxf.apache.org/docs/ws-trust.html
But I get the following exception:

--
Caused by: org.apache.cxf.transport.http.UntrustedURLConnectionIOException: 
RequireClientCertificate is set, but no local certificates were negotiated.  Is 
the server set to ask for client authorization?
        at 
org.apache.cxf.ws.security.policy.interceptors.HttpsTokenInterceptorProvider$HttpsTokenOutInterceptor$1.establishTrust(HttpsTokenInterceptorProvider.java:118)
        at 
org.apache.cxf.transport.http.TrustDecisionUtil.makeTrustDecision(TrustDecisionUtil.java:80)
        at 
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleHeadersTrustCaching(HTTPConduit.java:1299)
        at 
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.java:1264)
        at 
org.apache.cxf.io.AbstractWrappedOutputStream.write(AbstractWrappedOutputStream.java:42)
        at 
org.apache.cxf.io.AbstractThresholdOutputStream.write(AbstractThresholdOutputStream.java:69)
        at 
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1342)
---

My conf:
---
<beans xmlns="http://www.springframework.org/schema/beans";
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
  xmlns:sec="http://cxf.apache.org/configuration/security";
  xmlns:http="http://cxf.apache.org/transports/http/configuration";
  xmlns:jaxws="http://java.sun.com/xml/ns/jaxws";
  xsi:schemaLocation="
      http://cxf.apache.org/configuration/security
      http://cxf.apache.org/schemas/configuration/security.xsd
      http://cxf.apache.org/transports/http/configuration
      http://cxf.apache.org/schemas/configuration/http-conf.xsd
      http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-2.0.xsd";>
        <http:conduit 
name="{http://docs.oasis-open.org/ws-sx/ws-trust/200512}X5092.http-conduit";>
                <http:tlsClientParameters disableCNCheck="true">
                        <sec:keyManagers keyPassword="password1">
                                <sec:keyStore type="JKS" password="password"
                                        file="client.jks" />
                        </sec:keyManagers>
                        <sec:trustManagers>
                                <sec:keyStore type="JKS" password="password"
                                        file="client_trust.jks" />
                        </sec:trustManagers>
                        
                </http:tlsClientParameters>
                <http:client AutoRedirect="true" Connection="Keep-Alive"/>
        </http:conduit>
              
<bean id="stsclient" class="org.apache.cxf.ws.security.trust.STSClient" >       
        <constructor-arg ref="cxf" /> 
        <property name="requiresEntropy" value="false" />
        <property name="wsdlLocation"
                value="<wsdl>" />
        <property name="serviceName"
                value="{http://docs.oasis-open.org/ws-sx/ws-trust/200512}STS"; />
        <property name="endpointName"
                value="{http://docs.oasis-open.org/ws-sx/ws-trust/200512}X5092"; 
/>
        <property name="properties">
                <map>
                        <entry key="ws-security.username" value="wsclient"/>    
                
                        <entry key="ws-security.signature.properties" 
value="wss40_client.properties" />
                        <entry key="ws-security.encryption.properties" 
value="wss40_idp.properties" />
                        <entry key="ws-security.encryption.username" 
value="idp" />
                </map>
        </property>
</bean> 

</beans>

---
SpringBusFactory bf = new SpringBusFactory();
URL busFile = Client.class.getResource("cxf-client.xml");
Bus bus = bf.createBus(busFile.toString()); 
BusFactory.setDefaultBus(bus); 
STSClient stsClient = 
(STSClient)bus.getExtension(BusApplicationContext.class).getBean("stsclient");
stsClient.requestSecurityToken();
---

The server truststore has the client cert. What might be the reason for this 
exception?


-Vinay

-----Original Message-----
From: Daniel Kulp [mailto:[email protected]] 
Sent: Monday, August 08, 2011 12:30 PM
To: [email protected]
Cc: Penmatsa, Vinay
Subject: Re: TLSClientParameters

On Monday, August 08, 2011 8:42:53 AM Penmatsa, Vinay wrote:
> Hi Dan,
> Thanks.
> How can I set the TLS params in the STSClient? Is there an example of using
> STSClient this way?

I just checked the code and there isn't a way to access the underlying client 
from the STSClient.   I just added a getClient call which can be used in the 
future and that will be in CXF 2.4.2, but right now, the only way is through 
configuration.  :-(    (or use some reflection magic to call the private 
createClient() call and grab the client field, but that really sucks)

Dan



> -Vinay
> 
> 
> 
> -----Original Message-----
> From: Daniel Kulp [mailto:[email protected]]
> Sent: Friday, August 05, 2011 5:29 PM
> To: [email protected]
> Cc: Penmatsa, Vinay
> Subject: Re: TLSClientParameters
> 
> > Client client = ClientProxy.getClient(port);
> > STSClient stsClient = new STSClient(client.getBus());
> 
> You have two separate clients there....   the client from the port and an
> STSClient.   You are setting the TLS stuff on the port's client, but not the
> STSClient.   That's likely the issue.
> 
> Dan
> 
> On Friday, August 05, 2011 12:11:43 PM Penmatsa, Vinay wrote:
> > Hi Dan,
> > No. But not sure if I'm affecting it somehow. Here's my code:
> > 
> > ------
> > Client client = ClientProxy.getClient(port);
> > STSClient stsClient = new STSClient(client.getBus());
> > HTTPConduit http = (HTTPConduit) client.getConduit();
> > TLSClientParameters param = new TLSClientParameters();
> > param.setDisableCNCheck(true);
> > Properties cProps = new Properties();
> > cProps.load(new FileReader("client.properties"));
> > Merlin m = new Merlin(cProps);
> > KeyManagerFactory kmf =
> > KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
> > TrustManagerFactory tmf =
> > TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm(
> > )); kmf.init(m.getKeyStore(), "password1".toCharArray());
> > tmf.init(m.getTrustStore());
> > param.setKeyManagers(kmf.getKeyManagers());
> > param.setTrustManagers(tmf.getTrustManagers());
> > http.setTlsClientParameters(param);
> > 
> > stsClient.setWsdlLocation("<wsdl url>");
> > stsClient.setServiceName("{http://docs.oasis-open.org/ws-sx/ws-trust/200
> > 512} STS");
> > stsClient.setEndpointName("{http://docs.oasis-open.org/ws-sx/ws-trust/20
> > 051 2}UT"); Map<String,Object> stsProps = new HashMap<String,Object>();
> > stsProps.put("ws-security.username", "user");
> > stsProps.put("ws-security.password", "password");
> > stsClient.setProperties(stsProps);
> > SecurityToken st = stsClient.requestSecurityToken();
> > -----
> > 
> > I'm using cxf 2.4.
> > 
> > 
> > 
> > 
> > -----Original Message-----
> > From: Daniel Kulp [mailto:[email protected]]
> > Sent: Friday, August 05, 2011 11:49 AM
> > To: [email protected]
> > Cc: Penmatsa, Vinay
> > Subject: Re: TLSClientParameters
> > 
> > On Friday, August 05, 2011 11:32:08 AM Penmatsa, Vinay wrote:
> > > Hi Prisca,
> > > Thanks for the link.
> > > This can be fallback solution, but I prefer to do it
> > > programmatically.
> > > While debugging the source, it seems a new conduit object is created
> > > in
> > > HttpTransportFactory.getConduit(). So, the client.getConduit() in my
> > > code
> > > is ignored. Not sure how to fix that
> > 
> > Do you have a different ConduitSelector installed on the client?   The
> > default one should just be creating a single Conduit for the client and
> > re-using it. I'm not sure why a second call to
> > HttpTransportFactory.getConduit would be occuring.
> > 
> > Dan
> > 
> > > Regards,
> > > Vinay
> > > 
> > > -----Original Message-----
> > > From: Prisca POLYTE [mailto:[email protected]]
> > > Sent: Friday, August 05, 2011 11:18 AM
> > > To: [email protected]
> > > Subject: Re: TLSClientParameters
> > > 
> > > Hey,
> > > 
> > > is it possible for you to use Spring for instance ?
> > > 
> > > If it is then you should have a look to
> > > http://cxf.apache.org/docs/client-http-transport-including-ssl-suppo
> > > rt.h tml#
> > > ClientHTTPTransport%28includingSSLsupport%29-ConfiguringSSLSupport
> > > 
> > > HTH
> > > 
> > > Regards
> > > --
> > > Prisca
> > > 
> > > On Fri, Aug 5, 2011 at 5:10 PM, Penmatsa, Vinay
> > 
> > <[email protected]>wrote:
> > > > I'm unable to set the 'disableCNCheck' programmatically as
> > > > below:
> > > > 
> > > > HTTPConduit http = (HTTPConduit) client.getConduit();
> > > > TLSClientParameters param = new TLSClientParameters();
> > > > param.setDisableCNCheck(true);
> > > > http.setTlsClientParameters(param);
> > > > 
> > > > 
> > > > What's the correct way to do this?
> > > > 
> > > > 
> > > > Thanks,
> > > > Vinay
-- 
Daniel Kulp
[email protected]
http://dankulp.com/blog
Talend - http://www.talend.com

Reply via email to