(3rd Round) Proposed API Changes for JEP 114: TLS Server Name Indication (SNI) Extension

Brad Wetmore bradford.wetmore at oracle.com
Wed Aug 15 00:31:13 UTC 2012


Still looking over the changes, but a few preliminary comments.

On 8/12/2012 5:50 AM, Xuelei Fan wrote:
> Hi,
>
> Please review the spec of JEP 114, TLS Server Name Indication (SNI)
> Extension.
>
>      http://cr.openjdk.java.net./~xuelei/7068321/webrev_spec.04/
>
> Please read the README to help you understanding the the specification:
>
>     http://cr.openjdk.java.net./~xuelei/7068321/README_04.txt

I forgot to mention this previously:

 > Oracle provider now only supports one server name type, "host_name".
 > The value of name is encoded as UTF-8 string.

RFC 6066 requires ASCII, earlier versions (RFC 4366) have this as UTF-8. 
  Do you want to allow for UTF-8 here?

> The major differences comparing with previous webrev are:
> 1. client mode and server mode will use separated API set.
>     For client, the related APIs are:
>       setServerName(String type, String value)
>       clearServerName(String type)
>       disableServerName(String type)
>       enableServerName(String type)
>       isDisabledServerName(String type)
>       getServerNames()

Please read my note on the 2nd round review before reading this, 
specifically the section that starts "I'm not following your confusion".

So wow, what happened here?  I thought we were so very close on 
finalizing the API, and it was just a matter of tweaking the wording to 
have a null value disable the type from being sent.

     setServerName(String type, String value) {
         if type == value
             throw IAE;
         if value == null
             map.remove(type);
             return;
         else if value.equals("")
             throw IAE;
         else
             map.put(value);
     }

Then in the Handshakers, only those type/values that are present in the 
map are be pulled out for constructing the SNI extensions.

If you want to go with this new API style with clear/disable/enable, I 
can see where you are coming from, but that was unexpected.  Before I 
review for accuracy, I want to make sure you really want to tweak things 
so extensively.  I think what you had previously fit the bill pretty well.

>     For server side, the related APIs are:
>       setServerNamePattern(String type, Pattern pattern)
>       clearServerNamePattern(String type)
>       getServerNamePatterns()

and same for this one.

I'll look over the rest once I get your answer to the above.

> 2. close the door to use the generated socket in client mode.
>
>     SSLSocketFactory.createSocket(Socket s,
>         InputStream consumed, boolean autoClose)
>
>     The returned socket was set in server mode.

Brad




More information about the security-dev mailing list