[
https://issues.apache.org/jira/browse/TS-3153?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14255991#comment-14255991
]
Sudheer Vinukonda edited comment on TS-3153 at 4/13/15 12:51 AM:
-----------------------------------------------------------------
The issue here is that when the SNI call back happens, the plugins have no
knowledge of the list of protocols that are accepted on the proxy port on which
the connection was accepted. This knowledge is available in the
{{SSLNextProtocolAccept}} object, but, the {{SSLNetVConnection}} object does
not currently have visibility/access to the {{SSLNextProtocolAccept}} object.
It simply has the {{SSLNextProtocolSet}} pointer directly.
Discussed with [~amc] and he suggested the following solution.
1. Add a pointer to {{SessionAccept}} (the generic base class for
{{SSLNextProtocolAccept}}) object <session_accept> in {{SSLNetVConnection}} (in
addition to the existing {{SSLNextProtocolSet}} pointer <npnSet>)
2. In {{SSLNextProtocolAccept::mainEvent}}, set the {{SessionAccept}} object
pointer in {{SSLNetVConnection}} to the {{SSLNextProtocolSessionAccept}} object
on {{NET_EVENT_ACCEPT}}.
With the above framework, a user plugin should be able to do the below:
1. Create a bunch of {{SSLNextProtocolSet}} (npnSet) objects (various possible
permutations/combinations of the available protocols (retrieved from acceptor
objects)) for each configured SNI for all the acceptor objects (based on the
available list of acceptor objects, {{SLL<SSLNextProtocolAccept>}}
ssl_plugin_acceptors). This step also makes sure the created npnSet objects are
validated against each the registered protocol list for each acceptor.
2. When a SNI call back happens, the plugin uses the SNI and the
netvc->session_accept to locate a custom npnSet. If a npnSet is available, it
updates the netvc->npnSet, otherwise just does nothing.
was (Author: sudheerv):
Discussed with [~amc] and he suggested the following solution:
1. Add a pointer to SessionAccept object <session_accept> in SSLNetVConnection
(in addition to the existing SSLNextProtocolSet pointer <npnSet>)
2. In SSLNextProtocolAccept::mainEvent, set the SessionAccept object pointer in
SSLNetVConnection to the SSLNextProtocolSessionAccept object on
NET_EVENT_ACCEPT.
With the above framework, a user plugin should be able to do the below:
1. Create a bunch of SSLNextProtocolSet (npnSet) objects for each configured
SNI for all the acceptor objects (based on the available list of acceptor
objects, SLL<SSLNextProtocolAccept> ssl_plugin_acceptors). This step also makes
sure the created npnSet objects are validated against each the registered
protocol list for each acceptor.
2. When a SNI call back happens, the plugin uses the SNI and the
netvc->session_accept to locate a custom npnSet. If a npnSet is available, it
updates the netvc->npnSet, otherwise just does nothing.
> Ability to disable/modify protocols based on SNI information
> ------------------------------------------------------------
>
> Key: TS-3153
> URL: https://issues.apache.org/jira/browse/TS-3153
> Project: Traffic Server
> Issue Type: Improvement
> Components: HTTP/2, SPDY
> Reporter: Bryan Call
> Assignee: Sudheer Vinukonda
> Fix For: 6.0.0
>
> Attachments: TS-3153.diff
>
>
> We are running into problems where certain origin servers are having issues
> when SPDY is enabled. It would be great to have more control over when
> protocols are enabled.
> One way to do this would be to add a protocol options to the entry in the
> ssl_multicert config. We wound then add additional entries for domains that
> need to disable the protocols. All protocols should be enabled by default.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)