Thanks Stefan for the pointer for the 'examples' directory. Will invest time in coming up with a reference custom implementation.
For your other comments around common encryption options, I agree with you on a challenge in order to prevent secure information getting leaked in logs. Let me create a separate branch and show how interface will change with keeping Common Encryption options + map instead of just the map. Thanks Maulin On Fri, Jul 9, 2021 at 2:59 PM Maulin Vasavada <maulin.vasav...@gmail.com> wrote: > Stefan Miklosovic > <https://cwiki.apache.org/confluence/display/~stefan.miklosovic> > > Hi MAULIN VASAVADA > <https://cwiki.apache.org/confluence/display/~maulin.vasavada>, few more > observations. I see that you have commented again on JIRA and I am starting > to be confused where to comment in relation to recent thread we had about > this so I am letting you know that I am ultimately using this communication > channel for discussion. > > In the context of your latest answers on JIRA - your interface makes sense > to me, I just want to be sure that we will not forget to add anything which > would a respective implementator need in the future and could not use > because it is just not exposed. I am not completely sure how to solve this > but I think that we just have to stick to our gut feeling that the solution > proposed will cover the most scenarios. > > If we do not feel safe, my idea was to show yet another implementation > where the possibility we would left a user behind is minimised. Otherwise, > without breaking older implementations used in future releases, we could > only introduce methods which would have default implementations. > > I prefer to have a map instead of common encryption options. On the other > hand, I can imagine that the custom implementation would try to bypass some > credentials into it (for example how to connect to a respective source of > these keystores / truststores) and if we ever decided to have some kind of > a tooling around this, e.g. in nodetool, to get a status of "how ssl is > configured", we might unintentionally leak security sensitive information > (credentials) by displaying them in plaintext in such tooling. We are using > JMX for this (I might expand on this if you are not familiar with that > mechanism of getting runtime info from Cassandra via JMX). Hence what we > might do is to actually not expose that map at all. We are not exposing > this kind of information yet in runtime and I do not think we actually have > a need for that I just find it important to say. > > I like the fact that configuration parameters for an implementation are > coupled with that factory configuration and it is just a basic map. Since > implementations are getting their EncryptionOptions + map of customs, I > prefer this instead of putting there whole map of parameters because then > you are just again "parsing it" from map in respective constructors. There > is nothing wrong with how this is done in your original PR, I would say. > The very same pattern of "maps" may be found across the code base, e.g. > auditing and similar. > > On Fri, Jul 9, 2021 at 2:59 PM Maulin Vasavada <maulin.vasav...@gmail.com> > wrote: > >> Stefan Miklosovic >> <https://cwiki.apache.org/confluence/display/~stefan.miklosovic> >> >> I ve taken a look too. Added some comments to PR. >> >> It would be awesome if we see some 3rd party implementation of this in >> action so we know it indeed works as intended. It is strange to just code >> up an interface by default logic for which it works but there isnt any >> (public) example how to do yet another impl. >> >> there is a directory called "examples" in the root of the repository. >> >> >> >> >> On Fri, Jul 9, 2021 at 2:58 PM Maulin Vasavada <maulin.vasav...@gmail.com> >> wrote: >> >>> [image: maulin.vasavada]Maulin Vasavada >>> <https://issues.apache.org/jira/secure/ViewProfile.jspa?name=maulin.vasavada> >>> added >>> a comment - Yesterday - edited >>> >>> On second thoughts Stefan Miklosovic >>> <https://issues.apache.org/jira/secure/ViewProfile.jspa?name=stefan.miklosovic>, >>> I feel if we examine the interface properly and make sure of the contract >>> and dependencies - input arguments to the methods and construction of the >>> implementation (for which I agree there is no good way given an interface) >>> object AND the return types/exceptions, it could be evaluated without >>> sample of a specific/custom implementation. The premise is very simple - >>> Allow SSLContext (in this case JSSE's and Netty's) creation to be >>> pluggable. Once we do that the specific implementation should not matter. >>> However the Cassandra's current integration point with that pluggable >>> interface does matter and need to make sure we are not violating existing >>> behavior - example - Caching of the Netty's ssl contexts, invocation of >>> context for Inbound/Outbound and Client/Native connections, threads running >>> for enabling hot reloading periodically etc. I know its a long answer to >>> your question but I have done very similar work for Apache Kafka ( >>> reference >>> <https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=128650952>) >>> and feel confident that it will work for custom implementations (like ours >>> is running in production for about 2 years now, albeit private >>> implementation). I've consulted many security experts internally and >>> externally to validate that - making SSLContext customizable/pluggable is >>> the best way to support various specific needs of bigger eco-systems. >>> >>> >>> >>> In fact based on my evaluation of the design - I do have two sub options >>> <https://cwiki.apache.org/confluence/display/CASSANDRA/CEP-9%3A+Make+SSLContext+creation+pluggable#CEP9:MakeSSLContextcreationpluggable-ImportantnoteaboutcommonSSLconfigurations> >>> that >>> I seek input from the community on - about consolidating all the encryption >>> options as a open ended Map argument coming to the interface's >>> implementation vs having a notion of CommonEncryptionOptions to keep some >>> of the existing implementation as-is. >>> >>> On Fri, Jul 9, 2021 at 2:58 PM Maulin Vasavada < >>> maulin.vasav...@gmail.com> wrote: >>> >>>> Hi Sumanth Pasupuleti >>>> <https://issues.apache.org/jira/secure/ViewProfile.jspa?name=sumanth.pasupuleti> >>>> and Stefan Miklosovic >>>> <https://issues.apache.org/jira/secure/ViewProfile.jspa?name=stefan.miklosovic> >>>> thanks >>>> for comments. Sorry I missed them before since I was just checking DISCUSS >>>> thread on the CEP >>>> >>>> >>>> >>>> Sumanth, I totally get what you are saying. However I feel the same way >>>> as you do that this is just SSLContext pluggability change and your >>>> suggestion should be a follow-up on the CEP-9 change. >>>> >>>> >>>> >>>> Stefan, your point is valid but I can only verify a custom >>>> implementation with our company's internal requirements. However it may be >>>> worth to provide a sample integration with HashiCorp Vault for example to >>>> fetch keys/certs and have a PoC. Not sure where that sample can be hosted >>>> though. >>>> >>>> Based on the latest discussion around improving CEP process, we may >>>> need to copy paste this discussion to DISCUSS thread also. Can you please >>>> post/copy your comments and I'd copy mine there? >>>> >>>> On Fri, Jul 9, 2021 at 2:58 PM Maulin Vasavada < >>>> maulin.vasav...@gmail.com> wrote: >>>> >>>>> [image: stefan.miklosovic]Stefan Miklosovic >>>>> <https://issues.apache.org/jira/secure/ViewProfile.jspa?name=stefan.miklosovic> >>>>> added >>>>> a comment - 01/Jul/21 19:20 >>>>> >>>>> I ve taken a look too. Added some comments to PR. >>>>> >>>>> It would be awesome if we see some 3rd party implementation of this in >>>>> action so we know it indeed works as intended. It is strange to just code >>>>> up an interface by default logic for which it works but there isnt any >>>>> (public) example how to do yet another impl. >>>>> >>>>> On Fri, Jul 9, 2021 at 2:57 PM Maulin Vasavada < >>>>> maulin.vasav...@gmail.com> wrote: >>>>> >>>>>> Sumanth Pasupuleti >>>>>> <https://issues.apache.org/jira/secure/ViewProfile.jspa?name=sumanth.pasupuleti> >>>>>> added >>>>>> a comment - 07/Jun/21 15:13 >>>>>> >>>>>> >>>>>> Maulin Vasavada >>>>>> <https://issues.apache.org/jira/secure/ViewProfile.jspa?name=maulin.vasavada> >>>>>> left >>>>>> a couple of review comments, but lgtm overall. >>>>>> >>>>>> One of the things I was hoping we can also achieve is to be able to >>>>>> provide mechanics to transparently transition from using one SSLFactory >>>>>> implementation to another, and using those mechanics, one could do the >>>>>> following on their cluster for moving from say Implementation1 to >>>>>> Implementation2 >>>>>> Stage #1: Current state of being only Implementation1 aware. Use >>>>>> keystore and trustmanager of implementation1 >>>>>> Stage #2: Start trusting both implementation1 and implementation2. >>>>>> Use keystore of implementation1, but use trustmanager of both >>>>>> implementation1 and implementation2 (using MultiTrustManagerFactory) (and >>>>>> perform a rolling restart of the cluster) >>>>>> Stage #3: Start using implementation2 for keystore, and perform a >>>>>> rolling restart of the cluster >>>>>> Stage #4: At this point, all nodes of the cluster are using >>>>>> implementation2 for keystore, but trust both implementation1 and >>>>>> implementation2, and we can now remove implementation1 from >>>>>> trustmanagers, >>>>>> and do a rolling restart. >>>>>> >>>>>> Since this ticket is about making SSLContext pluggable, I believe >>>>>> this is out of scope; cut a separate ticket CASSANDRA-16719 >>>>>> <https://issues.apache.org/jira/browse/CASSANDRA-16719> to track >>>>>> that work (I did an internal 3.0 patch for this transition work, and I >>>>>> can >>>>>> try porting it to 4.x once this ticket is committed) >>>>>> >>>>>> On Fri, Jul 9, 2021 at 2:56 PM Maulin Vasavada < >>>>>> maulin.vasav...@gmail.com> wrote: >>>>>> >>>>>>> Hi all >>>>>>> >>>>>>> I wanted to consolidate a couple of comments that started in >>>>>>> JIRA/Wiki here to keep it in one place. I'll post different posts as >>>>>>> replies for each comment. >>>>>>> >>>>>>> Thanks >>>>>>> Maulin >>>>>>> >>>>>>> On Tue, Jun 29, 2021 at 1:07 PM Maulin Vasavada < >>>>>>> maulin.vasav...@gmail.com> wrote: >>>>>>> >>>>>>>> ^^^ bumping up ^^^ this thread since people might have more time >>>>>>>> reviewing post 4.0 work. Specifically for this >>>>>>>> <https://cwiki.apache.org/confluence/display/CASSANDRA/CEP-9%3A+Make+SSLContext+creation+pluggable#CEP9:MakeSSLContextcreationpluggable-ImportantnoteaboutcommonSSLconfigurations> >>>>>>>> section in the CEP, I have coded for one option (here >>>>>>>> <https://github.com/maulin-vasavada/cassandra/commit/256ad30ecedbc50d66d8a039f8ca9e47074737ce>) >>>>>>>> and now will do for another option very soon. >>>>>>>> >>>>>>>> On Wed, Jun 2, 2021 at 5:11 PM Maulin Vasavada < >>>>>>>> maulin.vasav...@gmail.com> wrote: >>>>>>>> >>>>>>>>> Thank you Dinesh and everybody. Will keep calm and wait for the >>>>>>>>> feedback. Meanwhile I am experimenting with various implementation >>>>>>>>> options >>>>>>>>> for what I put as "will seek community's input >>>>>>>>> <https://cwiki.apache.org/confluence/display/CASSANDRA/CEP-9%3A+Make+SSLContext+creation+pluggable#CEP9:MakeSSLContextcreationpluggable-ImportantnoteaboutcommonSSLconfigurations>" >>>>>>>>> on the CEP document and learning little bit more about the CircleCI. >>>>>>>>> >>>>>>>>> On Wed, Jun 2, 2021 at 4:08 PM Dinesh Joshi >>>>>>>>> <djos...@icloud.com.invalid> wrote: >>>>>>>>> >>>>>>>>>> Hi Maulin, >>>>>>>>>> >>>>>>>>>> Thank you for the CEP & Patch. I’ve been following along albeit >>>>>>>>>> silently. Will take a look. It’s just that we’re currently busy so >>>>>>>>>> bear >>>>>>>>>> with us. >>>>>>>>>> >>>>>>>>>> Thanks, >>>>>>>>>> >>>>>>>>>> Dinesh >>>>>>>>>> >>>>>>>>>> > On Jun 2, 2021, at 3:28 PM, Maulin Vasavada < >>>>>>>>>> maulin.vasav...@gmail.com> wrote: >>>>>>>>>> > >>>>>>>>>> > Hi all >>>>>>>>>> > >>>>>>>>>> > ^^^ bump ^^^ I've raised the PR and am waiting for the review. >>>>>>>>>> Once I see >>>>>>>>>> > that the suggested changes are directionally right I'll start a >>>>>>>>>> VOTE thread >>>>>>>>>> > on the CEP (unless I am recommended to follow another process). >>>>>>>>>> > >>>>>>>>>> > Thanks >>>>>>>>>> > Maulin >>>>>>>>>> > >>>>>>>>>> >> On Thu, May 27, 2021 at 1:29 PM Maulin Vasavada < >>>>>>>>>> maulin.vasav...@gmail.com> >>>>>>>>>> >> wrote: >>>>>>>>>> >> >>>>>>>>>> >> HI all >>>>>>>>>> >> >>>>>>>>>> >> I've raised the PR with the changes. Specifically I would >>>>>>>>>> appreciate the >>>>>>>>>> >> community's input on this section of the CEP >>>>>>>>>> >> < >>>>>>>>>> https://cwiki.apache.org/confluence/display/CASSANDRA/CEP-9%3A+Make+SSLContext+creation+pluggable#CEP9:MakeSSLContextcreationpluggable-ImportantnoteaboutcommonSSLconfigurations >>>>>>>>>> > >>>>>>>>>> >> . >>>>>>>>>> >> >>>>>>>>>> >> Once we get some consensus on the PR (except minor code >>>>>>>>>> improvement >>>>>>>>>> >> suggestions) I'll start a VOTE thread for the CEP. >>>>>>>>>> >> >>>>>>>>>> >> I thank all the reviewers of the CEP and the PR in advance and >>>>>>>>>> am >>>>>>>>>> >> completely excited to contribute to Apache Cassandra. >>>>>>>>>> >> >>>>>>>>>> >> Thanks >>>>>>>>>> >> Maulin >>>>>>>>>> >> >>>>>>>>>> >> On Thu, May 27, 2021 at 11:04 AM Maulin Vasavada < >>>>>>>>>> >> maulin.vasav...@gmail.com> wrote: >>>>>>>>>> >> >>>>>>>>>> >>> Sounds good Brandon. I'll raise the PR in a couple of hours >>>>>>>>>> from now. >>>>>>>>>> >>> Thanks. >>>>>>>>>> >>> >>>>>>>>>> >>> On Thu, May 27, 2021 at 10:14 AM Brandon Williams < >>>>>>>>>> dri...@gmail.com> >>>>>>>>>> >>> wrote: >>>>>>>>>> >>> >>>>>>>>>> >>>> You can raise a PR in any state, but review will be a >>>>>>>>>> different >>>>>>>>>> >>>> matter. I would go ahead and raise it and the testing can >>>>>>>>>> be sorted >>>>>>>>>> >>>> out from there. >>>>>>>>>> >>>> >>>>>>>>>> >>>> On Thu, May 27, 2021 at 12:12 PM Maulin Vasavada >>>>>>>>>> >>>> <maulin.vasav...@gmail.com> wrote: >>>>>>>>>> >>>>> >>>>>>>>>> >>>>> Hi all >>>>>>>>>> >>>>> >>>>>>>>>> >>>>> I think I am close to raising a PR now but my CircleCI job >>>>>>>>>> >>>>> < >>>>>>>>>> https://app.circleci.com/pipelines/github/maulin-vasavada/cassandra >>>>>>>>>> > >>>>>>>>>> >>>>> doesn't make progress beyond key tasks success like unit >>>>>>>>>> tests, dtests, >>>>>>>>>> >>>>> cqlshlibtests. Any recommendation on if we need to see the >>>>>>>>>> whole >>>>>>>>>> >>>> CircleCI >>>>>>>>>> >>>>> job green before raising the PR? >>>>>>>>>> >>>>> >>>>>>>>>> >>>>> Thanks >>>>>>>>>> >>>>> Maulin >>>>>>>>>> >>>>> >>>>>>>>>> >>>>> On Fri, May 21, 2021 at 8:54 PM Maulin Vasavada < >>>>>>>>>> >>>> maulin.vasav...@gmail.com> >>>>>>>>>> >>>>> wrote: >>>>>>>>>> >>>>> >>>>>>>>>> >>>>>> I am almost done with all changes except the code snippet >>>>>>>>>> in the >>>>>>>>>> >>>>>> EncryptioOptions.java which determines 'enabled' and >>>>>>>>>> 'optional' >>>>>>>>>> >>>> encryption >>>>>>>>>> >>>>>> flags. Will raise the PR soon once I see my CircleCI >>>>>>>>>> getting green. >>>>>>>>>> >>>>>> >>>>>>>>>> >>>>>> On Fri, May 21, 2021 at 9:24 AM Maulin Vasavada < >>>>>>>>>> >>>> maulin.vasav...@gmail.com> >>>>>>>>>> >>>>>> wrote: >>>>>>>>>> >>>>>> >>>>>>>>>> >>>>>>> FYI - I am working on PR. I made some changes and trying >>>>>>>>>> to run >>>>>>>>>> >>>> tests. >>>>>>>>>> >>>>>>> >>>>>>>>>> >>>>>>> On Tue, May 18, 2021 at 10:14 PM Maulin Vasavada < >>>>>>>>>> >>>>>>> maulin.vasav...@gmail.com> wrote: >>>>>>>>>> >>>>>>> >>>>>>>>>> >>>>>>>> Thanks Nate for reviewing the CEP. Yes for change #3 in >>>>>>>>>> the CEP, I >>>>>>>>>> >>>> mean >>>>>>>>>> >>>>>>>> to have only single Default Impl and that would be a >>>>>>>>>> final class, >>>>>>>>>> >>>> not >>>>>>>>>> >>>>>>>> overridable. It will be basically an internal >>>>>>>>>> implementation. I've >>>>>>>>>> >>>> updated >>>>>>>>>> >>>>>>>> the CEP to reflect this. >>>>>>>>>> >>>>>>>> >>>>>>>>>> >>>>>>>> On Tue, May 18, 2021 at 7:21 PM Nate McCall < >>>>>>>>>> zznat...@gmail.com> >>>>>>>>>> >>>> wrote: >>>>>>>>>> >>>>>>>> >>>>>>>>>> >>>>>>>>> Hi Maulin, >>>>>>>>>> >>>>>>>>> Thanks for putting this together! >>>>>>>>>> >>>>>>>>> >>>>>>>>>> >>>>>>>>> Took a quick glance, and I can't think of a compelling >>>>>>>>>> reason on >>>>>>>>>> >>>> why >>>>>>>>>> >>>>>>>>> SSLContext should be final and your point about >>>>>>>>>> >>>> organization/compliance >>>>>>>>>> >>>>>>>>> issues requiring different implementations is a good >>>>>>>>>> one. >>>>>>>>>> >>>>>>>>> >>>>>>>>>> >>>>>>>>> Per #3 on your proposed changes, I'm keen to only >>>>>>>>>> support a single >>>>>>>>>> >>>>>>>>> default >>>>>>>>>> >>>>>>>>> impl in-tree. I don't think we should be in the >>>>>>>>>> business of >>>>>>>>>> >>>> picking >>>>>>>>>> >>>>>>>>> implementation to support. It looks like this is your >>>>>>>>>> intention >>>>>>>>>> >>>> as well? >>>>>>>>>> >>>>>>>>> >>>>>>>>>> >>>>>>>>> Thanks again, >>>>>>>>>> >>>>>>>>> -Nate >>>>>>>>>> >>>>>>>>> >>>>>>>>>> >>>>>>>>> On Wed, May 19, 2021 at 12:05 PM Maulin Vasavada < >>>>>>>>>> >>>>>>>>> maulin.vasav...@gmail.com> >>>>>>>>>> >>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>> >>>>>>>>>> >>>>>>>>>> Hi all >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Starting a discussion thread for the CIP-9 - >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>>> >>>> >>>>>>>>>> https://cwiki.apache.org/confluence/display/CASSANDRA/CEP-9%3A+Make+SSLContext+creation+pluggable >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> However, while writing the CIP two areas that came up >>>>>>>>>> in my mind >>>>>>>>>> >>>>>>>>> where I >>>>>>>>>> >>>>>>>>>> need to seek guidance apart from the other discussion >>>>>>>>>> that we >>>>>>>>>> >>>> would >>>>>>>>>> >>>>>>>>> have >>>>>>>>>> >>>>>>>>>> here, >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> 1. Whether to consider >>>>>>>>>> >>>> SSLFactory#tlsInstanceProtocolSubstitution() >>>>>>>>>> >>>>>>>>>> < >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>>> >>>> >>>>>>>>>> https://github.com/apache/cassandra/blob/cassandra-4.0/src/java/org/apache/cassandra/security/SSLFactory.java#L169 >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> for pluggability (noted this on the CIP as well) >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> 2. For Test Plan, apart from Integration Test and >>>>>>>>>> local system >>>>>>>>>> >>>> test >>>>>>>>>> >>>>>>>>> what >>>>>>>>>> >>>>>>>>>> would be recommended? >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Thanks >>>>>>>>>> >>>>>>>>>> Maulin >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>>> >>>>>>>> >>>>>>>>>> >>>> >>>>>>>>>> >>>> >>>>>>>>>> --------------------------------------------------------------------- >>>>>>>>>> >>>> To unsubscribe, e-mail: dev-unsubscr...@cassandra.apache.org >>>>>>>>>> >>>> For additional commands, e-mail: >>>>>>>>>> dev-h...@cassandra.apache.org >>>>>>>>>> >>>> >>>>>>>>>> >>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> --------------------------------------------------------------------- >>>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@cassandra.apache.org >>>>>>>>>> For additional commands, e-mail: dev-h...@cassandra.apache.org >>>>>>>>>> >>>>>>>>>>