FWIW there are some well-respected people in the kerberos community who believe 
that rfc 2712 (I assume that is what these cipher suites are) should be 
deprecated in favor of some more modern alternative. I do not believe these 
suites see very wide use, although it’s probably not zero.

On Oct 20, 2014, at 5:21 AM, Wang Weijun <weijun.w...@oracle.com> wrote:

> Hi Xuelei
> 
> Long time no discussion on this one.
> 
> Updated webrev at http://cr.openjdk.java.net/~weijun/8038089/webrev.05/. Not 
> exactly the same as your suggestion and not final. Just want to ask you take 
> a look.
> 
> 1. There are still 2 classes. ClientKeyExchange is for that hashshake 
> messgae, and ClientKeyExchangeService is to introduce new service not in the 
> base module.
> 
> 2. I've tried my best to not mention KRB5 anymore inside the base module, but 
> CipherSuite is an exception:
> 
>  a. Shall we change KeyExchange from enum to a normal class. Otherwise it 
> cannot be subclassed so there is no way to add new exchange in a service.
> 
>  b. We should also move all add(KRB5...) lines into the service.
> 
> 3. Which is the first class loaded in JSSE? Is it JsseJce? I'd like to load 
> the services and introduce new KeyExchange and CIpherSuite there.
> 
> Thanks
> Max
> 
> 
> On Sep 22, 2014, at 12:06, Xuelei Fan <xuelei....@oracle.com> wrote:
>> 
>> 
>> My idea about the new service looks like:
>> --------------------
>> public interface ClientKeyExchange {
>>   // Get the peer principal of this client key exchange
>>   public Principal getPeerPrincipal();
>> 
>>   // Get the local principal of this client key exchange
>>   public Principal getLocalPrincipal();
>> 
>>   // Create a new client key exchange message
>>   //
>>   // Should be called in client side.
>>   public HandshakeMessage createClientKeyExchange(String hostname,
>>           AccessControlContext acc, int protocolVerson,
>>           SecureRandom rand) throws IOException;
>> 
>>   // Parse a client key exchange message
>>   //
>>   // Should be called in server side.
>>   public HandshakeMessage parseClientKeyExchange(int protocolVerson,
>>           int clientRequestedVersion, SecureRandom rand,
>>           byte[] encodedTicket, byte[] encrypted,
>>           AccessControlContext acc) throws IOException;
>> 
>>   // Negotiate the pre-master secret of this client key exchange.
>>   public SecretKey clientKeyExchange() throws IOException;
>> }
>> --------------------
>> 
>> Still need a few methods in order to support session resumption. The
>> initialization method may depend on the service loading approach.  For
>> example, if it is defined as SPI, we can call it via algorithm name
>> ("KRB5"); if it is defined to be load with ServiceLoader, may need to
>> define a new sub-class for KRB5.
>> 
>> In TLS handshaking, the usage of the methods may look like:
>> -----------------------
>> Client                                    Server
>> krb5-ciphers  ---ClientHelloRequst--> Support Krb5?
>>                                     initialize Krb5 ClientKeyExchange
>>             <----- ServerHello ----
>>             <---ServerHelloDone----
>> initialize Krb5 ClientKeyExchange
>> create krb5 ClientKeyExchange message
>>             ---ClientKeyExchange--> parse ClientKeyExchange msg
>> get the pre-master secret
>> negotiate the shared secret
>>             ---changeCipherSpec--->
>>             -------Finished-------> get the pre-master secret
>>                                     negotiate the shared secret
>>             <---changeCipherSpec---
>>             <-------Finished-------
>>                    ...
>> -----------------------
>> 
>> 
>> Thanks,
>> Xuelei
>> 
>> On 9/17/2014 1:58 PM, Xuelei Fan wrote:
>>> On 9/17/2014 1:49 PM, Wang Weijun wrote:
>>>>> I would prefer we do it now.  If I did not miss something, the new design 
>>>>> should be more simple
>>>>> and straightforward.
>>>> 
>>>> Maybe, but I am not sure since this would surely touch more TLS side 
>>>> codes. If you want to be totally separated, we also need to move the 
>>>> ciphersuites definitions outside CipherSuite.java. The TLS side can 
>>>> iterate through all providers to add them back and create something like a 
>>>> Map<keyExchangeAlg, KeyExchangeService>. Then we could use this map in all 
>>>> "switch (keyExchange)" blocks.
>>>> 
>>>> Do you think it's easier to make these changes based on the current codes? 
>>>> Or based on my modified codes?
>>>> 
>>>> Can you describe the KeyExchangeService interface you are thinking about? 
>>>> Currently I have to define a two-level interface -- 
>>>> ExternalCipherSuiteProvider and ExternalCipherSuiteProvider.Exchanger -- 
>>>> to model the service and the exchange instance.
>>>> 
>>> OK, I will wrap up my ideas of the KeyExchangeService. But it may take a
>>> few more days.  Wish I could get it ready by next Monday.
>>> 
>>> Thanks,
>>> Xuelei
>>> 
>> 
> 

Personal email.  hbh...@oxy.edu



Reply via email to