Thank you for these clarifications. We will now consider how these affect, if 
at all, the HTTP Client.

-Chris.

> On 27 Mar 2020, at 17:47, Xuelei Fan <xuelei....@oracle.com> wrote:
> 
> On 3/27/2020 10:36 AM, Chris Hegarty wrote:
>> Thank you Xuelei, this very helpful.
>> Sorry, but I am going to ask just a few more clarifying questions to make 
>> sure that we’re on the same page.
>>> On 27 Mar 2020, at 16:23, Xuelei Fan <xuelei....@oracle.com> wrote:
>>> 
>>> On 3/27/2020 5:52 AM, Chris Hegarty wrote:
>>>> Xuelei,
>>>> Before commenting further on the interaction of the HTTP Client with 
>>>> various contorted configurations, I would like to get a better 
>>>> understanding of the `jdk.tls.client.protocols` property.
>>>> Is there a specification or other documentation describing 
>>>> `jdk.tls.client.protocols` ?
>>> See the jdk.tls.client.protocols line in table 'Table 8-3 System Properties 
>>> and Customized Items" in JSSE Reference Guides:
>>> 
>>> "https://docs.oracle.com/en/java/javase/14/security/java-secure-socket-extension-jsse-reference-guide.html#GUID-A41282C3-19A3-400A-A40F-86F4DA22ABA9
>>> 
>>> For your quick reference, I copied the note here:
>>> 
>>> ---------------
>>> Customized Item:
>>> Default handshaking protocols for TLS/DTLS clients.
>>> 
>>> Notes:
>>> To enable specific SunJSSE protocols on the client, specify them in a 
>>> comma-separated list within quotation marks; all other supported protocols 
>>> are not enabled on the client
>> “supported” here means protocols that are supported by the provider, and may 
>> be used within a specific context. This translates, for the default 
>> SSLContext, to the API call getSupportedSSLParameters().getProtocols(), 
>> right?
> Yes.
> 
>> getSupportedSSLParameters().getProtocols() returns a superset of 
>> getDefaultSSLParameters().getProtocols(). Conversely, 
>> getDefaultSSLParameters().getProtocols() is a strict subset of 
>> getSupportedSSLParameters().getProtocols(), right?
> Yes.
> 
>> The `jdk.tls.client.protocols` property has no affect on 
>> getSupportedSSLParameters().getProtocols()  only 
>> getDefaultSSLParameters().getProtocols(), right?
> Yes.
> 
>> In which case, getDefaultSSLParameters().getProtocols() returns the value of 
>>  `jdk.tls.client.protocols`.
>>> For example,
>>> 
>>>    If jdk.tls.client.protocols="TLSv1,TLSv1.1", then the default protocol 
>>> settings on the client for TLSv1 and TLSv1.1 are enabled, while SSLv3, 
>>> TLSv1.2, TLSv1.3, and SSLv2Hello are not enabled
>>> 
>>>    If jdk.tls.client.protocols="DTLSv1.2" , then the protocol setting on 
>>> the client for DTLS1.2 is enabled, while DTLS1.0 is not enabled
>>> ---------------
>> Seems that the term “client” here is referring to client-initiated 
>> exchanges, rather than any specific technology.
>> The assumption, which is reasonable, is that “clients” will use the default 
>> context. Again, this is reasonable default out-of-the-box behavior.
> The client refer to the client side SSLSocket or SSLEngine created with the 
> default SSLContext.  or example:
>    SSLContext sslContext = SSLContext.getInstance("TLS");
>    SSLEngine sslEngine = sslContext.createSSLEngine();
>    sslEngine.setUseClientMode(true);
> 
> The sslEngine object is a client that impacted by the property.
> 
> While if
>    sslEngine.setUseClientMode(false);
> 
> then the object should not be impacted by the property.
> 
> Xuelei
> 
>>>> It is my understanding that the property only affects the *default* 
>>>> protocol’s ( not the supported protocols ) of the *default* context. That 
>>>> is, the context returned by `SSLContext.getInstance("Default”)`,
>>> It is correct that the property impact the default SSLContext only.  The 
>>> default SSLContext instance could get from:
>>>    SSLContext.getInstance("Default");
>>>    SSLContext.getInstance("TLS");
>>>    SSLContext.getInstance("DTLS”);
>> Thanks for this clarification.
>>> 
>>>> and the protocol values returned by the following invocation on that 
>>>> context `getDefaultSSLParameters().getProtocols()`. Is this correct? If 
>>>> not, what does it do?
>>> Yes.
>> Thanks,
>> -Chris.

Reply via email to