Magnus,
          I am not in favor moving this SASL/SSL hand shake to
          KafkaApllication level protocol. I am not sure what evolution
          of the current handshake  needs versioning and also merging
          Application level protocol with SSL/SASL handshake doesn't
          seem right.
-Harsha

On Thu, Apr 7, 2016, at 05:46 AM, Rajini Sivaram wrote:
> Magnus,
> 
> 
> 
> 
> *"Why would it be harder to achieve? And is it harder for the Kafka
> developeror the user?Wouldnt it be possible to accept both non-SSL-auth
> and
> SSL-auth clients onthe same port?"*
> 
> Maybe I am missing something, so perhaps it would be easier if I
> explained
> our scenario and you could tell me how it would work with the new design?
> 
> 
> a) Inter-broker communication
> 
> 
>    - uses SSL (without SASL)
>    - is on an internal network
>    - advertised host is internal IP address
>    - broker uses TLS client auth
> 
> b) External clients
> 
> 
>    -   use SASL_SSL
>    -   are on the public network (and traffic goes through an additional
>    TLS proxy for security)
>    -   advertised host is a registered host name also included in the
>    certificate and validated by the client during TLS handshake
>    -   cannot use TLS client auth since that would require a complex PKI
>    infrastructure for certificate management
>    -   should not be allowed to connect to Kafka without SASL
>    authentication (broker should prevent connection without SASL)
> 
> 
> Questions:
> 
> 
>    1.   How do I configure a) and b) to be on different network
>    interfaces?
>    2.   How do I advertise different hosts for a) and b)?
>    3.   How do I configure broker to disable TLS client auth for b) while
>    enabling it for a)?
>    4.   How does the broker prevent external clients from connecting
>    without SASL while allowing internal clients to connect without SASL?
> 
> Thanks,
> 
> Rajini
> 
> On Wed, Apr 6, 2016 at 8:33 PM, Magnus Edenhill <mag...@edenhill.se>
> wrote:
> 
> > 2016-04-06 19:16 GMT+02:00 Rajini Sivaram <rajinisiva...@googlemail.com>:
> >
> > > Magnus,
> > >
> > > I have not looked at your proposal in detail yet,
> > >
> >
> > Please do :)
> >
> >
> > > but I have a few comments:
> > >
> > >    1. We need to support SSL and SASL_SSL within the same broker (for
> > >    instance, to support certificate-based authentication for replication
> > > and
> > >    SASL for external connections). At the moment, there is a one-to-one
> > >    mapping between port and security protocol. If SASL is a Kafka-level
> > > option
> > >    on the same port rather than a security protocol, this would be harder
> > > to
> > >    achieve. With separate protocols, we are also able to turn off SSL
> > > client
> > >    auth for SASL.
> > >
> >
> > Why would it be harder to achieve? And is it harder for the Kafka developer
> > or the user?
> > Wouldnt it be possible to accept both non-SSL-auth and SSL-auth clients on
> > the same port?
> >
> >
> >
> >
> > >    2. SASL is a challenge-response protocol. Server generates a
> > challenge,
> > >    client responds. Fitting this into Kafka API is possible, but feels
> > >    unnatural.
> > >
> >
> > I dont see any problems with, the handshake is half-duplex and driven by
> > the SASL library, all the client needs
> > to do is "long poll" the server for data.
> >
> > Something like this in pseudo code (where sasl. is the SASL library
> > context):
> >    until sasl.auth_done() {
> >          sendbuf = sasl.wants_to_send()
> >          if (!sendbuf) // Nothing to send, send empty payload to poll
> > server for data
> >              response = SaslHandshakeRequest(payload=none)
> >          else
> >             response = SaslHandshakeRequest(payload=sendbuf)
> >
> >         // handle response (possibly empty) from server and continue
> > handshake.
> >          sasl.parse(response)
> >     }
> >
> >
> >    3. Personally, I like the current Network|Security|Application layering
> > >    of the code in Kafka. Handshake code is quite complicated and hard to
> > > debug
> > >    as it is, moving that to the application layer could make it worse.
> > With
> > >    handshake in the application layer, you would need to set Principal
> > > based
> > >    on SSL channel for non-SASL and sometime later on for SASL. It may be
> > > just
> > >    me, but it doesn't feel quite right.
> > >
> >
> > I actually think reusing the existing Kafka protocol implementation for
> > this makes it
> > more robust and easier to debug and understand.
> >
> > How do you plan on handling feature discovery for new requests or request
> > versions in this special protocol?
> > I.e., what KIP-35 provides for the Kafka protocol.
> >
> >
> > Regards,
> > Magnus
> >
> >
> > >
> > > On Wed, Apr 6, 2016 at 12:47 PM, Magnus Edenhill <mag...@edenhill.se>
> > > wrote:
> > >
> > > > Engineers,
> > > >
> > > > sorry to stir up some dust on this KIP but following yesterday's
> > > discussion
> > > > on the KIP call I'm a bit concerned about the way the SASL handshake
> > > > protocol is diverging even more from the main Kafka protocol.
> > > > The SASL handshake is already its own special protocol and the latest
> > > > addition of SaslMechanisms request in KIP-43
> > > > adds yet another protocol on top of that, making assumptions on what
> > SASL
> > > > libraries are communicating in the opaque data channel.
> > > > Unlike TLS, SASL has no standard handshake protocol so conceiving a
> > > special
> > > > non-Kafka protocol just for SASL in Kafka is unwarranted given that the
> > > > Kafka protocol natively supports the same semantics.
> > > > There's also a non-neglectable maintenance aspect of maintaining a
> > > separate
> > > > protocol, in regards to documentation, versioning, testing, protocol
> > > stack
> > > > implementations (broker and clients * N), etc.
> > > >
> > > >
> > > >
> > > > So let me suggest a different approach that pulls the SASL handshake
> > into
> > > > the Kafka protocol properly and makes the
> > > > authentication an in-band connection setup step.
> > > >
> > > >
> > > > Create two new proper Kafka requests:
> > > >
> > > > SaslMechanismsRequest V0 {
> > > >   // empty (see discussion below)
> > > > }
> > > >
> > > > SaslMechanismResponse V0 {
> > > >      int16 errroCode;     // e.g. AuthenticationNotRequired (when SASL
> > is
> > > > not configured) - or maybe just return an empty list in that case
> > > >     Array[String] mechanisms;   // server's supported mechanisms.
> > Client
> > > > may choose which one to use.
> > > > }
> > > >
> > > >
> > > >  SaslHandshakeRequest V0 {
> > > >      string selected_mechanism;  // client's selected mechanism, MUST
> > not
> > > > change during a handshake (ignore in sub-sequent requests?)
> > > >      bytes data;    // opaque SASL library handshake data.
> > > >  }
> > > >
> > > > SaslHandshakeResponse V0 {
> > > >     int16 errorCode;   // e.g. UnsupportedMechanism, and arbitrary SASL
> > > > library exceptions, etc.
> > > >     bytes data;   // opaque SASL library handshake data.
> > > > }
> > > >
> > > > (Note: I'll leave the exact format of the above Request/Responses to
> > the
> > > > people in the know, this is a proof of concept layout.)
> > > >
> > > > The protocol semantics of the current SASL handshake, which is driven
> > by
> > > > the underlying SASL libraries,  remains in place,
> > > > such as sending zero length requests to "poll" the remote side, etc.
> > > >
> > > >
> > > >
> > > > Regarding empty SaslMechanismRequest:
> > > > A previous proposal suggests sending the client's configured mechanism
> > in
> > > > the SaslMechanismRequest, which is fine but if we do that there  is no
> > > > point in returning the broker's list of mechanisms since the client has
> > > > already chosen - only the error code is needed.
> > > >  For clients wanting to support multiple mechanisms it can iterate over
> > > its
> > > > configured mechanisms and send a  SaslMechanismRequest for each one,
> > but
> > > > that just adds complexity at no gain, and at the end of the day the
> > > > desired_mechanism check in the broker is purely cosmetic.
> > > >
> > > >  If we instead skip the desired mechanism and let the broker always
> > > return
> > > > its list of supported mechanisms the client can choose the one it
> > needs,
> > > > this allows a client to optionally support multiple mechanisms and also
> > > > puts the decision logic in the client rather than the server.
> > > >
> > > >  If the argument is that a client will only support one mechanism
> > (which
> > > I
> > > > think is a bold claim to make) then the SaslMechanismRequest isn't
> > needed
> > > > at all, the client can jump directly SaslHandshakeRequest {
> > > > selected_mechanism="mymechanism" } and look for UnsupportedMechanism in
> > > the
> > > > response's errorCode.
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > Typical client MO using the above requests:
> > > >
> > > > # Use ApiVersion info to select the proper SaslMechanismRequest version
> > > to
> > > > use (for future use..)
> > > >  Client > Broker:   ApiVersionRequest      // (optional) query for
> > > > supported API versions, possibly limited to
> > > > {SaslHandshakeReq,SaslMechanismsReq..}
> > > >  Broker < Client:   ApiVersionResponse { .. }
> > > >
> > > >
> > > > # Request broker's supported mechanisms list
> > > >  Client > Broker:  SaslMechanismRequest { }
> > > >  Broker < Client:  SaslMechanismResponse { mechanisms = { "GSSAPI",
> > > "KRB",
> > > > .. }
> > > >
> > > > # If broker responded with an empty mechanisms list, alternative an
> > > > AuthenticationNotRequired error code, the client skips to its
> > operational
> > > > phase.
> > > > # If the client can't find a supported mechanism in the returned
> > > mechanisms
> > > > list it raises an error to the application.
> > > >
> > > > # Otherwise the client selects a proper mechanism and the auth
> > handshake
> > > > begins:
> > > >  Client > Broker: SaslHandshakeRequest { mechanism="KRB", data =
> > > > KRB-specific data.. }
> > > >  Broker > Client: SaslHandshakeResponse { data = KRB-specific data }
> > > >     repeat as necessary
> > > >
> > > > # Client is now authenticated and may start its usual operation of
> > > > MetadataRequest, Produce, Fetch, etc...
> > > >
> > > >
> > > >
> > > > Pros:
> > > >  + Using the standard Kafka protocol provides proper versioning,
> > > > documentation, feature detection, etc, out of the box.
> > > >  + Less complex protcol implementations in both client and brokers.
> > > > Standard protocol stack can be used.
> > > >  + No need to define a specific SASL port, SASL is now an in-band
> > > operation
> > > > on any type of connection (PLAINTEXT, SSL)
> > > >  + Requires proper per-API auth enforcement in the broker, which is a
> > > good
> > > > thing. (i.e., if SASL is configured an unauthenticated client should
> > not
> > > be
> > > > permitted to call any API but ApiVersion, SaslHandshake,
> > SaslMechanisms,
> > > > ..).
> > > >  + Future proof, the SASL/Auth handshake protocol can evolve naturally
> > > > using KIP-35 for feature detection.
> > > >  + Looking forward this also enables re-authentication in the current
> > > > session, if there's ever a use case for that.
> > > >
> > > > Cons:
> > > >  - Requires proper per-API auth enforcement in the broker, but this is
> > a
> > > > good thing. An initial naiive approach to this is to only allow Sasl*
> > and
> > > > ApiVersion requests prior to authentication (if auth is required).
> > > >
> > > >
> > > >
> > > > Compatibility:
> > > >  - Leave the current legacy SASL handshake in place for SASL_PLAINTEXT
> > > and
> > > > SASL_SSL connections to not break existing 0.9 clients (that is the
> > Java
> > > > client and librdkafka,  no other clients have implemented SASL yet
> > > AFAIK).
> > > > Deprecate this method in documentation.
> > > >  - SSL and PLAINTEXT connections will use in-band authentication if
> > SASL
> > > is
> > > > configured.
> > > >
> > > >
> > > >
> > > > /Magnus
> > > >
> > > > 2016-03-16 0:41 GMT+01:00 Rajini Sivaram <rajinisiva...@googlemail.com
> > >:
> > > >
> > > > > Both the KIP and the PR have been updated to a cut-down version as
> > > > > discussed in the KIP meeting today.
> > > > >
> > > > > Any feedback is appreciated.
> > > > >
> > > > > On Tue, Mar 15, 2016 at 7:39 PM, Rajini Sivaram <
> > > > > rajinisiva...@googlemail.com> wrote:
> > > > >
> > > > > > Following on from the discussions in the KIP meeting today, the
> > > > > suggestion
> > > > > > is to implement a cut-down version of KIP-43 for 0.10.0.0 with a
> > > > > follow-on
> > > > > > KIP after the release to address support for custom mechanisms.
> > > > > >
> > > > > > Changes to be removed from KIP-43:
> > > > > >
> > > > > >    1. Remove the configuration for CallbackHandler. The callback
> > > > handler
> > > > > >    implementation in Kafka will support Kerberos, PLAIN and
> > > Digest-MD5.
> > > > > It
> > > > > >    will not support custom or more complex mechanisms which require
> > > > > additional
> > > > > >    callbacks.
> > > > > >    2. Remove the configuration for Login. The Login implementation
> > in
> > > > > >    Kafka will support Kerberos and any other mechanism (PLAIN,
> > > > > Digest-MD5 etc)
> > > > > >    that doesn't require functionality like token refresh.
> > > > > >
> > > > > > Changes included in KIP-43:
> > > > > >
> > > > > >    1. Configurable mechanism
> > > > > >    2. Support for multiple mechanisms in the broker
> > > > > >    3. Implementation of SASL/PLAIN
> > > > > >
> > > > > > If there are no objections to this, I can update the KIP and the PR
> > > by
> > > > > > tomorrow. And move the support for custom mechanisms into another
> > KIP
> > > > and
> > > > > > PR for review after the release of 0.10.0.0.
> > > > > >
> > > > > >
> > > > > > On Mon, Mar 14, 2016 at 7:48 AM, Rajini Sivaram <
> > > > > > rajinisiva...@googlemail.com> wrote:
> > > > > >
> > > > > >> Harsha,
> > > > > >>
> > > > > >> You are right, we don't expect to override callback handler or
> > login
> > > > for
> > > > > >> Digest-MD5.
> > > > > >>
> > > > > >> Pluggable CallbackHandler and Login modules enable custom SASL
> > > > > mechanisms
> > > > > >> to be implemented without modifying Kafka. For instance, it would
> > > > enable
> > > > > >> KIP-44 (
> > > > > >>
> > > > >
> > > >
> > >
> > https://cwiki.apache.org/confluence/display/KAFKA/KIP-44+-+Allow+Kafka+to+have+a+customized+security+protocol
> > > > > )
> > > > > >> to be implemented without making the whole security protocol
> > > > pluggable.
> > > > > Tao
> > > > > >> Xiao has already confirmed earlier in this discussion thread that
> > > the
> > > > > >> proposed callback handler and login interfaces are suitable for
> > > their
> > > > > >> custom authentication.
> > > > > >>
> > > > > >>
> > > > > >>
> > > > > >> On Sun, Mar 13, 2016 at 6:59 PM, Harsha <ka...@harsha.io> wrote:
> > > > > >>
> > > > > >>> Agree with Gwen here. I feel like these additional pluggable
> > Login
> > > > > >>> Modules are making this KIP complex. Since the main goal of the
> > KIP
> > > > is
> > > > > >>> to enable additional mechanism , can we limit the scope to that
> > and
> > > > If
> > > > > >>> we feel necessary for pluggable Login and callback handler
> > classes
> > > we
> > > > > >>> can address in another JIRA.
> > > > > >>>
> > > > > >>> Adding digest-md5 ,password callbacks can be done to existing
> > > > > >>> callbackhandler without  expose it as pluggable class. It would
> > be
> > > > > >>> useful to have broker support multiple mechanisms.  I haven't
> > seen
> > > > > >>> anyone using more than this in hadoop . It might be different for
> > > > Kafka
> > > > > >>> but I personally haven't seen anyone asking for this yet.
> > > > > >>>
> > > > > >>> Thanks,
> > > > > >>> Harsha
> > > > > >>>
> > > > > >>>
> > > > > >>> On Thu, Mar 10, 2016, at 01:44 AM, Rajini Sivaram wrote:
> > > > > >>> > Gwen,
> > > > > >>> >
> > > > > >>> > Just to be clear, the alternative would be:
> > > > > >>> >
> > > > > >>> > *jaas.conf:*
> > > > > >>> >
> > > > > >>> > GssapiKafkaServer {
> > > > > >>> >
> > > > > >>> > com.ibm.security.auth.module.Krb5LoginModule required
> > > > > >>> > credsType=both
> > > > > >>> > useKeytab="file:/kafka/key.tab"
> > > > > >>> > principal="kafka/localh...@example.com <http://example.com/>";
> > > > > >>> >
> > > > > >>> > };
> > > > > >>> >
> > > > > >>> > SmartcardKafkaServer {
> > > > > >>> >
> > > > > >>> >   example.SmartcardLoginModule required
> > > > > >>> >
> > > > > >>> >   cardNumber=123;
> > > > > >>> >
> > > > > >>> > };
> > > > > >>> >
> > > > > >>> >
> > > > > >>> > *KafkaConfig*
> > > > > >>> >
> > > > > >>> >
> > > > > >>> >
> > > > > >>> >    - login.context.map={"GSSAPI="GssapiKafkaServer",
> > > > > >>> >       "SMARTCARD"=SmartcardKafkaServer}
> > > > > >>> >       - login.class.map={"GSSAPI=GssapiLogin.class,
> > > > > >>> >       "SMARTCARD"=SmartcardLogin.class}
> > > > > >>> >       -
> > > > > >>> callback.handler.class.map={"GSSAPI"=GssapiCallbackHandler.class,
> > > > > >>> >       "SMARTCARD"=SmartcardCallbackHandler.class}
> > > > > >>> >
> > > > > >>> > *Client Config *
> > > > > >>> > Same as the server, but with only one entry allowed in each map
> > > and
> > > > > >>> > jaas.conf
> > > > > >>> >
> > > > > >>> >
> > > > > >>> >
> > > > > >>> > This is a different model from the Java standard for supporting
> > > > > >>> multiple
> > > > > >>> > logins. As a developer, I am inclined to stick with approaches
> > > that
> > > > > are
> > > > > >>> > widely in use like JSSE. But this alternative can be made to
> > work
> > > > if
> > > > > >>> the
> > > > > >>> > Kafka community feels it is more appropriate for Kafka. If you
> > > know
> > > > > of
> > > > > >>> > other systems which use this approach, that would be helpful.
> > > > > >>> >
> > > > > >>> >
> > > > > >>> >
> > > > > >>> > On Thu, Mar 10, 2016 at 2:07 AM, Gwen Shapira <
> > g...@confluent.io
> > > >
> > > > > >>> wrote:
> > > > > >>> >
> > > > > >>> > > What I'm hearing is that:
> > > > > >>> > >
> > > > > >>> > > 1. In order to support authentication mechanisms that were
> > not
> > > > > >>> written
> > > > > >>> > > specifically with Kafka in mind, someone will need to write
> > the
> > > > > >>> > > integration between the mechanism and Kafka. This may include
> > > > Login
> > > > > >>> > > and CallbackHandler classes. This can be the mechanism
> > vendor,
> > > > the
> > > > > >>> > > user or a 3rd party vendor.
> > > > > >>> > > 2. If someone wrote the code to support a mechanism in Kafka,
> > > > and a
> > > > > >>> > > user will want to use more than one mechanism, they will
> > still
> > > > need
> > > > > >>> to
> > > > > >>> > > write a wrapper.
> > > > > >>> > > 3. In reality, #2 will not be necessary ("edge-case") because
> > > > Kafka
> > > > > >>> > > will actually already provide the callback needed (and
> > > presumably
> > > > > >>> also
> > > > > >>> > > the code to load the LoginModule provided by Example.com)?
> > > > > >>> > >
> > > > > >>> > > Tradeoff #1 sounds reasonable.
> > > > > >>> > > #2 and #3 do not sound reasonable considering one of the
> > goals
> > > of
> > > > > the
> > > > > >>> > > patch is to support multiple mechanisms. I don't think we
> > > should
> > > > > >>> force
> > > > > >>> > > our users to write code just to avoid writing it ourselves.
> > > > > >>> > > Configuring security is complex enough as is.
> > > > > >>> > > Furthermore, if we believe that "Smartcard is likely to use
> > > > > standard
> > > > > >>> > > NameCallback and PasswordCallback already implemented in
> > > Kafka" -
> > > > > why
> > > > > >>> > > do we even provide configuration for Login and
> > CallbackHandler
> > > > > >>> > > classes? Either we support multiple mechanisms written by
> > > > different
> > > > > >>> > > vendors, or we don't.
> > > > > >>> > >
> > > > > >>> > > Gwen
> > > > > >>> > >
> > > > > >>> > >
> > > > > >>> > > On Wed, Mar 9, 2016 at 12:32 AM, Rajini Sivaram
> > > > > >>> > > <rajinisiva...@googlemail.com> wrote:
> > > > > >>> > > > I am not saying that the developer at Example Inc. would
> > > > develop
> > > > > a
> > > > > >>> Login
> > > > > >>> > > > implementation that combines Smartcard and Kerberos because
> > > > > >>> Retailer uses
> > > > > >>> > > > both. I am saying that Example Inc develops the LoginModule
> > > > > >>> (similar to
> > > > > >>> > > JVM
> > > > > >>> > > > security providers developing Kerberos modules). But there
> > is
> > > > no
> > > > > >>> standard
> > > > > >>> > > > interface for Login to allow ticket refresh. So, it is very
> > > > > >>> unlikely that
> > > > > >>> > > > Example Inc would develop a Login implementation that works
> > > > with
> > > > > an
> > > > > >>> > > Apache
> > > > > >>> > > > Kafka defined interface ( Kafka developers wrote this code
> > > for
> > > > > >>> Kerberos).
> > > > > >>> > > > For a custom integration, the user (i.e. Retailer) would be
> > > > > >>> expected to
> > > > > >>> > > > develop this code if required.
> > > > > >>> > > >
> > > > > >>> > > > You could imagine that Smartcard is a commonly used
> > mechanism
> > > > and
> > > > > >>> a 3rd
> > > > > >>> > > > party develops code for integrating Smartcard with Kafka
> > and
> > > > > makes
> > > > > >>> the
> > > > > >>> > > > integration code (Login and CallbackHandler implementation)
> > > > > widely
> > > > > >>> > > > available, If Retailer wants to use clients or a broker
> > with
> > > > just
> > > > > >>> > > Smartcard
> > > > > >>> > > > enabled in their broker, they configure Kafka to use the
> > 3rd
> > > > > party
> > > > > >>> code,
> > > > > >>> > > > with no additional code development. But to combine
> > Smartcard
> > > > and
> > > > > >>> > > Kerberos,
> > > > > >>> > > > Retailer needs to write a few lines of code to incorporate
> > > both
> > > > > >>> Smartcard
> > > > > >>> > > > and Kerberos. I believe this is an edge case.
> > > > > >>> > > >
> > > > > >>> > > > Smartcard is likely to use standard NameCallback and
> > > > > >>> PasswordCallback
> > > > > >>> > > > already implemented in Kafka and Kerberos support exists in
> > > > > Kafka.
> > > > > >>> So it
> > > > > >>> > > is
> > > > > >>> > > > very likely that Retailer doesn't need to override Login or
> > > > > >>> > > CallbackHandler
> > > > > >>> > > > in this case. And it would just be a matter of configuring
> > > the
> > > > > >>> > > mechanisms.
> > > > > >>> > > >
> > > > > >>> > > > On Wed, Mar 9, 2016 at 12:48 AM, Gwen Shapira <
> > > > g...@confluent.io
> > > > > >
> > > > > >>> wrote:
> > > > > >>> > > >
> > > > > >>> > > >> "Since smart card logins are not built into Kafka (or the
> > > > JDK),
> > > > > >>> you
> > > > > >>> > > need a
> > > > > >>> > > >> developer to build the login module. So the developer
> > > > implements
> > > > > >>> > > >> example.SmartcardLoginModule. In addition, the developer
> > may
> > > > > also
> > > > > >>> > > implement
> > > > > >>> > > >> callback handlers for the SASL client or server  and a
> > login
> > > > > >>> class to
> > > > > >>> > > keep
> > > > > >>> > > >> this login refreshed. The callback handlers and login
> > > > > >>> implementation
> > > > > >>> > > >> support all the mechanisms that the organisation supports
> > -
> > > in
> > > > > >>> this case
> > > > > >>> > > >> Kerberos and smart card."
> > > > > >>> > > >>
> > > > > >>> > > >> In this case, the developer works for Example Inc (which
> > > > > develops
> > > > > >>> > > >> SmartCard authentication modules), while I work for
> > Retailer
> > > > and
> > > > > >>> need
> > > > > >>> > > >> to use his module.
> > > > > >>> > > >> You assume that developer from Example Inc knows about all
> > > the
> > > > > >>> > > >> mechanisms that I have enabled in my Kafka cluster and he
> > is
> > > > > >>> capable
> > > > > >>> > > >> of developing a Login class and maybe a callback handler
> > > that
> > > > > >>> supports
> > > > > >>> > > >> all of them. I think this is an unreasonable expectation.
> > > > > >>> > > >>
> > > > > >>> > > >> I think that allowing plug in of Login method and single
> > > > > Callback
> > > > > >>> > > >> handler is not a good extensible solution for multiple
> > > > > >>> mechanisms. We
> > > > > >>> > > >> should probably supply a Kafka-based LoginContext and
> > > > > >>> CallbackHandler
> > > > > >>> > > >> that will be able to delegate to implementations of
> > > > LoginModules
> > > > > >>> and
> > > > > >>> > > >> Callback Handlers based on mechanism out of a list
> > supplied
> > > > by a
> > > > > >>> user.
> > > > > >>> > > >> I agree it is more complex, but otherwise we are asking of
> > > too
> > > > > >>> much
> > > > > >>> > > >> coordination from whoever implements CallbackHandlers and
> > > > Login
> > > > > >>> > > >> methods.
> > > > > >>> > > >>
> > > > > >>> > > >> Gwen
> > > > > >>> > > >>
> > > > > >>> > > >> On Tue, Mar 8, 2016 at 3:35 PM, Rajini Sivaram
> > > > > >>> > > >> <rajinisiva...@googlemail.com> wrote:
> > > > > >>> > > >> > As an admin, you would configure login modules using
> > > > standard
> > > > > >>> JAAS
> > > > > >>> > > >> > configuration. So, if you are supporting Kerberos and
> > > smart
> > > > > >>> card login
> > > > > >>> > > >> > modules within a single broker, in your jaas.conf you
> > > would
> > > > > >>> specify:
> > > > > >>> > > >> >
> > > > > >>> > > >> > KafkaServer {
> > > > > >>> > > >> >
> > > > > >>> > > >> > com.ibm.security.auth.module.Krb5LoginModule required
> > > > > >>> > > >> > credsType=both
> > > > > >>> > > >> > useKeytab="file:/kafka/key.tab"
> > > > > >>> > > >> > principal="kafka/localh...@example.com";
> > > > > >>> > > >> >
> > > > > >>> > > >> >   example.SmartcardLoginModule required
> > > > > >>> > > >> >
> > > > > >>> > > >> >   cardNumber=123
> > > > > >>> > > >> >
> > > > > >>> > > >> > };
> > > > > >>> > > >> >
> > > > > >>> > > >> >
> > > > > >>> > > >> > Since smart card logins are not built into Kafka (or the
> > > > JDK),
> > > > > >>> you
> > > > > >>> > > need a
> > > > > >>> > > >> > developer to build the login module. So the developer
> > > > > implements
> > > > > >>> > > >> > example.SmartcardLoginModule. In addition, the developer
> > > may
> > > > > >>> also
> > > > > >>> > > >> implement
> > > > > >>> > > >> > callback handlers for the SASL client or server  and a
> > > login
> > > > > >>> class to
> > > > > >>> > > >> keep
> > > > > >>> > > >> > this login refreshed. The callback handlers and login
> > > > > >>> implementation
> > > > > >>> > > >> > support all the mechanisms that the organisation
> > supports
> > > -
> > > > in
> > > > > >>> this
> > > > > >>> > > case
> > > > > >>> > > >> > Kerberos and smart card.
> > > > > >>> > > >> >
> > > > > >>> > > >> > As an admin, if you are using mechanisms built into
> > Kafka,
> > > > you
> > > > > >>> simply
> > > > > >>> > > >> > specify a JAAS config with the combination of mechanisms
> > > you
> > > > > >>> want and
> > > > > >>> > > you
> > > > > >>> > > >> > are done. If you are adding new mechanisms, it clearly
> > > can't
> > > > > be
> > > > > >>> done
> > > > > >>> > > >> > without some additional code to implement that
> > mechanism.
> > > > The
> > > > > >>> callback
> > > > > >>> > > >> and
> > > > > >>> > > >> > login interfaces are configurable to ensure that (as a
> > > > > >>> developer), you
> > > > > >>> > > >> can
> > > > > >>> > > >> > build custom mechanisms without modifying Kafka. SASL
> > was
> > > > > >>> designed
> > > > > >>> > > >> > precisely to do this. But at the moment, Kafka restricts
> > > > what
> > > > > >>> type of
> > > > > >>> > > >> > authentication you can perform with SASL.
> > > > > >>> > > >> >
> > > > > >>> > > >> > Back to the questions:
> > > > > >>> > > >> > 1. *How does the proposed Login class interact with
> > > > > >>> LoginContext and *
> > > > > >>> > > >> > *LoginModule.*
> > > > > >>> > > >> > Login class performs *LoginContext.login(). *This
> > performs
> > > > > >>> login for
> > > > > >>> > > all
> > > > > >>> > > >> > the login modules of that context (this is standard Java
> > > > > >>> function).
> > > > > >>> > > Login
> > > > > >>> > > >> > is cached with a reference counter to keep it alive.
> > > > > >>> > > >> >
> > > > > >>> > > >> > 2. *Do we really need a pluggable Login class, when
> > users
> > > > > >>> > > >> **(administrators,
> > > > > >>> > > >> > not developers) are more likely to want to specify
> > > > > >>> LoginModules?*
> > > > > >>> > > >> > Administrators specify *LoginModules. *Developers
> > > implement
> > > > > new
> > > > > >>> > > >> mechanisms.
> > > > > >>> > > >> > The pluggable *Login* class enables the developer to
> > > > implement
> > > > > >>> new
> > > > > >>> > > >> > mechanisms without changing Kafka. If Kafka didn't have
> > a
> > > > > >>> default
> > > > > >>> > > >> Kerberos
> > > > > >>> > > >> > implementation and a user wanted to use Kerberos,
> > > > pluggability
> > > > > >>> of
> > > > > >>> > > >> *Login* class
> > > > > >>> > > >> > enables the user to include Kerberos without changing
> > > Kafka.
> > > > > >>> Not that
> > > > > >>> > > we
> > > > > >>> > > >> > want another Kerberos, but Tao had a requirement to
> > > enable a
> > > > > >>> custom
> > > > > >>> > > >> > mechanism with functionality similar to Kerberos (see
> > > > KIP-44).
> > > > > >>> > > Pluggable
> > > > > >>> > > >> > *Login* supports this use case without replacing the
> > > entire
> > > > > >>> > > >> authentication
> > > > > >>> > > >> > mechanism in Kafka.
> > > > > >>> > > >> >
> > > > > >>> > > >> > *3. How will users get to specify multiple
> > LoginModules?*
> > > > > >>> > > >> > Standard Java JAAS configuration - see example above.
> > > > > >>> > > >> >
> > > > > >>> > > >> >
> > > > > >>> > > >> > *4. It sounds like different LoginModules may need
> > > > > >>> > > >> > different CallbackHandlers. Since we only allow a single
> > > > > >>> > > >> > pluggableCallbackHandler class in the KIP-43
> > > configuration,
> > > > > how
> > > > > >>> will
> > > > > >>> > > this
> > > > > >>> > > >> > be handled?*
> > > > > >>> > > >> > One LoginContext, one subject, one callback handler,
> > > > multiple
> > > > > >>> login
> > > > > >>> > > >> > modules. This is the Java model for login. And it works
> > > well
> > > > > >>> because
> > > > > >>> > > >> > callback handlers tend to be fairly standard. Even if
> > the
> > > > > smart
> > > > > >>> card
> > > > > >>> > > SASL
> > > > > >>> > > >> > callbacks needed to do something wildly different and
> > you
> > > > > >>> wanted a
> > > > > >>> > > broker
> > > > > >>> > > >> > that combined this with Kerberos, you would implement a
> > > > > >>> callback that
> > > > > >>> > > >> > looked like the code below.
> > > > > >>> > > >> >
> > > > > >>> > > >> >         private CallbackHandler handler;
> > > > > >>> > > >> >
> > > > > >>> > > >> >         public void configure(Map<String, ?> configs,
> > Mode
> > > > > mode,
> > > > > >>> > > Subject
> > > > > >>> > > >> > subject, String mechanism) {public void
> > > > configure(Map<String,
> > > > > ?>
> > > > > >>> > > configs,
> > > > > >>> > > >> > Mode mode, Subject subject, String mechanism) {
> > > > > >>> > > >> >
> > > > > >>> > > >> >             switch (mechanism) {
> > > > > >>> > > >> >
> > > > > >>> > > >> >                 case "GSSAPI" : handler = new
> > > > > >>> GssapiCallbackHandler();
> > > > > >>> > > >> break
> > > > > >>> > > >> > ;
> > > > > >>> > > >> >
> > > > > >>> > > >> >                 case "SMARTCARD" : handler = new
> > > > > >>> > > >> SmartcardCallbackHandler();
> > > > > >>> > > >> > break;
> > > > > >>> > > >> >
> > > > > >>> > > >> >             }
> > > > > >>> > > >> >
> > > > > >>> > > >> >         }
> > > > > >>> > > >> >
> > > > > >>> > > >> >
> > > > > >>> > > >> >         public void handle(Callback[] callbacks) throws
> > > > > >>> IOException,
> > > > > >>> > > >> > UnsupportedCallbackException {
> > > > > >>> > > >> >
> > > > > >>> > > >> >             handler.handle(callbacks);
> > > > > >>> > > >> >
> > > > > >>> > > >> >         }
> > > > > >>> > > >> >
> > > > > >>> > > >> > But I don't see this as just an admin configuration.
> > This
> > > is
> > > > > >>> some code
> > > > > >>> > > >> > developed alongside a new mechanism. Yes, you can add a
> > > new
> > > > > >>> > > configuration
> > > > > >>> > > >> > type in Kafka that maps mechanism to callback handler
> > > class
> > > > to
> > > > > >>> avoid
> > > > > >>> > > the
> > > > > >>> > > >> > switch statement. But that doesn't remove the need for
> > new
> > > > > code
> > > > > >>> > > >> altogether
> > > > > >>> > > >> > since you still need to implement
> > > SmartcardCallbackHandler.
> > > > > >>> Multiple
> > > > > >>> > > >> > conflicting callback handlers within one broker to
> > support
> > > > > >>> complete
> > > > > >>> > > >> > different behaviour is an edge case. Since the design
> > > > supports
> > > > > >>> > > >> > full flexibility in terms of functionality and you have
> > to
> > > > > >>> write new
> > > > > >>> > > code
> > > > > >>> > > >> > for new mechanisms anyway, this feels like the simplest
> > > > > >>> solution.
> > > > > >>> > > >> >
> > > > > >>> > > >> >
> > > > > >>> > > >> >
> > > > > >>> > > >> > On Tue, Mar 8, 2016 at 8:23 PM, Gwen Shapira <
> > > > > g...@confluent.io
> > > > > >>> >
> > > > > >>> > > wrote:
> > > > > >>> > > >> >
> > > > > >>> > > >> >> I guess what is unclear to me is:
> > > > > >>> > > >> >>
> > > > > >>> > > >> >> 1. How does the proposed Login class interact with
> > > > > >>> LoginContext and
> > > > > >>> > > >> >> LoginModule.
> > > > > >>> > > >> >> 2. Do we really need a pluggable Login class, when
> > users
> > > > > >>> > > >> >> (administrators, not developers) are more likely to
> > want
> > > to
> > > > > >>> specify
> > > > > >>> > > >> >> LoginModules?
> > > > > >>> > > >> >> 3. How will users get to specify multiple LoginModules?
> > > > > >>> > > >> >> 4. It sounds like different LoginModules may need
> > > different
> > > > > >>> > > >> >> CallbackHandlers. Since we only allow a single
> > pluggable
> > > > > >>> > > >> >> CallbackHandler class in the KIP-43 configuration, how
> > > will
> > > > > >>> this be
> > > > > >>> > > >> >> handled?
> > > > > >>> > > >> >>
> > > > > >>> > > >> >> In other words, suppose I want my Kafka installation to
> > > > > >>> support both
> > > > > >>> > > >> >> Kerberos and SmartCard mechanisms, can you tell me how
> > to
> > > > > >>> configure
> > > > > >>> > > >> >> Kafka? (as admin, not developer)?
> > > > > >>> > > >> >>
> > > > > >>> > > >> >> Gwen
> > > > > >>> > > >> >>
> > > > > >>> > > >> >>
> > > > > >>> > > >> >>
> > > > > >>> > > >> >> On Tue, Mar 8, 2016 at 11:46 AM, Rajini Sivaram
> > > > > >>> > > >> >> <rajinisiva...@googlemail.com> wrote:
> > > > > >>> > > >> >> > Gwen,
> > > > > >>> > > >> >> >
> > > > > >>> > > >> >> > I am not sure I understand your concern. Java login
> > > > > contexts
> > > > > >>> > > support
> > > > > >>> > > >> >> > multiple login modules precisely to support this type
> > > of
> > > > > >>> real-world
> > > > > >>> > > >> >> > scenario.
> > > > > >>> > > >> >> >
> > > > > >>> > > >> >> > From Javadoc of
> > > *javax.security.auth.login.LoginContext*:
> > > > > >>> > > >> >> >
> > > > > >>> > > >> >> > *In addition to supporting pluggable authentication,
> > > this
> > > > > >>> class
> > > > > >>> > > also
> > > > > >>> > > >> >> > supports the notion of stacked authentication.
> > > > Applications
> > > > > >>> may be
> > > > > >>> > > >> >> > configured to use more than one LoginModule. For
> > > example,
> > > > > >>> one could
> > > > > >>> > > >> >> > configure both a Kerberos LoginModule and a smart
> > card
> > > > > >>> LoginModule
> > > > > >>> > > >> under
> > > > > >>> > > >> >> an
> > > > > >>> > > >> >> > application. *
> > > > > >>> > > >> >> >
> > > > > >>> > > >> >> > * A typical caller instantiates a LoginContext with a
> > > > name
> > > > > >>> and a
> > > > > >>> > > >> >> > CallbackHandler. LoginContext uses the name as the
> > > index
> > > > > >>> into a
> > > > > >>> > > >> >> > Configuration to determine which LoginModules should
> > be
> > > > > >>> used, and
> > > > > >>> > > >> which
> > > > > >>> > > >> >> > ones must succeed in order for the overall
> > > authentication
> > > > > to
> > > > > >>> > > succeed.
> > > > > >>> > > >> The
> > > > > >>> > > >> >> > CallbackHandler is passed to the underlying
> > > LoginModules
> > > > so
> > > > > >>> they
> > > > > >>> > > may
> > > > > >>> > > >> >> > communicate and interact with users (prompting for a
> > > > > >>> username and
> > > > > >>> > > >> >> password
> > > > > >>> > > >> >> > via a graphical user interface, for example).*
> > > > > >>> > > >> >> >
> > > > > >>> > > >> >> > If it is good enough for Java, surely it must be good
> > > > > enough
> > > > > >>> for
> > > > > >>> > > >> Kafka.
> > > > > >>> > > >> >> We
> > > > > >>> > > >> >> > don't expect users to directly use existing classes
> > > when
> > > > > >>> they want
> > > > > >>> > > to
> > > > > >>> > > >> >> > support complex new mechanisms. Login is not a
> > standard
> > > > > >>> interface,
> > > > > >>> > > >> and we
> > > > > >>> > > >> >> > want to make callback handlers configurable. So we do
> > > > > require
> > > > > >>> > > users to
> > > > > >>> > > >> >> wrap
> > > > > >>> > > >> >> > their existing classes in our interface. And the
> > > > interfaces
> > > > > >>> make it
> > > > > >>> > > >> >> > possible to plugin any number of mechanisms. Am I
> > > missing
> > > > > >>> > > something?
> > > > > >>> > > >> >> >
> > > > > >>> > > >> >> >
> > > > > >>> > > >> >> >
> > > > > >>> > > >> >> > On Tue, Mar 8, 2016 at 4:49 PM, Gwen Shapira <
> > > > > >>> g...@confluent.io>
> > > > > >>> > > >> wrote:
> > > > > >>> > > >> >> >
> > > > > >>> > > >> >> >> Yes, I understand that.
> > > > > >>> > > >> >> >>
> > > > > >>> > > >> >> >> However, because the current configuration only
> > > allows a
> > > > > >>> single
> > > > > >>> > > >> >> >> callback and a single login module, I need to
> > supply a
> > > > > >>> class that
> > > > > >>> > > >> >> >> supports callbacks or logins for every single
> > > mechanism
> > > > > >>> that I
> > > > > >>> > > need
> > > > > >>> > > >> to
> > > > > >>> > > >> >> >> support. I question whether this is applicable in
> > > > > real-world
> > > > > >>> > > scenario
> > > > > >>> > > >> >> >> where a user may need to support mechanisms that
> > were
> > > > > >>> written by
> > > > > >>> > > >> >> >> different vendors and where a single class that
> > > > implements
> > > > > >>> all the
> > > > > >>> > > >> >> >> necessary modules or callsbacks is very unlikely to
> > > > exist.
> > > > > >>> > > >> >> >>
> > > > > >>> > > >> >> >> I agree that supporting a list of classes and
> > > > dynamically
> > > > > >>> using
> > > > > >>> > > the
> > > > > >>> > > >> >> >> correct callbacks and modules based on configuration
> > > is
> > > > > >>> complex,
> > > > > >>> > > but
> > > > > >>> > > >> I
> > > > > >>> > > >> >> >> don't think this feature is useful enough without
> > it.
> > > > > >>> > > >> >> >>
> > > > > >>> > > >> >> >> Gwen
> > > > > >>> > > >> >> >>
> > > > > >>> > > >> >> >> On Tue, Mar 8, 2016 at 2:40 AM, Rajini Sivaram
> > > > > >>> > > >> >> >> <rajinisiva...@googlemail.com> wrote:
> > > > > >>> > > >> >> >> > Gwen,
> > > > > >>> > > >> >> >> >
> > > > > >>> > > >> >> >> > Sorry if this is not clear in the KIP. The goal of
> > > the
> > > > > >>> KIP is to
> > > > > >>> > > >> >> enable
> > > > > >>> > > >> >> >> new
> > > > > >>> > > >> >> >> > mechanisms to be added without any changes to
> > Apache
> > > > > >>> Kafka. The
> > > > > >>> > > >> >> >> > configuration proposed by the KIP is based on the
> > > > > >>> > > configurability
> > > > > >>> > > >> of
> > > > > >>> > > >> >> the
> > > > > >>> > > >> >> >> > Java SASL API and what it would take to add a new
> > > > > >>> mechanism
> > > > > >>> > > >> similar to
> > > > > >>> > > >> >> >> > Kerberos/PLAIN/Digest-MD5 and the requirements
> > that
> > > > Tao
> > > > > >>> raised
> > > > > >>> > > for
> > > > > >>> > > >> >> custom
> > > > > >>> > > >> >> >> > authentication.
> > > > > >>> > > >> >> >> >
> > > > > >>> > > >> >> >> > The PR includes a test for Digest-MD5 which is not
> > > > > >>> included in
> > > > > >>> > > >> Kafka,
> > > > > >>> > > >> >> but
> > > > > >>> > > >> >> >> > is tested using the configuration options that
> > allow
> > > > new
> > > > > >>> > > mechanisms
> > > > > >>> > > >> >> to be
> > > > > >>> > > >> >> >> > added.
> > > > > >>> > > >> >> >> >
> > > > > >>> > > >> >> >> > If you want to add a more complex mechanism which
> > > > > requires
> > > > > >>> > > >> integration
> > > > > >>> > > >> >> >> with
> > > > > >>> > > >> >> >> > some external authentication libraries for login
> > or
> > > > > >>> callback
> > > > > >>> > > >> handlers,
> > > > > >>> > > >> >> >> you
> > > > > >>> > > >> >> >> > can do that by configuring your own callback
> > handler
> > > > and
> > > > > >>> login
> > > > > >>> > > >> >> >> > implementation. The login class allows you to add
> > > > > >>> additional
> > > > > >>> > > >> threads
> > > > > >>> > > >> >> (for
> > > > > >>> > > >> >> >> > instance for token refresh), while the callback
> > > > handler
> > > > > >>> extends
> > > > > >>> > > the
> > > > > >>> > > >> >> >> > standard Java CallbackHandler interface, enabling
> > > you
> > > > to
> > > > > >>> > > override
> > > > > >>> > > >> any
> > > > > >>> > > >> >> of
> > > > > >>> > > >> >> >> > the default callbacks in Kafka to provide your own
> > > > > >>> behaviour. If
> > > > > >>> > > >> you
> > > > > >>> > > >> >> want
> > > > > >>> > > >> >> >> > to add your own login modules, SASL server or SASL
> > > > > client
> > > > > >>> > > >> >> implementation
> > > > > >>> > > >> >> >> > for a mechanism that is not supported in your JDK,
> > > you
> > > > > >>> can do
> > > > > >>> > > that
> > > > > >>> > > >> by
> > > > > >>> > > >> >> >> > adding new Java security modules, using the
> > built-in
> > > > > >>> > > pluggability
> > > > > >>> > > >> of
> > > > > >>> > > >> >> Java
> > > > > >>> > > >> >> >> > security.
> > > > > >>> > > >> >> >> >
> > > > > >>> > > >> >> >> > And finally, if you want to enable multiple
> > > mechanisms
> > > > > in
> > > > > >>> your
> > > > > >>> > > >> Kafka
> > > > > >>> > > >> >> >> > brokers, you can specify a callback handler class
> > > that
> > > > > >>> either
> > > > > >>> > > >> provides
> > > > > >>> > > >> >> >> the
> > > > > >>> > > >> >> >> > handlers for all the mechanisms (as the PR does
> > for
> > > > > >>> Kerberos and
> > > > > >>> > > >> >> PLAIN)
> > > > > >>> > > >> >> >> or
> > > > > >>> > > >> >> >> > a delegator that calls different callback handlers
> > > > based
> > > > > >>> on the
> > > > > >>> > > >> >> >> mechanism.
> > > > > >>> > > >> >> >> > And for login, you provide a single or a compound
> > > > class
> > > > > >>> that
> > > > > >>> > > >> provides
> > > > > >>> > > >> >> any
> > > > > >>> > > >> >> >> > additional login logic for all the login modules
> > > that
> > > > > you
> > > > > >>> have
> > > > > >>> > > >> >> specified
> > > > > >>> > > >> >> >> > for KafkaServer.
> > > > > >>> > > >> >> >> >
> > > > > >>> > > >> >> >> > Hope that helps.
> > > > > >>> > > >> >> >> >
> > > > > >>> > > >> >> >> >
> > > > > >>> > > >> >> >> > On Tue, Mar 8, 2016 at 1:17 AM, Gwen Shapira <
> > > > > >>> g...@confluent.io
> > > > > >>> > > >
> > > > > >>> > > >> >> wrote:
> > > > > >>> > > >> >> >> >
> > > > > >>> > > >> >> >> >> Can you explain the process for a adding a new
> > > > > mechanism
> > > > > >>> based
> > > > > >>> > > on
> > > > > >>> > > >> >> >> current
> > > > > >>> > > >> >> >> >> KIP?
> > > > > >>> > > >> >> >> >>
> > > > > >>> > > >> >> >> >> My thought is that if it requires modifying
> > Apache
> > > > > Kafka
> > > > > >>> code,
> > > > > >>> > > it
> > > > > >>> > > >> is
> > > > > >>> > > >> >> >> >> not pluggable enough.
> > > > > >>> > > >> >> >> >>
> > > > > >>> > > >> >> >> >> On Mon, Mar 7, 2016 at 4:04 PM, Rajini Sivaram
> > > > > >>> > > >> >> >> >> <rajinisiva...@googlemail.com> wrote:
> > > > > >>> > > >> >> >> >> > Gwen,
> > > > > >>> > > >> >> >> >> >
> > > > > >>> > > >> >> >> >> > In cases where you want completely different
> > > > > callbacks
> > > > > >>> for
> > > > > >>> > > >> >> different
> > > > > >>> > > >> >> >> >> > mechanisms, I was thinking that the choice
> > would
> > > be
> > > > > >>> between a
> > > > > >>> > > >> map
> > > > > >>> > > >> >> of
> > > > > >>> > > >> >> >> >> > classes (mechanism -> callbackHandler class)
> > or a
> > > > > >>> delegator
> > > > > >>> > > >> class
> > > > > >>> > > >> >> that
> > > > > >>> > > >> >> >> >> > chooses the appropriate callback handler class
> > > > based
> > > > > on
> > > > > >>> > > >> mechanism.
> > > > > >>> > > >> >> I
> > > > > >>> > > >> >> >> >> chose
> > > > > >>> > > >> >> >> >> > the latter since it makes it easier to
> > configure
> > > in
> > > > > >>> Kafka.
> > > > > >>> > > >> Since we
> > > > > >>> > > >> >> >> >> create
> > > > > >>> > > >> >> >> >> > a callback handler for each channel and
> > configure
> > > > it
> > > > > >>> with the
> > > > > >>> > > >> >> >> >> > client-selected mechanism, it is
> > straightforward
> > > to
> > > > > >>> have one
> > > > > >>> > > >> >> wrapper
> > > > > >>> > > >> >> >> >> class
> > > > > >>> > > >> >> >> >> > that delegates to the right mechanism-specific
> > > > class
> > > > > to
> > > > > >>> > > handle
> > > > > >>> > > >> >> >> callbacks.
> > > > > >>> > > >> >> >> >> > In many cases, a single class may be sufficient
> > > > (the
> > > > > >>> PR uses
> > > > > >>> > > a
> > > > > >>> > > >> >> single
> > > > > >>> > > >> >> >> >> > callback class for Kerberos and PLAIN). I do
> > see
> > > > your
> > > > > >>> point
> > > > > >>> > > >> about
> > > > > >>> > > >> >> the
> > > > > >>> > > >> >> >> >> > flexibility that multiple classes would
> > provide,
> > > > but
> > > > > >>> since
> > > > > >>> > > you
> > > > > >>> > > >> need
> > > > > >>> > > >> >> >> to be
> > > > > >>> > > >> >> >> >> > able to associate the callback with a mechanism
> > > for
> > > > > >>> this to
> > > > > >>> > > be
> > > > > >>> > > >> >> >> useful, I
> > > > > >>> > > >> >> >> >> am
> > > > > >>> > > >> >> >> >> > not sure if just a list would add value.
> > > > > >>> > > >> >> >> >> >
> > > > > >>> > > >> >> >> >> > Login class is slightly different since the
> > > > proposal
> > > > > >>> is to
> > > > > >>> > > use a
> > > > > >>> > > >> >> >> single
> > > > > >>> > > >> >> >> >> > login context with multiple login modules to
> > > handle
> > > > > >>> multiple
> > > > > >>> > > >> >> >> mechanisms.
> > > > > >>> > > >> >> >> >> In
> > > > > >>> > > >> >> >> >> > this case, you want to perform login for all
> > the
> > > > > >>> mechanisms
> > > > > >>> > > that
> > > > > >>> > > >> >> are
> > > > > >>> > > >> >> >> >> > enabled. And you want to call
> > > loginContext.login()
> > > > > >>> only once.
> > > > > >>> > > >> >> Again,
> > > > > >>> > > >> >> >> you
> > > > > >>> > > >> >> >> >> > can delegate to multiple classes if you wish to
> > > add
> > > > > >>> some
> > > > > >>> > > complex
> > > > > >>> > > >> >> >> >> > mechanism-specific logic, but a single login
> > > class
> > > > > >>> makes the
> > > > > >>> > > >> >> mapping
> > > > > >>> > > >> >> >> to a
> > > > > >>> > > >> >> >> >> > single login context and the login cache more
> > > > obvious
> > > > > >>> (the PR
> > > > > >>> > > >> has a
> > > > > >>> > > >> >> >> test
> > > > > >>> > > >> >> >> >> > that includes Kerberos and PLAIN).
> > > > > >>> > > >> >> >> >> >
> > > > > >>> > > >> >> >> >> > Thoughts?
> > > > > >>> > > >> >> >> >> >
> > > > > >>> > > >> >> >> >> > On Mon, Mar 7, 2016 at 9:57 PM, Gwen Shapira <
> > > > > >>> > > g...@confluent.io
> > > > > >>> > > >> >
> > > > > >>> > > >> >> >> wrote:
> > > > > >>> > > >> >> >> >> >
> > > > > >>> > > >> >> >> >> >> Hi,
> > > > > >>> > > >> >> >> >> >>
> > > > > >>> > > >> >> >> >> >> Before I can vote on this KIP, I have two
> > > > additional
> > > > > >>> > > questions
> > > > > >>> > > >> /
> > > > > >>> > > >> >> >> >> >> comments on the new configuration:
> > > > > >>> > > >> >> >> >> >>
> > > > > >>> > > >> >> >> >> >> 1. sasl.callback.handler.class - it looks like
> > > we
> > > > > >>> want a
> > > > > >>> > > single
> > > > > >>> > > >> >> class
> > > > > >>> > > >> >> >> >> >> that implements all mechanisms. I think this
> > > will
> > > > > >>> make it
> > > > > >>> > > >> >> difficult
> > > > > >>> > > >> >> >> to
> > > > > >>> > > >> >> >> >> >> extend since the only way I can add a
> > mechanism
> > > > will
> > > > > >>> be by
> > > > > >>> > > >> >> >> >> >> implementing every single existing mechanism
> > > > > >>> (otherwise
> > > > > >>> > > >> customers
> > > > > >>> > > >> >> >> will
> > > > > >>> > > >> >> >> >> >> need to choose between new and existing when
> > > > > >>> selecting which
> > > > > >>> > > >> >> class to
> > > > > >>> > > >> >> >> >> >> use). If Microsoft releases a proprietary "AD
> > > > > >>> Mechanism" and
> > > > > >>> > > >> >> Oracle
> > > > > >>> > > >> >> >> >> >> releases "OID mechanism", there will be no
> > class
> > > > > that
> > > > > >>> > > >> implements
> > > > > >>> > > >> >> >> both.
> > > > > >>> > > >> >> >> >> >> Can we make it a list of classes instead? I
> > > > realize
> > > > > >>> this
> > > > > >>> > > >> >> complicates
> > > > > >>> > > >> >> >> >> >> the code a bit (some kind of factory will be
> > > > > required
> > > > > >>> to
> > > > > >>> > > choose
> > > > > >>> > > >> >> the
> > > > > >>> > > >> >> >> >> >> right class to use), but important IMO.
> > > > > >>> > > >> >> >> >> >> 2. similar for sasl.login.class - if I have a
> > > > class
> > > > > >>> for
> > > > > >>> > > >> Kerberos
> > > > > >>> > > >> >> >> (with
> > > > > >>> > > >> >> >> >> >> refresh thread) and a class for "plain", we
> > need
> > > > to
> > > > > >>> be able
> > > > > >>> > > to
> > > > > >>> > > >> >> load
> > > > > >>> > > >> >> >> >> >> both.
> > > > > >>> > > >> >> >> >> >>
> > > > > >>> > > >> >> >> >> >> Gwen
> > > > > >>> > > >> >> >> >> >>
> > > > > >>> > > >> >> >> >> >> On Wed, Mar 2, 2016 at 12:30 AM, Rajini
> > Sivaram
> > > > > >>> > > >> >> >> >> >> <rajinisiva...@googlemail.com> wrote:
> > > > > >>> > > >> >> >> >> >> > Jun,
> > > > > >>> > > >> >> >> >> >> >
> > > > > >>> > > >> >> >> >> >> > Thanks, I have added a note to the KIP. I
> > will
> > > > > add a
> > > > > >>> > > comment
> > > > > >>> > > >> in
> > > > > >>> > > >> >> the
> > > > > >>> > > >> >> >> >> >> > implementation and also add a unit test to
> > > > ensure
> > > > > >>> that
> > > > > >>> > > >> conflicts
> > > > > >>> > > >> >> >> are
> > > > > >>> > > >> >> >> >> >> > avoided when version number is modified.
> > > > > >>> > > >> >> >> >> >> >
> > > > > >>> > > >> >> >> >> >> > On Tue, Mar 1, 2016 at 5:43 PM, Jun Rao <
> > > > > >>> j...@confluent.io
> > > > > >>> > > >
> > > > > >>> > > >> >> wrote:
> > > > > >>> > > >> >> >> >> >> >
> > > > > >>> > > >> >> >> >> >> >> Rajini,
> > > > > >>> > > >> >> >> >> >> >>
> > > > > >>> > > >> >> >> >> >> >> Thanks for the explanation. For 1, this
> > > implies
> > > > > >>> that we
> > > > > >>> > > have
> > > > > >>> > > >> >> to be
> > > > > >>> > > >> >> >> >> >> careful
> > > > > >>> > > >> >> >> >> >> >> with changing the 2-byte version in the
> > > future
> > > > to
> > > > > >>> avoid
> > > > > >>> > > >> >> conflict.
> > > > > >>> > > >> >> >> >> Could
> > > > > >>> > > >> >> >> >> >> you
> > > > > >>> > > >> >> >> >> >> >> document this in the KIP and also in the
> > > > > >>> implementation?
> > > > > >>> > > >> >> >> >> >> >>
> > > > > >>> > > >> >> >> >> >> >> Jun
> > > > > >>> > > >> >> >> >> >> >>
> > > > > >>> > > >> >> >> >> >> >> On Tue, Mar 1, 2016 at 2:47 AM, Rajini
> > > Sivaram
> > > > <
> > > > > >>> > > >> >> >> >> >> >> rajinisiva...@googlemail.com
> > > > > >>> > > >> >> >> >> >> >> > wrote:
> > > > > >>> > > >> >> >> >> >> >>
> > > > > >>> > > >> >> >> >> >> >> > Jun,
> > > > > >>> > > >> >> >> >> >> >> >
> > > > > >>> > > >> >> >> >> >> >> > Thank you for the review.
> > > > > >>> > > >> >> >> >> >> >> >
> > > > > >>> > > >> >> >> >> >> >> >
> > > > > >>> > > >> >> >> >> >> >> >    1. With GSSAPI, the first context
> > > > > >>> establishment
> > > > > >>> > > packet
> > > > > >>> > > >> >> starts
> > > > > >>> > > >> >> >> >> with
> > > > > >>> > > >> >> >> >> >> the
> > > > > >>> > > >> >> >> >> >> >> >    byte 0x60 (tag for APPLICATION-0)
> > > followed
> > > > > by
> > > > > >>> a
> > > > > >>> > > >> >> >> variable-length
> > > > > >>> > > >> >> >> >> >> >> encoded
> > > > > >>> > > >> >> >> >> >> >> >    size, followed by various tags and
> > > > contents.
> > > > > >>> And the
> > > > > >>> > > >> >> packet
> > > > > >>> > > >> >> >> also
> > > > > >>> > > >> >> >> >> >> >> > contains a
> > > > > >>> > > >> >> >> >> >> >> >    checksum. This is completely different
> > > > from
> > > > > >>> the
> > > > > >>> > > >> mechanism
> > > > > >>> > > >> >> >> packet
> > > > > >>> > > >> >> >> >> >> from
> > > > > >>> > > >> >> >> >> >> >> > Kafka
> > > > > >>> > > >> >> >> >> >> >> >    clients which start with a two-byte
> > > > version
> > > > > >>> set to
> > > > > >>> > > zero
> > > > > >>> > > >> >> >> >> currently,
> > > > > >>> > > >> >> >> >> >> >> > followed
> > > > > >>> > > >> >> >> >> >> >> >    by just a String mechanism.
> > > > > >>> > > >> >> >> >> >> >> >    2. Agreed, I have removed the version
> > > from
> > > > > the
> > > > > >>> > > server
> > > > > >>> > > >> >> >> response
> > > > > >>> > > >> >> >> >> in
> > > > > >>> > > >> >> >> >> >> the
> > > > > >>> > > >> >> >> >> >> >> >    KIP. Thanks.
> > > > > >>> > > >> >> >> >> >> >> >
> > > > > >>> > > >> >> >> >> >> >> >
> > > > > >>> > > >> >> >> >> >> >> > On Tue, Mar 1, 2016 at 2:33 AM, Jun Rao <
> > > > > >>> > > j...@confluent.io
> > > > > >>> > > >> >
> > > > > >>> > > >> >> >> wrote:
> > > > > >>> > > >> >> >> >> >> >> >
> > > > > >>> > > >> >> >> >> >> >> > > Rajini,
> > > > > >>> > > >> >> >> >> >> >> > >
> > > > > >>> > > >> >> >> >> >> >> > > Thanks for the updates. Just a couple
> > of
> > > > > minor
> > > > > >>> > > comments.
> > > > > >>> > > >> >> >> >> >> >> > >
> > > > > >>> > > >> >> >> >> >> >> > > 1. With the default GSSAPI, what's the
> > > > first
> > > > > >>> packet
> > > > > >>> > > that
> > > > > >>> > > >> >> the
> > > > > >>> > > >> >> >> >> client
> > > > > >>> > > >> >> >> >> >> >> sends
> > > > > >>> > > >> >> >> >> >> >> > > to the server? Is that completely
> > > different
> > > > > >>> from the
> > > > > >>> > > >> packet
> > > > > >>> > > >> >> >> >> format
> > > > > >>> > > >> >> >> >> >> that
> > > > > >>> > > >> >> >> >> >> >> > we
> > > > > >>> > > >> >> >> >> >> >> > > will use for non-GSSAPI mechanisms?
> > > > > >>> > > >> >> >> >> >> >> > >
> > > > > >>> > > >> >> >> >> >> >> > > 2. In the server response, it doesn't
> > > seem
> > > > > >>> that we
> > > > > >>> > > need
> > > > > >>> > > >> to
> > > > > >>> > > >> >> >> >> include
> > > > > >>> > > >> >> >> >> >> the
> > > > > >>> > > >> >> >> >> >> >> > > version since the client knows the
> > > version
> > > > of
> > > > > >>> the
> > > > > >>> > > >> request
> > > > > >>> > > >> >> >> that it
> > > > > >>> > > >> >> >> >> >> >> sends.
> > > > > >>> > > >> >> >> >> >> >> > >
> > > > > >>> > > >> >> >> >> >> >> > > Jun
> > > > > >>> > > >> >> >> >> >> >> > >
> > > > > >>> > > >> >> >> >> >> >> > > On Mon, Feb 29, 2016 at 10:14 AM,
> > Rajini
> > > > > >>> Sivaram <
> > > > > >>> > > >> >> >> >> >> >> > > rajinisiva...@googlemail.com> wrote:
> > > > > >>> > > >> >> >> >> >> >> > >
> > > > > >>> > > >> >> >> >> >> >> > > > Harsha,
> > > > > >>> > > >> >> >> >> >> >> > > >
> > > > > >>> > > >> >> >> >> >> >> > > > Thank you for the review. I will wait
> > > > > >>> another day
> > > > > >>> > > to
> > > > > >>> > > >> see
> > > > > >>> > > >> >> if
> > > > > >>> > > >> >> >> >> there
> > > > > >>> > > >> >> >> >> >> is
> > > > > >>> > > >> >> >> >> >> >> > more
> > > > > >>> > > >> >> >> >> >> >> > > > feedback and then start a voting
> > > thread.
> > > > > >>> > > >> >> >> >> >> >> > > >
> > > > > >>> > > >> >> >> >> >> >> > > > Rajini
> > > > > >>> > > >> >> >> >> >> >> > > >
> > > > > >>> > > >> >> >> >> >> >> > > > On Mon, Feb 29, 2016 at 2:51 PM,
> > > Harsha <
> > > > > >>> > > >> ka...@harsha.io
> > > > > >>> > > >> >> >
> > > > > >>> > > >> >> >> >> wrote:
> > > > > >>> > > >> >> >> >> >> >> > > >
> > > > > >>> > > >> >> >> >> >> >> > > > > Rajini,
> > > > > >>> > > >> >> >> >> >> >> > > > >               Thanks for the
> > changes
> > > to
> > > > > >>> the KIP.
> > > > > >>> > > It
> > > > > >>> > > >> >> looks
> > > > > >>> > > >> >> >> >> good
> > > > > >>> > > >> >> >> >> >> to
> > > > > >>> > > >> >> >> >> >> >> > me. I
> > > > > >>> > > >> >> >> >> >> >> > > > >               think we can move to
> > > > > voting.
> > > > > >>> > > >> >> >> >> >> >> > > > > Thanks,
> > > > > >>> > > >> >> >> >> >> >> > > > > Harsha
> > > > > >>> > > >> >> >> >> >> >> > > > >
> > > > > >>> > > >> >> >> >> >> >> > > > > On Mon, Feb 29, 2016, at 12:43 AM,
> > > > Rajini
> > > > > >>> Sivaram
> > > > > >>> > > >> >> wrote:
> > > > > >>> > > >> >> >> >> >> >> > > > > > I have added some more detail to
> > > the
> > > > > KIP
> > > > > >>> based
> > > > > >>> > > on
> > > > > >>> > > >> the
> > > > > >>> > > >> >> >> >> >> discussion
> > > > > >>> > > >> >> >> >> >> >> in
> > > > > >>> > > >> >> >> >> >> >> > > the
> > > > > >>> > > >> >> >> >> >> >> > > > > > last KIP meeting to simplify
> > > support
> > > > > for
> > > > > >>> > > multiple
> > > > > >>> > > >> >> >> >> mechanisms.
> > > > > >>> > > >> >> >> >> >> >> Have
> > > > > >>> > > >> >> >> >> >> >> > > also
> > > > > >>> > > >> >> >> >> >> >> > > > > > changed the property names to
> > > reflect
> > > > > >>> this.
> > > > > >>> > > >> >> >> >> >> >> > > > > >
> > > > > >>> > > >> >> >> >> >> >> > > > > > Also updated the PR in
> > > > > >>> > > >> >> >> >> >> >> > > >
> > > > > >>> https://issues.apache.org/jira/browse/KAFKA-3149
> > > > > >>> > > >> >> >> >> >> >> > > > > > to
> > > > > >>> > > >> >> >> >> >> >> > > > > > reflect the KIP.
> > > > > >>> > > >> >> >> >> >> >> > > > > >
> > > > > >>> > > >> >> >> >> >> >> > > > > > Any feedback is appreciated.
> > > > > >>> > > >> >> >> >> >> >> > > > > >
> > > > > >>> > > >> >> >> >> >> >> > > > > >
> > > > > >>> > > >> >> >> >> >> >> > > > > > On Tue, Feb 23, 2016 at 9:36 PM,
> > > > Rajini
> > > > > >>> > > Sivaram <
> > > > > >>> > > >> >> >> >> >> >> > > > > > rajinisiva...@googlemail.com>
> > > wrote:
> > > > > >>> > > >> >> >> >> >> >> > > > > >
> > > > > >>> > > >> >> >> >> >> >> > > > > > > I have updated the KIP based on
> > > the
> > > > > >>> > > discussion
> > > > > >>> > > >> in
> > > > > >>> > > >> >> the
> > > > > >>> > > >> >> >> KIP
> > > > > >>> > > >> >> >> >> >> >> meeting
> > > > > >>> > > >> >> >> >> >> >> > > > > today.
> > > > > >>> > > >> >> >> >> >> >> > > > > > >
> > > > > >>> > > >> >> >> >> >> >> > > > > > > Comments and feedback are
> > > welcome.
> > > > > >>> > > >> >> >> >> >> >> > > > > > >
> > > > > >>> > > >> >> >> >> >> >> > > > > > > On Wed, Feb 3, 2016 at 7:20 PM,
> > > > > Rajini
> > > > > >>> > > Sivaram <
> > > > > >>> > > >> >> >> >> >> >> > > > > > > rajinisiva...@googlemail.com>
> > > > wrote:
> > > > > >>> > > >> >> >> >> >> >> > > > > > >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >> Hi Harsha,
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>
> > > > > >>> > > >> >> >> >> >> >> > > > > > >> Thank you for the review. Can
> > > you
> > > > > >>> clarify -
> > > > > >>> > > I
> > > > > >>> > > >> >> think
> > > > > >>> > > >> >> >> you
> > > > > >>> > > >> >> >> >> are
> > > > > >>> > > >> >> >> >> >> >> > saying
> > > > > >>> > > >> >> >> >> >> >> > > > > that
> > > > > >>> > > >> >> >> >> >> >> > > > > > >> the client should send its
> > > > mechanism
> > > > > >>> over
> > > > > >>> > > the
> > > > > >>> > > >> >> wire to
> > > > > >>> > > >> >> >> >> the
> > > > > >>> > > >> >> >> >> >> >> > server.
> > > > > >>> > > >> >> >> >> >> >> > > Is
> > > > > >>> > > >> >> >> >> >> >> > > > > that
> > > > > >>> > > >> >> >> >> >> >> > > > > > >> correct? The exchange is
> > > slightly
> > > > > >>> different
> > > > > >>> > > in
> > > > > >>> > > >> the
> > > > > >>> > > >> >> >> KIP
> > > > > >>> > > >> >> >> >> >> (the PR
> > > > > >>> > > >> >> >> >> >> >> > > > > matches the
> > > > > >>> > > >> >> >> >> >> >> > > > > > >> KIP) from the one you
> > described
> > > to
> > > > > >>> enable
> > > > > >>> > > >> >> >> >> interoperability
> > > > > >>> > > >> >> >> >> >> >> with
> > > > > >>> > > >> >> >> >> >> >> > > > > 0.9.0.0.
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>
> > > > > >>> > > >> >> >> >> >> >> > > > > > >> On Wed, Feb 3, 2016 at 1:56
> > PM,
> > > > > >>> Harsha <
> > > > > >>> > > >> >> >> m...@harsha.io>
> > > > > >>> > > >> >> >> >> >> >> wrote:
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> Rajini,
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>>            I looked at the PR
> > > you
> > > > > >>> have. I
> > > > > >>> > > >> think
> > > > > >>> > > >> >> its
> > > > > >>> > > >> >> >> >> better
> > > > > >>> > > >> >> >> >> >> >> with
> > > > > >>> > > >> >> >> >> >> >> > > > your
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>>            earlier approach
> > > > rather
> > > > > >>> than
> > > > > >>> > > >> extending
> > > > > >>> > > >> >> >> the
> > > > > >>> > > >> >> >> >> >> >> protocol.
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> What I was thinking initially
> > > is,
> > > > > >>> Broker
> > > > > >>> > > has a
> > > > > >>> > > >> >> >> config
> > > > > >>> > > >> >> >> >> >> option
> > > > > >>> > > >> >> >> >> >> >> of
> > > > > >>> > > >> >> >> >> >> >> > > say
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> sasl.mechanism = GSSAPI,
> > PLAIN
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> and the client can have
> > similar
> > > > > >>> config of
> > > > > >>> > > >> >> >> >> >> >> sasl.mechanism=PLAIN.
> > > > > >>> > > >> >> >> >> >> >> > > > > Client
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> can send its sasl mechanism
> > > > before
> > > > > >>> the
> > > > > >>> > > >> handshake
> > > > > >>> > > >> >> >> starts
> > > > > >>> > > >> >> >> >> >> and
> > > > > >>> > > >> >> >> >> >> >> if
> > > > > >>> > > >> >> >> >> >> >> > > the
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> broker accepts that
> > particular
> > > > > >>> mechanism
> > > > > >>> > > than
> > > > > >>> > > >> it
> > > > > >>> > > >> >> >> can go
> > > > > >>> > > >> >> >> >> >> ahead
> > > > > >>> > > >> >> >> >> >> >> > > with
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> handshake otherwise return a
> > > > error
> > > > > >>> saying
> > > > > >>> > > that
> > > > > >>> > > >> >> the
> > > > > >>> > > >> >> >> >> >> mechanism
> > > > > >>> > > >> >> >> >> >> >> > not
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> allowed.
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>>
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> Thanks,
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> Harsha
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>>
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> On Wed, Feb 3, 2016, at 04:58
> > > AM,
> > > > > >>> Rajini
> > > > > >>> > > >> Sivaram
> > > > > >>> > > >> >> >> wrote:
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > A slightly different
> > approach
> > > > for
> > > > > >>> > > supporting
> > > > > >>> > > >> >> >> >> different
> > > > > >>> > > >> >> >> >> >> SASL
> > > > > >>> > > >> >> >> >> >> >> > > > > mechanisms
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > within a broker is to allow
> > > the
> > > > > >>> same
> > > > > >>> > > >> "*security
> > > > > >>> > > >> >> >> >> >> protocol*"
> > > > > >>> > > >> >> >> >> >> >> to
> > > > > >>> > > >> >> >> >> >> >> > > be
> > > > > >>> > > >> >> >> >> >> >> > > > > used
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> on
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > different ports with
> > > different
> > > > > >>> > > configuration
> > > > > >>> > > >> >> >> >> options. An
> > > > > >>> > > >> >> >> >> >> >> > > > advantage
> > > > > >>> > > >> >> >> >> >> >> > > > > of
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > this
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > approach is that it extends
> > > the
> > > > > >>> > > >> >> configurability of
> > > > > >>> > > >> >> >> >> not
> > > > > >>> > > >> >> >> >> >> just
> > > > > >>> > > >> >> >> >> >> >> > > SASL,
> > > > > >>> > > >> >> >> >> >> >> > > > > but
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> any
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > protocol. For instance, it
> > > > would
> > > > > >>> enable
> > > > > >>> > > the
> > > > > >>> > > >> >> use of
> > > > > >>> > > >> >> >> >> SSL
> > > > > >>> > > >> >> >> >> >> with
> > > > > >>> > > >> >> >> >> >> >> > > > mutual
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> client
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > authentication on one port
> > or
> > > > > >>> different
> > > > > >>> > > >> >> >> certificate
> > > > > >>> > > >> >> >> >> >> chains
> > > > > >>> > > >> >> >> >> >> >> on
> > > > > >>> > > >> >> >> >> >> >> > > > > another.
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > And
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > it avoids the need for SASL
> > > > > >>> mechanism
> > > > > >>> > > >> >> negotiation.
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > Kafka would have the same
> > > > > >>> "*security
> > > > > >>> > > >> protocols"
> > > > > >>> > > >> >> >> >> >> *defined as
> > > > > >>> > > >> >> >> >> >> >> > > > today,
> > > > > >>> > > >> >> >> >> >> >> > > > > but
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > with
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > (a single) configurable
> > SASL
> > > > > >>> mechanism.
> > > > > >>> > > To
> > > > > >>> > > >> have
> > > > > >>> > > >> >> >> >> >> different
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> configurations
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > of
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > a protocol within a broker,
> > > > users
> > > > > >>> can
> > > > > >>> > > define
> > > > > >>> > > >> >> new
> > > > > >>> > > >> >> >> >> >> protocol
> > > > > >>> > > >> >> >> >> >> >> > names
> > > > > >>> > > >> >> >> >> >> >> > > > > which
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> are
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > configured versions of
> > > existing
> > > > > >>> > > protocols,
> > > > > >>> > > >> >> perhaps
> > > > > >>> > > >> >> >> >> using
> > > > > >>> > > >> >> >> >> >> >> just
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > configuration
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > entries and no additional
> > > code.
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > For example:
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > A single mechanism broker
> > > would
> > > > > be
> > > > > >>> > > >> configured
> > > > > >>> > > >> >> as:
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > listeners=SASL_SSL://:9092
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > sasl.mechanism=GSSAPI
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > sasl.kerberos.class.name
> > > =kafka
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > ...
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > And a multi-mechanism
> > broker
> > > > > would
> > > > > >>> be
> > > > > >>> > > >> >> configured
> > > > > >>> > > >> >> >> as:
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> >
> > > > > >>> > > >> >> >>
> > listeners=gssapi://:9092,plain://:9093,custom://:9094
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> >
> > > > gssapi.security.protocol=SASL_SSL
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> >
> > gssapi.sasl.mechanism=GSSAPI
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> >
> > > > gssapi.sasl.kerberos.class.name
> > > > > >>> =kafka
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > ...
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> >
> > > > plain.security.protocol=SASL_SSL
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > plain.sasl.mechanism=PLAIN
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > ..
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> >
> > > > > >>> custom.security.protocol=SASL_PLAINTEXT
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> >
> > custom.sasl.mechanism=CUSTOM
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> >
> > > > > >>> > > >> >> >> >> >> >> > >
> > > > > >>> > > >> >> >>
> > > > > >>> custom.sasl.callback.handler.class=example.CustomCallbackHandler
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > This is still a big change
> > > > > because
> > > > > >>> it
> > > > > >>> > > >> affects
> > > > > >>> > > >> >> the
> > > > > >>> > > >> >> >> >> >> currently
> > > > > >>> > > >> >> >> >> >> >> > > fixed
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > enumeration of security
> > > > protocol
> > > > > >>> > > >> definitions,
> > > > > >>> > > >> >> but
> > > > > >>> > > >> >> >> one
> > > > > >>> > > >> >> >> >> >> that
> > > > > >>> > > >> >> >> >> >> >> is
> > > > > >>> > > >> >> >> >> >> >> > > > > perhaps
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > more
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > flexible than defining
> > every
> > > > new
> > > > > >>> SASL
> > > > > >>> > > >> mechanism
> > > > > >>> > > >> >> >> as a
> > > > > >>> > > >> >> >> >> new
> > > > > >>> > > >> >> >> >> >> >> > > security
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > protocol.
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > Thoughts?
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > On Tue, Feb 2, 2016 at
> > 12:20
> > > > PM,
> > > > > >>> Rajini
> > > > > >>> > > >> >> Sivaram <
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> >
> > rajinisiva...@googlemail.com
> > > >
> > > > > >>> wrote:
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > > As Ismael has said, we do
> > > not
> > > > > >>> have a
> > > > > >>> > > >> >> >> requirement to
> > > > > >>> > > >> >> >> >> >> >> support
> > > > > >>> > > >> >> >> >> >> >> > > > > multiple
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > > protocols in a broker.
> > But
> > > I
> > > > > >>> agree with
> > > > > >>> > > >> Jun's
> > > > > >>> > > >> >> >> >> >> observation
> > > > > >>> > > >> >> >> >> >> >> > > that
> > > > > >>> > > >> >> >> >> >> >> > > > > some
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > > companies might want to
> > > > > support a
> > > > > >>> > > >> different
> > > > > >>> > > >> >> >> >> >> >> authentication
> > > > > >>> > > >> >> >> >> >> >> > > > > mechanism
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> for
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > > internal users or
> > partners.
> > > > For
> > > > > >>> > > instance,
> > > > > >>> > > >> we
> > > > > >>> > > >> >> do
> > > > > >>> > > >> >> >> use
> > > > > >>> > > >> >> >> >> >> two
> > > > > >>> > > >> >> >> >> >> >> > > > different
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > > authentication
> > mechanisms,
> > > it
> > > > > >>> just so
> > > > > >>> > > >> happens
> > > > > >>> > > >> >> >> that
> > > > > >>> > > >> >> >> >> we
> > > > > >>> > > >> >> >> >> >> are
> > > > > >>> > > >> >> >> >> >> >> > > able
> > > > > >>> > > >> >> >> >> >> >> > > > > to use
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > > certificate-based
> > > > > authentication
> > > > > >>> for
> > > > > >>> > > >> internal
> > > > > >>> > > >> >> >> >> users,
> > > > > >>> > > >> >> >> >> >> and
> > > > > >>> > > >> >> >> >> >> >> > > hence
> > > > > >>> > > >> >> >> >> >> >> > > > > don't
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > > require multiple SASL
> > > > > mechanisms
> > > > > >>> in a
> > > > > >>> > > >> broker.
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > > As Tao has pointed out,
> > > > > mechanism
> > > > > >>> > > >> negotiation
> > > > > >>> > > >> >> >> is a
> > > > > >>> > > >> >> >> >> >> common
> > > > > >>> > > >> >> >> >> >> >> > > usage
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> pattern.
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > > Many existing protocols
> > > that
> > > > > >>> support
> > > > > >>> > > SASL
> > > > > >>> > > >> do
> > > > > >>> > > >> >> >> >> already
> > > > > >>> > > >> >> >> >> >> use
> > > > > >>> > > >> >> >> >> >> >> > this
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> pattern. AMQP
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > > (
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>>
> > > > > >>> > > >> >> >> >> >> >> > > > >
> > > > > >>> > > >> >> >> >> >> >> > > >
> > > > > >>> > > >> >> >> >> >> >> > >
> > > > > >>> > > >> >> >> >> >> >> >
> > > > > >>> > > >> >> >> >> >> >>
> > > > > >>> > > >> >> >> >> >>
> > > > > >>> > > >> >> >> >>
> > > > > >>> > > >> >> >>
> > > > > >>> > > >> >>
> > > > > >>> > > >>
> > > > > >>> > >
> > > > > >>>
> > > > >
> > > >
> > >
> > http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-security-v1.0-os.html#type-sasl-mechanisms
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> ),
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > > which, as a messaging
> > > > protocol
> > > > > >>> maybe
> > > > > >>> > > >> closer
> > > > > >>> > > >> >> to
> > > > > >>> > > >> >> >> >> Kafka
> > > > > >>> > > >> >> >> >> >> in
> > > > > >>> > > >> >> >> >> >> >> use
> > > > > >>> > > >> >> >> >> >> >> > > > cases
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> than
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > > Zookeeper, is an example.
> > > > Other
> > > > > >>> > > examples
> > > > > >>> > > >> >> where
> > > > > >>> > > >> >> >> the
> > > > > >>> > > >> >> >> >> >> client
> > > > > >>> > > >> >> >> >> >> >> > > > > negotiates
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> or
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > > sends SASL mechanism to
> > > > server
> > > > > >>> include
> > > > > >>> > > >> ACAP
> > > > > >>> > > >> >> >> that is
> > > > > >>> > > >> >> >> >> >> used
> > > > > >>> > > >> >> >> >> >> >> as
> > > > > >>> > > >> >> >> >> >> >> > > an
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> example in
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > > the SASL RFCs, POP3,
> > LDAP,
> > > > SMTP
> > > > > >>> etc.
> > > > > >>> > > This
> > > > > >>> > > >> is
> > > > > >>> > > >> >> >> not to
> > > > > >>> > > >> >> >> >> >> say
> > > > > >>> > > >> >> >> >> >> >> > that
> > > > > >>> > > >> >> >> >> >> >> > > > > Kafka
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > > shouldn't use a different
> > > > type
> > > > > of
> > > > > >>> > > >> mechanism
> > > > > >>> > > >> >> >> >> selection
> > > > > >>> > > >> >> >> >> >> >> that
> > > > > >>> > > >> >> >> >> >> >> > > fits
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> better with
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > > the existing Kafka
> > design.
> > > > Just
> > > > > >>> that
> > > > > >>> > > >> >> negotiation
> > > > > >>> > > >> >> >> >> is a
> > > > > >>> > > >> >> >> >> >> >> > common
> > > > > >>> > > >> >> >> >> >> >> > > > > pattern
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> and
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > > since we typically turn
> > on
> > > > > >>> > > >> javax.net.debug to
> > > > > >>> > > >> >> >> debug
> > > > > >>> > > >> >> >> >> >> TLS
> > > > > >>> > > >> >> >> >> >> >> > > > > negotiation
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> issues,
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > > having to use Kafka
> > logging
> > > > to
> > > > > >>> debug
> > > > > >>> > > SASL
> > > > > >>> > > >> >> >> >> negotiation
> > > > > >>> > > >> >> >> >> >> >> > issues
> > > > > >>> > > >> >> >> >> >> >> > > is
> > > > > >>> > > >> >> >> >> >> >> > > > > not
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> that
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > > dissimilar.
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > > On Tue, Feb 2, 2016 at
> > 6:12
> > > > AM,
> > > > > >>> tao
> > > > > >>> > > xiao <
> > > > > >>> > > >> >> >> >> >> >> > > xiaotao...@gmail.com
> > > > > >>> > > >> >> >> >> >> >> > > > >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> wrote:
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> I am the author of
> > > KIP-44. I
> > > > > >>> hope my
> > > > > >>> > > use
> > > > > >>> > > >> >> case
> > > > > >>> > > >> >> >> will
> > > > > >>> > > >> >> >> >> >> add
> > > > > >>> > > >> >> >> >> >> >> > some
> > > > > >>> > > >> >> >> >> >> >> > > > > values
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> to this
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> discussion. The reason I
> > > > > raised
> > > > > >>> KIP44
> > > > > >>> > > is
> > > > > >>> > > >> >> that I
> > > > > >>> > > >> >> >> >> want
> > > > > >>> > > >> >> >> >> >> to
> > > > > >>> > > >> >> >> >> >> >> be
> > > > > >>> > > >> >> >> >> >> >> > > > able
> > > > > >>> > > >> >> >> >> >> >> > > > > to
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> implement a custom
> > > security
> > > > > >>> protocol
> > > > > >>> > > that
> > > > > >>> > > >> >> can
> > > > > >>> > > >> >> >> >> fulfill
> > > > > >>> > > >> >> >> >> >> >> the
> > > > > >>> > > >> >> >> >> >> >> > > need
> > > > > >>> > > >> >> >> >> >> >> > > > > of my
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> company. As pointed out
> > by
> > > > > >>> Ismael
> > > > > >>> > > KIP-43
> > > > > >>> > > >> now
> > > > > >>> > > >> >> >> >> >> supports a
> > > > > >>> > > >> >> >> >> >> >> > > > > pluggable
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> way to
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> inject custom security
> > > > > provider
> > > > > >>> to
> > > > > >>> > > SASL I
> > > > > >>> > > >> >> think
> > > > > >>> > > >> >> >> >> it is
> > > > > >>> > > >> >> >> >> >> >> > enough
> > > > > >>> > > >> >> >> >> >> >> > > > to
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> cover the
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> use case I have and
> > > address
> > > > > the
> > > > > >>> > > concerns
> > > > > >>> > > >> >> >> raised in
> > > > > >>> > > >> >> >> >> >> >> KIP-44.
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >>
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> For multiple security
> > > > > protocols
> > > > > >>> > > support
> > > > > >>> > > >> >> >> >> >> simultaneously
> > > > > >>> > > >> >> >> >> >> >> it
> > > > > >>> > > >> >> >> >> >> >> > is
> > > > > >>> > > >> >> >> >> >> >> > > > not
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> needed in
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> my use case and I don't
> > > > > foresee
> > > > > >>> it is
> > > > > >>> > > >> >> needed in
> > > > > >>> > > >> >> >> >> the
> > > > > >>> > > >> >> >> >> >> >> future
> > > > > >>> > > >> >> >> >> >> >> > > but
> > > > > >>> > > >> >> >> >> >> >> > > > > as i
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> said
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> this is my use case only
> > > > there
> > > > > >>> may be
> > > > > >>> > > >> other
> > > > > >>> > > >> >> use
> > > > > >>> > > >> >> >> >> cases
> > > > > >>> > > >> >> >> >> >> >> that
> > > > > >>> > > >> >> >> >> >> >> > > > need
> > > > > >>> > > >> >> >> >> >> >> > > > > it.
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> But if
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> we want to support it in
> > > the
> > > > > >>> future I
> > > > > >>> > > >> >> prefer to
> > > > > >>> > > >> >> >> >> get
> > > > > >>> > > >> >> >> >> >> it
> > > > > >>> > > >> >> >> >> >> >> > right
> > > > > >>> > > >> >> >> >> >> >> > > > at
> > > > > >>> > > >> >> >> >> >> >> > > > > the
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> first
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> place given the fact
> > that
> > > > > >>> security
> > > > > >>> > > >> protocol
> > > > > >>> > > >> >> is
> > > > > >>> > > >> >> >> an
> > > > > >>> > > >> >> >> >> >> ENUM
> > > > > >>> > > >> >> >> >> >> >> and
> > > > > >>> > > >> >> >> >> >> >> > > if
> > > > > >>> > > >> >> >> >> >> >> > > > we
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> stick to
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> that implementation it
> > is
> > > > very
> > > > > >>> hard to
> > > > > >>> > > >> >> extend
> > > > > >>> > > >> >> >> in
> > > > > >>> > > >> >> >> >> the
> > > > > >>> > > >> >> >> >> >> >> > future
> > > > > >>> > > >> >> >> >> >> >> > > > > when we
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> decide
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> multiple security
> > > protocols
> > > > is
> > > > > >>> needed.
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >>
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> Protocol negotiation is
> > a
> > > > very
> > > > > >>> common
> > > > > >>> > > >> usage
> > > > > >>> > > >> >> >> >> pattern
> > > > > >>> > > >> >> >> >> >> in
> > > > > >>> > > >> >> >> >> >> >> > > > security
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> domain. As
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> suggested in Java SASL
> > doc
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >>
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >>
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>>
> > > > > >>> > > >> >> >> >> >> >> > > > >
> > > > > >>> > > >> >> >> >> >> >> > > >
> > > > > >>> > > >> >> >> >> >> >> > >
> > > > > >>> > > >> >> >> >> >> >> >
> > > > > >>> > > >> >> >> >> >> >>
> > > > > >>> > > >> >> >> >> >>
> > > > > >>> > > >> >> >> >>
> > > > > >>> > > >> >> >>
> > > > > >>> > > >> >>
> > > > > >>> > > >>
> > > > > >>> > >
> > > > > >>>
> > > > >
> > > >
> > >
> > http://docs.oracle.com/javase/7/docs/technotes/guides/security/sasl/sasl-refguide.html
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> client
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> first sends out a packet
> > > to
> > > > > >>> server and
> > > > > >>> > > >> >> server
> > > > > >>> > > >> >> >> >> >> responds
> > > > > >>> > > >> >> >> >> >> >> > with
> > > > > >>> > > >> >> >> >> >> >> > > a
> > > > > >>> > > >> >> >> >> >> >> > > > > list
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> of
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> mechanisms it supports.
> > > This
> > > > > is
> > > > > >>> very
> > > > > >>> > > >> >> similar to
> > > > > >>> > > >> >> >> >> >> SSL/TLS
> > > > > >>> > > >> >> >> >> >> >> > > > > negotiation.
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >>
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> On Tue, 2 Feb 2016 at
> > > 06:39
> > > > > >>> Ismael
> > > > > >>> > > Juma <
> > > > > >>> > > >> >> >> >> >> >> > ism...@juma.me.uk>
> > > > > >>> > > >> >> >> >> >> >> > > > > wrote:
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >>
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> > On Mon, Feb 1, 2016 at
> > > > 7:04
> > > > > >>> PM, Gwen
> > > > > >>> > > >> >> Shapira
> > > > > >>> > > >> >> >> <
> > > > > >>> > > >> >> >> >> >> >> > > > > g...@confluent.io>
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> wrote:
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> > > Looking at "existing
> > > > > >>> solutions",
> > > > > >>> > > it
> > > > > >>> > > >> >> looks
> > > > > >>> > > >> >> >> like
> > > > > >>> > > >> >> >> >> >> >> > Zookeeper
> > > > > >>> > > >> >> >> >> >> >> > > > > allows
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> plugging
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> > in
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> > > any SASL mechanism,
> > > but
> > > > > the
> > > > > >>> server
> > > > > >>> > > >> will
> > > > > >>> > > >> >> >> only
> > > > > >>> > > >> >> >> >> >> support
> > > > > >>> > > >> >> >> >> >> >> > one
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> mechanism at
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> a
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> > > time.
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> > >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> > This was the original
> > > > > >>> proposal from
> > > > > >>> > > >> >> Rajini as
> > > > > >>> > > >> >> >> >> that
> > > > > >>> > > >> >> >> >> >> is
> > > > > >>> > > >> >> >> >> >> >> > > enough
> > > > > >>> > > >> >> >> >> >> >> > > > > for
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> their
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> > needs.
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> > > If this is good
> > enough
> > > > for
> > > > > >>> our
> > > > > >>> > > >> use-case
> > > > > >>> > > >> >> >> (do we
> > > > > >>> > > >> >> >> >> >> >> > actually
> > > > > >>> > > >> >> >> >> >> >> > > > > need to
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> support
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> > > multiple mechanisms
> > at
> > > > > >>> once?), it
> > > > > >>> > > >> will
> > > > > >>> > > >> >> >> >> simplify
> > > > > >>> > > >> >> >> >> >> >> life a
> > > > > >>> > > >> >> >> >> >> >> > > lot
> > > > > >>> > > >> >> >> >> >> >> > > > > for
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> us (
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> > >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >>
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>>
> > > > > >>> > > >> >> >> >> >> >> > > > >
> > > > > >>> > > >> >> >> >> >> >> > >
> > > > > >>> > > >> >> >> >> >> >>
> > > > > >>> > > >> >> >> >> >>
> > > > > >>> > > >> >> >> >>
> > > > > >>> > > >> >> >>
> > > > > >>> > > >> >>
> > > > > >>> > > >>
> > > > > >>> > >
> > > > > >>>
> > > > >
> > > https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zookeeper+and+SASL
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> > )
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> > >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> > The current thinking
> > is
> > > > that
> > > > > >>> it
> > > > > >>> > > would
> > > > > >>> > > >> be
> > > > > >>> > > >> >> >> useful
> > > > > >>> > > >> >> >> >> to
> > > > > >>> > > >> >> >> >> >> >> > support
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> multiple SASL
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> > mechanisms
> > > simultaneously.
> > > > > In
> > > > > >>> the
> > > > > >>> > > KIP
> > > > > >>> > > >> >> >> meeting,
> > > > > >>> > > >> >> >> >> Jun
> > > > > >>> > > >> >> >> >> >> >> > > mentioned
> > > > > >>> > > >> >> >> >> >> >> > > > > that
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> companies
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> > sometimes support
> > > > additional
> > > > > >>> > > >> >> authentication
> > > > > >>> > > >> >> >> >> >> mechanisms
> > > > > >>> > > >> >> >> >> >> >> > for
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> partners, for
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> > example. It does make
> > > > things
> > > > > >>> more
> > > > > >>> > > >> >> complex, as
> > > > > >>> > > >> >> >> >> you
> > > > > >>> > > >> >> >> >> >> say,
> > > > > >>> > > >> >> >> >> >> >> > so
> > > > > >>> > > >> >> >> >> >> >> > > we
> > > > > >>> > > >> >> >> >> >> >> > > > > need
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> to be
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> > sure the complexity is
> > > > worth
> > > > > >>> it.
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> > Two more points:
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> >
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> > 1. It has been
> > suggested
> > > > > that
> > > > > >>> custom
> > > > > >>> > > >> >> security
> > > > > >>> > > >> >> >> >> >> protocol
> > > > > >>> > > >> >> >> >> >> >> > > > > support is
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> needed by
> > > > > >>> > > >> >> >> >> >> >> > > > > > >>> > >> > some (KIP-44). Rajini
> > > > > enhanced
> > > > > >>> > > KIP-43
> > > > > >>> > > >> so
> > > > > >>> > > >> >> >> that a
> > > > > >>> > > >> >> >> >> >> SASL
> > > > > >>> > > >> >> >> >> >> >> > > > mechanism
> > > > > >>> > > >> >> >> >> >
> > > > > >>>
> > > > > >> ...
> > > > > >>
> > > > > >> [Message clipped]
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Regards,
> > > > > >
> > > > > > Rajini
> > > > > >
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Regards,
> > > > >
> > > > > Rajini
> > > > >
> > > >
> > >
> > >
> > >
> > > --
> > > Regards,
> > >
> > > Rajini
> > >
> >
> 
> 
> 
> -- 
> Regards,
> 
> Rajini

Reply via email to