I'm not an ssl expert either! ;-)

No wouldn't say that the sun implementation doesn't support multiple
keys but the behaviour is strange and with one key in the keystore it
works always fine. I don't know why. What you get during the deployment
is an UnrecoverableKeyException. But I didn't mean that the consumer
endpoint can accept only a single certificate because you can have
multiple certificates in  a truststore. So your endpoint can trust
multiple clients with different certificates. It is the same for the
provider endpoint IMHO.

Cheers,
Thomas



Guillaume Nodet wrote:
> What happens when you do that with multiple keys ?
> Are you saying that sun implementation does not support multiple keys ?
> This means that on a consumer endpoint, you can only accept
> a single certificate, right ?  What about the provider endpoint ?
> Sorry for my ignorance, but I'm not an ssl expert and I may have
> missed something ...
> 
> On 11/8/06, Thomas TERMIN <[EMAIL PROTECTED]> wrote:
>> Hello Guillaume,
>>
>> I tried your solution and it still does not work! Unfortunately!
>>
>> I did the following in conf/security.xml
>>
>> <sm:keystoreManager id="keystoreManager">
>>     <sm:keystores>
>>       <sm:keystore name="default"
>>                    path="classpath:keystore.jks"
>>                    keystorePassword="servicemix"
>>                    keyPasswords="smx=smx" />
>>       <sm:keystore name="midas"
>>                    path="classpath:keystore.jks"
>>                    keystorePassword="servicemix"
>>                    keyPasswords="server-alias=password" />
>>       <sm:keystore name="midas-trust"
>>                    path="classpath:truststore.jks"
>>                    keystorePassword="trustpass"/>
>>      </sm:keystores>
>>   </sm:keystoreManager>
>>
>>
>> xbean.xml for the http consumer endpoint
>>
>> <http:endpoint service="bes:remote-request-start"
>>   endpoint="endpoint"
>>   role="consumer"
>>   locationURI="https://cuba:8192/BESlocalRequest/";
>>   defaultMep="http://www.w3.org/2004/08/wsdl/in-out";
>>   soap="false" >
>>   <http:ssl>
>>     <http:sslParameters managed="true"
>>       keyAlias="server-alias"
>> keyPassword="password"                                                       
>>         
>> keyStore="midas"
>>      keyStorePassword="servicemix"
>> trustStore="midas-trust"                                                     
>>         
>> trustStorePassword="trustpass"/>
>>   </http:ssl>
>> </http:endpoint>
>>
>> What happens is that you have a KeyManager (registerd on jndi with
>> multiple FileKeystoreInstance instances). The key alias and the password
>> are stored in a List.
>>
>> The problem what I see is that in the FileKeystoreInstance class the
>> keystore file is again loaded in the loadKeystoreData method and after
>> that you give this keystore (with again multiple keys) to the init
>> method of the KeyManagerFactory:
>>
>> keyFactory.init(keystore, (char[]) keyPasswords.get(keyAlias));
>>
>> So the key alias is again not used except to get the password. I thought
>> you create for each key an inmemory keystore and give the right key
>> store to the init method. In tis way the init method would get just one
>> key with the correct password. There wouldn't be any issues with
>> multiple keys then because the sun implementation would never see
>> multiple keys.
>>
>> Sorry but I can't really explain this stuff! ;-) But I hope it is
>> understandable though. Maybe I just didn't get something correctly!
>>
>>
>>
>> Cheers,
>> Thomas
>>
>>
>>
>> Thomas TERMIN wrote:
>> > Thanks Guillaume!
>> >
>> > I will try that out tomorrow. Basicly that solve our problem in
>> > servicemix but we have also jetty as a webcontainer deployed in
>> > servicemix so we have still the problem here.
>> >
>> > Guillaume Nodet wrote:
>> >> If you set the managed="true" attribute on the ssl parameters
>> >> for the servicemix-http component, you will use the
>> >> org.apache.servicemix.http.jetty.ServiceMixSslSocketConnector
>> >> instead of the standard jetty ssl connector.  This one handle
>> >> the keyAlias parameter.
>> >>
>> >> To use this, you will need to define a
>> >> org.apache.servicemix.jbi.security.keystore.KeystoreManager
>> >> instance (see /conf/security.xml for an example) like the following:
>> >>
>> >>  <sm:keystoreManager id="keystoreManager">
>> >>    <sm:keystores>
>> >>      <sm:keystore name="default"
>> >>                   path="classpath:keystore.jks"
>> >>                   keystorePassword="servicemix"
>> >>                   keyPasswords="smx=smx" />
>> >>    </sm:keystores>
>> >>  </sm:keystoreManager>
>> >>
>> >> You will need to configure it on the component configuration, using
>> >> either a JNDI name or a direct reference.  Unfortunately, there is
>> >> currently no way to set it for the endpoint itself, though it
>> should be
>> >> easy to modify.
>> > If I have some time I will look at it but I can't make it at the
>> moment.
>> >
>> > Cheers,
>> > Thomas
>> >
>> >
>> >>
>> >> On 11/6/06, Thomas TERMIN <[EMAIL PROTECTED]> wrote:
>> >>> Guillaume,
>> >>>
>> >>> We have some issues with ssl here. As I said before you can set the
>> >>> key-alias parameter but it is not used at the moment from
>> servicemix to
>> >>> create a sslSocketConnector. But the bigger problem is that jetty
>> does
>> >>> not support that. Jetty reads the keystore from the keystore file
>> and if
>> >>> there is more than one key in this store it gives an exception. The
>> >>> thing is I can fix that in jetty as well as in servicemix. But I
>> have no
>> >>> contacts to the jetty community. So one thing is if I would fix that
>> >>> could you bring this patch faster in the jetty code as I could
>> (Assumed
>> >>> that you have better contacts). The second thing is if you are
>> >>> interested at all on improve this things.
>> >>>
>> >>> So what I would do is I would read the keystore file in jetty as
>> already
>> >>> done and would create inmemory keystores for every alias. So I would
>> >>> have a hash table or something where you could get the keystore for a
>> >>> specific given alias. The only thing in servicemix then is to get the
>> >>> key-alias (if it is set in the http endpoint configuration) and
>> call a
>> >>> jetty getter method for the key alias. The Ssl socket connector
>> can then
>> >>> get the specific keystore from the hast table and intialise the
>> complete
>> >>> ssl stuff with the right given key.
>> >>>
>> >>> Hope it was understandable. ;-)
>> >>>
>> >>> What do you think?
>> >>>
>> >>> Cheers,
>> >>> Thomas
>> >>>
>> >>> Thomas TERMIN wrote:
>> >>>> Thanks Guillaume it is a nice feature in servicemix but it seems
>> to be
>> >>>> not supported from the SslSocketConnector (jetty). There is no such
>> >>>> attribute unfortunately.
>> >>>>
>> >>>> Do you have any ideas?
>> >>>>
>> >>>> Cheers,
>> >>>> Thomas
>> >>>>
>> >>>> Guillaume Nodet wrote:
>> >>>>> The SslParameters class has a keyAlias attribute that you
>> >>>>> can use for that.
>> >>>>>
>> >>>>> On 11/3/06, Thomas TERMIN <[EMAIL PROTECTED]> wrote:
>> >>>>>> Hello,
>> >>>>>>
>> >>>>>> Who can I specify the alias for a key in the keystore for
>> secure ssl
>> >>>>>> consumer endpoints? Or is that basicly impossible to have more
>> >>> than one
>> >>>>>> key in the keystore?
>> >>>>>>
>> >>>>>> Cheers,
>> >>>>>> Thomas Termin
>> >>>>>>
>> >>>>
>> >>>
>> >>
>> >
>> >
>>
>>
> 
> 

Reply via email to