Hi Harsha

Any response on my question? I feel this KIP is worth accommodating. Your
help is much appreciated.

Thanks
Maulin

On Tue, Aug 20, 2019 at 11:52 PM Maulin Vasavada <maulin.vasav...@gmail.com>
wrote:

> Hi Harsha
>
> I've examined the SPIFFE provider more and have one question -
>
> If SPIFFE didn't have a need to do checkSpiffeId() call at the below
> location, would you really still write the Provider? *OR*
> Would you just use TrustManagerFactory.init(KeyStore) signature to pass
> the KeyStore from set of certs returned by spiffeIdManager.
> getTrustedCerts()?
>
>
> https://github.com/spiffe/java-spiffe/blob/master/src/main/java/spiffe/provider/CertificateUtils.java#L100
>
>
> /**
>> * Validates that the SPIFFE ID is present and matches the SPIFFE ID
>> configured in
>> * the java.security property ssl.spiffe.accept
>> *
>> * If the authorized spiffe ids list is empty any spiffe id is authorized
>> *
>> * @param chain an array of X509Certificate that contains the Peer's SVID
>> to be validated
>> * @throws CertificateException when either the certificates doesn't have
>> a SPIFFE ID or the SPIFFE ID is not authorized
>> */
>> static void checkSpiffeId(X509Certificate[] chain) throws
>> CertificateException {
>
>
>
> Thanks
> Maulin
>
>
> On Tue, Aug 20, 2019 at 4:49 PM Harsha Chintalapani <ka...@harsha.io>
> wrote:
>
>> Maulin,
>>              The code parts you are pointing are specific for Spiffe and
>> if
>> you are talking about validate method  which uses  PKIX check like any
>> other provider does.
>> If you want to default to SunJSSE everywhere you can do so by delegating
>> the calls in these methods to SunJSSE provider.
>>
>> TrustManagerFactory tmf = TrustManagerFactory
>>     .getInstance(TrustManagerFactory.getDefaultAlgorithm());and use
>> tmf.chekServerTrusted()
>> or use
>> https://docs.oracle.com/javase/7/docs/api/javax/net/ssl/TrustManagerFactory.html#getInstance(java.lang.String)if
>> you want a specific provider.
>>
>> -Harsha
>>
>>
>> On Tue, Aug 20, 2019 at 4:26 PM, Maulin Vasavada <
>> maulin.vasav...@gmail.com>
>> wrote:
>>
>> > Okay, so I take that you guys agree that I have to write a 'custom'
>> > algorithm and a provider to make it work , correct?
>> >
>> > Now, for Harsha's comment "Here the 'Custom' Algorithm is not an
>> > implementation per say , ..." , I diagree. You can refer to https://
>> >
>> github.com/spiffe/java-spiffe/blob/master/src/main/java/spiffe/provider/
>> > SpiffeTrustManager.java#L91 and
>> > https://github.com/spiffe/java-spiffe/blob/master/src/main/java/spiffe/
>> > provider/CertificateUtils.java#L100
>> >
>> > "that code" is the customization you have for the custom way to check
>> > something on top of regular checks. That method is NOT doing custom
>> > truststore loading. It is validating/verifying something in the "custom"
>> > way with spiffeId.
>> > I bet that without that you won't have a need of the custom algorithm in
>> > the first place.
>> >
>> > Let me know if you agree to this.
>> >
>> > Thanks
>> > Maulin
>> >
>> > On Tue, Aug 20, 2019 at 2:08 PM Sandeep Mopuri <mpr...@gmail.com>
>> wrote:
>> >
>> > Hi Maulin, thanks for the discussion. As Harsha pointed out, to use the
>> > KIP492, you need to create a new provider, register a *new* custom
>> > algorithm for your keymanager and trustmanager factory implementations.
>> > After this, the kafka server configuration can be done as given below
>> >
>> > # Register the provider class with custom algorithm, say CUSTOM
>> security.
>> > provider.classes=com.company.security.CustomProvider
>> > <http://security.provider.classes=com.company.security.customprovider/>
>> >
>> > # Register the keymanager and trustmanager algorithms
>> > # These algorithms indicate that the Keymanager and Trustmanagers
>> > registered under the algorithm "CUSTOM" needs to be used
>> > ssl.trustmanager.algorithm=CUSTOM
>> > ssl.keymanager.algorithm=CUSTOM
>> >
>> > And the customprovider looks like this...
>> >
>> > public class CustomProvider extends Provider {
>> > public CustomProvider() {
>> > super("NEW_CUSTOM_PROVIDER", 0.1, "Custom KeyStore and TrustStore");
>> > super.put("KeyManagerFactory.CUSTOM", "customKeyManagerFactory");
>> > super.put("TrustManagerFactory.CUSTOM",
>> > "customTrustManagerFactory");
>> > }
>> > }
>> >
>> > The PR for this is in review and can be found here: https://github.com/
>> > apache/kafka/pull/7090
>> > This PR includes the fixed insertProviderAt function call.
>> >
>> > On Tue, Aug 20, 2019 at 9:56 AM Harsha Chintalapani <ka...@harsha.io>
>> > wrote:
>> >
>> > Answers are in-line
>> >
>> > On Mon, Aug 19, 2019 at 10:45 PM, Maulin Vasavada <
>> maulin.vasavada@gmail.
>> > com
>> >
>> > wrote:
>> >
>> > Hi Colin
>> >
>> > When I refer to "standard" or "custom" algorithms I am following Java
>> > security Provider Terminology. You can refer to
>> > https://docs.oracle.com/javase/7/docs/technotes/guides/security/
>> > StandardNames.html#TrustManagerFactory link I provided earlier in the
>> > emails. It says PKIX is the default Algorithm for TrustManagerFactory.
>> >
>> > 1. For SPIFFE, I am not sure why you are saying 'it does not implement
>> > custom algorithms' because the following file clearly indicates that it
>> > does use custom algorithm-
>> >
>> > https://github.com/spiffe/java-spiffe/blob/master/src/main/java/spiffe/
>> >
>> > provider/SpiffeProvider.java#L17
>> >
>> > Algorithm value:
>> >
>> > https://github.com/spiffe/java-spiffe/blob/master/src/main/java/spiffe/
>> >
>> > provider/SpiffeProviderConstants.java#L6
>> >
>> > @Harsha do you want to chime in since you use that provider?
>> >
>> > Here the "Custom" Algorithm is not an implementation per say , rather
>> >
>> > used
>> >
>> > to invoke the custom trust store factory and key manager factory. You
>> are
>> > not moving away from "standard" alogrithms that are available.
>> >
>> > https://github.com/spiffe/java-spiffe/blob/master/src/main/java/spiffe/
>> > provider/SpiffeTrustManager.java
>> >
>> > As you can see it delegates all the calls of verification of certificate
>> >
>> > to
>> >
>> > the default implementation available.
>> > So in our implementation we still use PKIX to verify the certificate
>> > chain. So you are not losing anything here and Spiffe is not
>> reimplementing
>> > the verification process.
>> >
>> > 2. I already mentioned in my 3rd point, in my previous post, why using
>> >
>> > ssl.provider does NOT work. I updated KIP-486 in "rejected
>> >
>> > alternatives"
>> >
>> > also why ssl.provider does not work.
>> >
>> > As mentioned before , provider is the right way to go. I am still not
>> > understanding the gap is.
>> > If I understand correctly your argument is , provider is going to ask to
>> > implement a custom algorithm.
>> > My answer to that is , no you are not re-implementing the algorithm.
>> >
>> > Please
>> >
>> > check the above link , TrustManager implementation it delegates the
>> calls
>> > back. There is no need to implement your own here.
>> >
>> > 3. Security.insertProviderAt() comments were based on assumption if
>> >
>> > KIP-492
>> >
>> > changes are done and we use that mechanism to configure providers
>> >
>> > instead
>> >
>> > of ssl.provider configuration.
>> >
>> > KIP-492 has patch available and going through review.
>> >
>> > Can you read my all the points, I mentioned in my previous post, very
>> >
>> > carefully? I am covering all the aspects in explaining. I am open to
>> >
>> > still
>> >
>> > discuss more to clarify any doubts.
>> >
>> > "3. If we just use existing ssl.provider kafka configuration then our
>> > provider will be used in SSLContext.getInstance(protocol, provider) call
>> >
>> > in
>> >
>> > SslFactory.java <http://sslfactory.java/> <http://sslfactory.java/> and
>> > if our provider does not have
>> > implementation for SSLContext.TLS/TLSv1.1/TLSv1.2 etc it breaks (we
>> >
>> > tested
>> >
>> > it). Example: In MyProvider sample above you see that I didn't add
>> > SSLContext.TLSv1 as
>> > "Service+Algorithm" and that didn't work for me. In SPIFFE provider you
>> > don't have this challenge since you are planning to bypass ssl.provider
>> >
>> > as
>> >
>> > you mention in the KIP-492."
>> >
>> > Yes here you need to pass the protocol that your KeyManager/TrustManager
>> > registered with and in no way its deviating from TLS RFC spec.
>> >
>> > https://github.com/srisatish/openjdk/blob/master/jdk/src/share/classes/
>> > javax/net/ssl/SSLContext.java#L134
>> >
>> > My suggestion here is for you to implement a simple Security Provider as
>> > you did before and register a Algorithm. You can use the existing
>> > implementation in SpiffeProvider and plug in changes where you need to
>> > retrieve the certificates from by making RPC call.
>> >
>> > Run an end-to-end test with Kafka broker coming up with your provider
>> > making calls to RPC call. You do need to pass the "custom algorithm"
>> that
>> > you registered in your key manager to invoke the provider. I think your
>> > concern is this approach is replacing the existing known ciphersuites
>> and
>> > certificate validation provided by java. Which its not.
>> >
>> > Now test the TLS connection you can do so via openssl -s_client options
>> >
>> > to
>> >
>> > test if everything else is working.
>> >
>> > I am happy to share configs that we used if you are interested.
>> >
>> > Thanks,
>> > Harsha
>> >
>> > Thanks
>> > Maulin
>> >
>> > On Mon, Aug 19, 2019 at 9:52 AM Colin McCabe <cmcc...@apache.org>
>> >
>> > wrote:
>> >
>> > Hi Maulin,
>> >
>> > A lot of JSSE providers don't implement custom algorithms. Spire is a
>> >
>> > good
>> >
>> > example of a JSSE provider that doesn't, and yet is still useful to
>> >
>> > many
>> >
>> > people. Your JSSE provider can work fine even if it doesn't implement a
>> > custom algorithm.
>> >
>> > Maybe I'm missing something, but I don't understand the discussion of
>> > Security.insertProviderAt() that you included. SslEngineBuilder doesn't
>> >
>> > use
>> >
>> > that API to get the security provider. Instead, it calls
>> > "SSLContext.getInstance(protocol, provider)", where provider is the
>> >
>> > name
>> >
>> > of the provider.
>> >
>> > best,
>> > Colin
>> >
>> > On Sat, Aug 17, 2019, at 20:13, Maulin Vasavada wrote:
>> >
>> > On top of everything above I feel strongly to add the 4th point which
>> >
>> > is
>> >
>> > based on Java APIs for TrustManagerFactory.init(KeyStore) (
>> >
>> > https://docs.oracle.com/javase/7/docs/api/javax/net/ssl/
>> > TrustManagerFactory.html#init(java.security.KeyStore
>> > <http://java.security.keystore/>)
>> > )
>> >
>> > and KeyManagerFactory.init(KeyStore, char[]) (
>> >
>> >
>> https://docs.oracle.com/javase/7/docs/api/javax/net/ssl/KeyManagerFactory
>> .
>> >
>> >
>> > html#init(java.security.KeyStore <http://java.security.keystore/
>> >,%20char[])
>> >
>> >
>> > ).
>> >
>> > 4. The above APIs are intended to support providing "trust/key
>> >
>> > material"
>> >
>> > from the user without having to write their own
>> >
>> > TrustManager/KeyManagers.
>> >
>> > To quote from the TrustManagerFactory.init()'s documentation
>> >
>> > "Initializes
>> >
>> > this factory with a source of certificate authorities and related trust
>> > material."
>> > To quote from the KeyManagerFactory.init()'s documentation "Initializes
>> > this factory with a source of key material."
>> >
>> > Based on this it is clear that there is a flexibility provided by Java
>> >
>> > to
>> >
>> > to enable developers to provide the required trust/key material loaded
>> >
>> > from
>> >
>> > "anywhere" without requiring them to write custom provider OR trust/key
>> > managers. This same flexibility is reflected in Kafka code also where
>> >
>> > it
>> >
>> > loads the trust/keys from a local file and doesn't require writing a
>> > Provider necessarily. If we do NOT have a custom algorithm, it makes
>> >
>> > less
>> >
>> > sense to write a Provider.
>> >
>> > Thanks
>> > Maulin
>> >
>> > On Thu, Aug 15, 2019 at 11:45 PM Maulin Vasavada <
>> >
>> > maulin.vasav...@gmail.com>
>> >
>> > wrote:
>> >
>> > Hi Harsha/Colin
>> >
>> > I did the sample with a custom Provider for TrustStoreManager and tried
>> > using ssl.provider Kafka config AND the way KIP-492 is suggesting (by
>> > adding Provider programmatically instead of relying on
>> >
>> > ssl.provider+java.
>> >
>> > security. The below sample is followed by my detailed findings. I'll
>> > appreciate if you can go through it carefully and see
>> >
>> > if you
>> >
>> > see my point.
>> >
>> > package providertest;
>> >
>> > import java.security.Provider <http://java.security.provider/> <http://
>> > java.security.provider/>;
>> >
>> > public class MyProvider extends Provider {
>> >
>> > private static final String name = "MyProvider"; private static double
>> > version = 1.0d;
>> > private static String info = "Maulin's SSL Provider v"+version;
>> >
>> > public MyProvider() {
>> > super(name, version, info);
>> > this.put("TrustManagerFactory.PKIX",
>> >
>> > "providertest.MyTrustManagerFactory");
>> >
>> > }
>> > }
>> >
>> > *Details:*
>> >
>> > KIP-492 documents that it will use Security.addProvider() assuming it
>> >
>> > will
>> >
>> > add it as position '0' which is not a correct assumption. The
>> > addProvider()'s documentation says it will add it to the last available
>> > position. You may want to correct that to say
>> > Security.insertProviderAt(provider, 1).
>> >
>> > Now coming back to our specific discussion,
>> >
>> > 1. SPIFFE example uses Custom Algorithm - spiffe. Hence when you add
>> >
>> > that
>> >
>> > provider in the provider list via Security.addProvider() the position
>> >
>> > where
>> >
>> > it gets added doesn't matter (even if you don't end up adding it as
>> >
>> > first
>> >
>> > entry) since that is the ONLY provider for SPIFFE specific algorithm
>> >
>> > you
>> >
>> > might have.
>> >
>> > We do *not* have custom algorithm for Key/Trust StoreMangers. Which
>> >
>> > means
>> >
>> > we have to use X509, PKIX etc "Standard Algorithms" ((
>> >
>> > https://docs.oracle.com/javase/7/docs/technotes/guides/security/
>> > StandardNames.html
>> > ))
>> >
>> > in our provider to override the TrustStoreManager (see my sample code)
>> >
>> > and
>> >
>> > KeyStoreManger and KeyManager. This creates another challenge
>> >
>> > mentioned in
>> >
>> > the below point.
>> >
>> > 2. In order to make our Provider for loading custom TrustStore work, we
>> > have to add the provider as 'first' in the list since there are others
>> >
>> > with
>> >
>> > the same algorithm.
>> >
>> > However, the programatic way of adding provider
>> > (Security.insertProviderAt()) is *not* deterministic for ordering since
>> > different code can call the method for a different provider and
>> >
>> > depending
>> >
>> > upon the order of the call our provider can be first or pushed down the
>> > list. This can happen very well in any client application using Kafka.
>> >
>> > This
>> >
>> > is specially problematic for a case when you want to guarantee order
>> >
>> > for a
>> >
>> > Provider having "Standard Algorithms".
>> >
>> > If we add our provider in java.security file that definitely guarantees
>> > the order(unless somebody calls removeProvider() which is less
>> >
>> > likely). But
>> >
>> > if we add our provider in java.security file it will defeat the
>> >
>> > purpose of
>> >
>> > the KIP-492.
>> >
>> > In the gist - Apache Kafka must not rely on "un-deterministic" method
>> >
>> > to
>> >
>> > rely on Provider ordering.
>> >
>> > 3. If we just use existing ssl.provider kafka configuration then our
>> > provider will be used in SSLContext.getInstance(protocol, provider)
>> >
>> > call in
>> >
>> > SslFactory.java <http://sslfactory.java/> <http://sslfactory.java/> and
>> > if our provider does not have implementation for
>> > SSLContext.TLS/TLSv1.1/TLSv1.2 etc it breaks
>> >
>> > (we
>> >
>> > tested it). Example:
>> >
>> > In
>> >
>> > MyProvider sample above you see that I didn't add SSLContext.TLSv1 as
>> > "Service+Algorithm" and that didn't work for me. In SPIFFE provider you
>> > don't have this challenge since you are planning to bypass
>> >
>> > ssl.provider as
>> >
>> > you mention in the KIP-492.
>> >
>> > *Overall summary,*
>> >
>> > 1. Any provider based mechanisms- a) existing ssl.provider and
>> >
>> > b)KIP-492,
>> >
>> > for loading key/trust store using "Standard Algorithms" do not work
>> >
>> > 2. Approach suggested in our KIP-486 works without any issue and it is
>> > *not* our context specific solve
>> >
>> > 3. Based on above we feel KIP-492 and KIP-486 are complimentary changes
>> > and not contradicting or redundent.
>> >
>> > If you want we can do a joint session somehow to walk through the
>> >
>> > sample I
>> >
>> > have and various experiments I did. I would encourage you to do similar
>> > exercise by writing a Provider for "Standard Algorithm" for
>> > TrustStoreManager (like our needs) and see what you find since only
>> >
>> > writing
>> >
>> > samples can bring out the complexity/challenges we face.
>> >
>> > Thanks
>> > Maulin
>> >
>> > On Wed, Aug 14, 2019 at 11:15 PM Maulin Vasavada <
>> >
>> > maulin.vasavada@gmail.
>> >
>> > com> wrote:
>> >
>> > Just to update - still working on it. Get to work only on and off on
>> >
>> > it :(
>> >
>> > On Thu, Aug 8, 2019 at 4:05 PM Maulin Vasavada <
>> >
>> > maulin.vasav...@gmail.com>
>> >
>> > wrote:
>> >
>> > Hi Harsha
>> >
>> > Let me try to write samples and will let you know.
>> >
>> > Thanks
>> > Maulin
>> >
>> > On Thu, Aug 8, 2019 at 4:00 PM Harsha Ch <harsha...@gmail.com>
>> >
>> > wrote:
>> >
>> > Hi Maulin,
>> > With java security providers can be as custom you would
>> >
>> > like
>> >
>> > it to
>> > be. If you only want to to implement a custom way of loading the
>> >
>> > keystore
>> >
>> > and truststore and not implement any protocol/encryption handling you
>> can
>> > leave them empty and no need to implement. Have you looked into the
>> links I
>> > pasted before?
>> >
>> > https://github.com/spiffe/spiffe-example/blob/master/java-spiffe/
>> >
>> >
>> spiffe-security-provider/src/main/java/spiffe/api/provider/SpiffeKeyStore.
>> >
>> > java
>> >
>> > https://github.com/spiffe/spiffe-example/blob/master/java-spiffe/
>> > spiffe-security-provider/src/main/java/spiffe/api/provider/
>> > SpiffeTrustManager.java <http://spiffetrustmanager.java/>
>> >
>> > https://github.com/spiffe/spiffe-example/blob/master/java-spiffe/
>> >
>> >
>> spiffe-security-provider/src/main/java/spiffe/api/provider/SpiffeProvider.
>> >
>> > java
>> >
>> > Can you please tell me which methods are too complex in above to
>> >
>> > implement
>> >
>> > or unnecessary? You are changing anything in SSL/TLS implementations
>> > provided by
>> >
>> > All of the implementations delegating the checks to the default
>> > implementation anyway.
>> > Spire agent is an example, its nothing but a GRPC server listening
>> >
>> > on a
>> >
>> > unix domain socket . Above code is making a RPC call to the local
>> >
>> > daemon
>> >
>> > to
>> > get the certificate and keys. The mechanics are pretty much same as
>> >
>> > what
>> >
>> > you are asking for.
>> >
>> > Thanks,
>> > Harsha
>> >
>> > 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.vasavada@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 <http://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?
>> >
>> > --
>> > Thanks,
>> > M.Sai Sandeep
>> >
>> >
>>
>

Reply via email to