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 >> > > > > > >>> with a >> > > > > > >>> > >> > custom provider can be used for this purpose instead. >> > > Given >> > > > > this, >> > > > > > >>> it >> > > > > > >>> > >> seems >> > > > > > >>> > >> > a bit inconsistent and restrictive not to allow >> multiple >> > > > SASL >> > > > > > >>> mechanisms >> > > > > > >>> > >> > simultaneously (we do allow SSL and SASL >> authentication >> > > > > > >>> simultaneously, >> > > > > > >>> > >> > after all). >> > > > > > >>> > >> > >> > > > > > >>> > >> > 2. The other option would be to support a single SASL >> > > > > mechanism >> > > > > > >>> > >> > simultaneously to start with and then extend this to >> > > > multiple >> > > > > > >>> mechanisms >> > > > > > >>> > >> > simultaneously later (if and when needed). It seems >> like >> > > it >> > > > > would >> > > > > > >>> be >> > > > > > >>> > >> harder >> > > > > > >>> > >> > to support the latter in the future if we go down this >> > > > route, >> > > > > but >> > > > > > >>> maybe >> > > > > > >>> > >> > there are ways around this. >> > > > > > >>> > >> > >> > > > > > >>> > >> > Thoughts? >> > > > > > >>> > >> > >> > > > > > >>> > >> > Ismael >> > > > > > >>> > >> > >> > > > > > >>> > >> >> > > > > > >>> > > >> > > > > > >>> > > >> > > > > > >>> > > >> > > > > > >>> > > -- >> > > > > > >>> > > Regards, >> > > > > > >>> > > >> > > > > > >>> > > Rajini >> > > > > > >>> > > >> > > > > > >>> > >> > > > > > >>> > >> > > > > > >>> > >> > > > > > >>> > -- >> > > > > > >>> > Regards, >> > > > > > >>> > >> > > > > > >>> > Rajini >> > > > > > >>> >> > > > > > >> >> > > > > > >> >> > > > > > >> >> > > > > > >> -- >> > > > > > >> Regards, >> > > > > > >> >> > > > > > >> Rajini >> > > > > > >> >> > > > > > > >> > > > > > > >> > > > > > > >> > > > > > > -- >> > > > > > > Regards, >> > > > > > > >> > > > > > > Rajini >> > > > > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > > -- >> > > > > > Regards, >> > > > > > >> > > > > > Rajini >> > > > > >> > > > >> > > > >> > > > >> > > > -- >> > > > Regards, >> > > > >> > > > Rajini >> > > > >> > > >> > >> > >> > >> > -- >> > Regards, >> > >> > Rajini >> > >> > > > > -- > Regards, > > Rajini