Hi Colin, To your point - "Also, it seems like most people who want a custom truststore / keystore will also want a custom SSL provider," I don't think so. Take our own example. We have a fairly large Kafka eco-system (500B+ messages a day flowing through with poly-glot client-base) with strict InfoSec requirements but we still do not need Custom SSL Provider for Kafka.
Thanks Maulin On Thu, Aug 8, 2019 at 3:47 PM Maulin Vasavada <maulin.vasav...@gmail.com> wrote: > Imagine a scenario like - We know we have a custom KMS and as a Kafka > owner we want to comply to using that KMS source to load keys/certs. As a > Kafka owner we know how to integrate with KMS but doesn't necessarily have > to know anything about cipher suites, algorithms, and SSL/TLS > implementation. Going the Provider way requires to know lot more than we > should, isn't it? Not that we would have concern/shy-away knowing those > details - but if we don't have to - why should we? > > On Thu, Aug 8, 2019 at 3:23 PM Maulin Vasavada <maulin.vasav...@gmail.com> > wrote: > >> Hi Harsha >> >> We don't have spire (or similar) agents and we do not have keys/certs >> locally on any brokers. To elaborate more on my previous email, >> >> I agree that Java security Providers are used in much broader sense - to >> have a particular implementation of an algorithm, use specific cipher >> suites for SSL , OR in our current team's case have a particular way to >> leverage pre-generated SSL sessions. However, the scope of our KIP (486) is >> much restricted than that. We merely intend to provide a custom >> keystore/truststore for our SSL connections and not really worry about >> underlying specific SSL/TLS implementation. This simplifies it a lot for >> us to keep the concerns separate and clear. >> >> I feel our approach is more complimentary such that it allows for using >> keystores of choice while retaining the flexibility to use any >> underlying/available Provider for actually making the SSL call. >> >> We agree with KIP-492's approach based on Providers (and Java's >> recommendation), but also strongly believe that our approach can compliment >> it very effectively for reasons explained above. >> >> Thanks >> Maulin >> >> On Thu, Aug 8, 2019 at 3:05 PM Harsha Chintalapani <ka...@harsha.io> >> wrote: >> >>> Hi Maulin, >>> >>> On Thu, Aug 08, 2019 at 2:04 PM, Maulin Vasavada < >>> maulin.vasav...@gmail.com> >>> wrote: >>> >>> > Hi Harsha >>> > >>> > The reason we rejected the SslProvider route is that - we only needed a >>> > custom way to load keys/certs. Not touch any policy that existing >>> Providers >>> > govern like SunJSSE Provider. >>> > >>> >>> We have exactly the same requirements to load certs and keys through >>> spire >>> agent. We used security.provider to do that exactly. I am not sure why >>> you >>> would be modifying any policies provided by default SunJSSE provider. >>> Can >>> you give me an example of having custom provider that will override an >>> existing policy in SunJSSE provider. >>> >>> As pointed out earlier, this kip >>> >>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-492%3A+Add+java+security+providers+in+Kafka+Security+config >>> allows >>> you to load security.provider through config. >>> Take a look at the examples I gave before >>> >>> https://github.com/spiffe/spiffe-example/blob/master/java-spiffe/spiffe-security-provider/src/main/java/spiffe/api/provider/SpiffeProvider.java >>> It registers KeyManagerFactory and TrustManagerFactory and Keystore >>> algorithm. >>> Implement your custom way of loading Keystore in here >>> >>> https://github.com/spiffe/spiffe-example/blob/master/java-spiffe/spiffe-security-provider/src/main/java/spiffe/api/provider/SpiffeKeyStore.java >>> >>> and Trust manager like here >>> >>> https://github.com/spiffe/spiffe-example/blob/master/java-spiffe/spiffe-security-provider/src/main/java/spiffe/api/provider/SpiffeTrustManager.java >>> >>> In your Kafka client you can set the security.provider to your custom >>> implementation and with this fix >>> https://issues.apache.org/jira/browse/KAFKA-8191 you can set >>> keyManagerAlgorigthm and trustManagerAlgorithm configs. >>> >>> All of this is in your clients and broker side and do not need to touch >>> any >>> policy changes at JVM level. You'll register the providers in the >>> priority >>> order and can still have SunJSSE provider and have your custom provider >>> to >>> implement the key and trust managers. >>> >>> >>> >>> The ask here is different than KIP-492. We don't have any need to >>> > modify/specify the algorithm parameter. Does that make sense? >>> > >>> >>> The ask in KIP is introducing new interfaces where the KIP's >>> goal/motivation can be achieved through the security.provider and we >>> worked >>> on similar goal without touching any Keystore or Truststore interfaces. >>> My advise is against changing or introducing new interfaces when it can >>> work through security.provider. >>> >>> Thanks, >>> Harsha >>> >>> >>> Thanks >>> > Maulin >>> > >>> > On Thu, Aug 8, 2019 at 7:48 AM Harsha Chintalapani <ka...@harsha.io> >>> > wrote: >>> > >>> > In your KIP you added security. provider as rejected alternative and >>> > specified "its not the correct way". Do you mind explaining why its >>> not? I >>> > didn't find any evidence in Java docs to say so. Contrary to your >>> statement >>> > it does say in the java docs >>> > " However, please note that a provider can be used to implement any >>> > security service in Java that uses a pluggable architecture with a >>> choice >>> > of implementations that fit underneath." >>> > >>> > Java Security Providers have been used by other projects to provide >>> such >>> > integration . I am not sure if you looked into Spiffe project to >>> > efficiently distribute certificates but here is an example of Java >>> provider >>> > >>> > https://github.com/spiffe/spiffe-example/blob/master/java-spiffe/ >>> > >>> spiffe-security-provider/src/main/java/spiffe/api/provider/SpiffeProvider. >>> > java which >>> > obtains certificates from local daemons. >>> > These integrations are being used in Tomcat, Jetty etc.. We are also >>> using >>> > Security provider to do the same in our Kafka clusters. So unless I see >>> > more evidence why security.provider doesn't work for you adding new >>> > interfaces while there exists more cleaner way of achieving the goals >>> of >>> > this KIP is unnecessary and breaks the well known security interfaces >>> > provided by Java itself. >>> > >>> > Thanks, >>> > Harsha >>> > >>> > On Thu, Aug 08, 2019 at 6:54 AM, Harsha Chintalapani <ka...@harsha.io> >>> > wrote: >>> > >>> > Hi Maulin, >>> > Not sure if you looked at my previous replies. This >>> > >>> > changes >>> > >>> > are not required as there is already security Provider to do what you >>> are >>> > proposing. This KIP https://cwiki.apache.org/confluence/display/KAFKA/ >>> > KIP-492%3A+Add+java+security+providers+in+Kafka+Security+config also >>> > addresses easy registration of such providers. >>> > >>> > Thanks, >>> > Harsha >>> > >>> > On Wed, Aug 07, 2019 at 11:31 PM, Maulin Vasavada >>> <maulin.vasavada@gmail. >>> > com> wrote: >>> > >>> > Bump! Can somebody please review this? >>> > >>> > On Tue, Jul 16, 2019 at 1:51 PM Maulin Vasavada < >>> > >>> > maulin.vasav...@gmail.com> >>> > >>> > wrote: >>> > >>> > Bump! Can somebody please review this? >>> > >>> > >>> >>