I'm back at my computer now so was able to find the JIRA: https://issues.apache.org/jira/browse/HBASE-27326
I ended up not tackling it partially for the reason Andrew mentions -- I realized that even our use-case did not cleanly fit into the proposal there. So instead we ended up exposing the actual certificate chain [1] in the RpcCallContext, so that a user can make their own implementation using coprocessors, etc to do whatever they like. [1] https://issues.apache.org/jira/browse/HBASE-28317 On Mon, Jun 10, 2024 at 3:05 PM Andrew Purtell <apurt...@apache.org> wrote: > Cool. > I suggest hbase-examples because different organizations will embed a user > name or potenitally other details into certificate fields differently, so > there isn't a one size fits all solution. However HBase could provide a > worked example where the username is in CN. > > On Mon, Jun 10, 2024 at 12:32 AM Andor Molnar <an...@apache.org> wrote: > > > On Sun, 2024-06-09 at 23:10 -0700, Andrew Purtell wrote: > > > > > There is middle ground between your position and a blanket trust of > > > connection header parameters from any client with a valid > > > certificate... > > > Certificates can carry additional information, including usernames, > > > which > > > would be protected by the signature. Sometimes this is done. HBase > > > doesn't > > > implement it (yet) and if you have a trust architecture that demands > > > it, it > > > would establish the username as attested by an authority, like a > > > kerberos > > > ticket. You'd use a netty API presumably in a coprocessor hook to get > > > it in > > > order to hand off to UGI. Should someone decide this is needed it > > > would > > > make a good contribution back to the project, somewhere in hbase- > > > examples > > > perhaps. > > > > Exactly. That's what I wanted to clarify and pointed what other > > projects (like ZooKeeper) are doing under the hood of x509 > > authentication. I definitely would like to contribute something similar > > for HBase too. > > > > Thanks for the pointer of hbase-examples. > > > > Andor > > > > > > > > > > > > > > On Sun, Jun 9, 2024 at 10:57 PM Andrew Purtell <apurt...@apache.org> > > > wrote: > > > > > > > Like I said the successful verification of the certificate implies > > > > the > > > > client is trustworthy, including what the client supplies in the > > > > header. > > > > Now, if within your organization, you are distributing trusted > > > > certificates > > > > to potentially untrustworthy software, that is a you problem, as > > > > they say. > > > > > > > > It is absolutely not true that kerberos authentication is > > > > *required* when > > > > using mTLS. Frankly I'd prefer you expand on such comments to > > > > explain why > > > > you might have untrustworthy clients operating in your production > > > > as > > > > opposed to another organization with competent operations and > > > > better > > > > controls. Otherwise this flirts with F.U.D. > > > > > > > > > > > > On Sun, Jun 9, 2024 at 10:07 PM Andor Molnar <an...@apache.org> > > > > wrote: > > > > > > > > > Yeah. I think the key point here is that the client certificate > > > > > identifies the originating "host" and not the "user", hence we > > > > > have the > > > > > client hostname verification built-in. The only thing that you > > > > > can be > > > > > sure about when you do mTLS is that the request is coming from a > > > > > legitimate host. > > > > > > > > > > Therefore you still need a secure authentication method in order > > > > > to > > > > > prevent legitimate users to impersonate each other. > > > > > > > > > > For instance, you have Alice and Bob valid users both having > > > > > trusted > > > > > client certificates. They both can make requests from legitimate > > > > > hosts, > > > > > but with SIMPLE auth they're free to lie about their valid > > > > > usernames. > > > > > > > > > > As far as I know, the only secure authentication option for HBase > > > > > is > > > > > Kerberos, so you still have to use it. Using mTLS will prevent > > > > > attackers from making requests from ordinary hosts by stoling > > > > > Kerberos > > > > > tokens. > > > > > > > > > > Andor > > > > > > > > > > > > > > > > > > > > On Sun, 2024-06-09 at 13:45 -0400, Bryan Beaudreault wrote: > > > > > > mTLS is totally unrelated to the username. It's whatever you'd > > > > > > typically > > > > > > have without mTLS. > > > > > > > > > > > > On Sun, Jun 9, 2024 at 1:38 PM Andor Molnar <an...@apache.org> > > > > > > wrote: > > > > > > > > > > > > > That is a completely fair point and I agree that from > > > > > > > security > > > > > > > perspective, the approach is safe enough. > > > > > > > > > > > > > > I'd just like to figure out what is the username in this > > > > > > > case? > > > > > > > Linux > > > > > > > user id? Anything that comes from SASL layer based on the > > > > > > > Hadoop > > > > > > > stack? > > > > > > > > > > > > > > Andor > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Fri, 2024-06-07 at 09:30 -0700, Andrew Purtell wrote: > > > > > > > > Most users who would employ a mTLS authentication scheme > > > > > > > > would > > > > > > > > operate with this trust model. The fact the client has a > > > > > > > > valid > > > > > > > > signed > > > > > > > > certificate means it can be trusted, and that trust > > > > > > > > includes > > > > > > > > supplied > > > > > > > > connection metadata like username. Or, if not, then not. > > > > > > > > So then a lot of security engineering effort goes in to > > > > > > > > protecting > > > > > > > > the trust established by certificate distribution, like > > > > > > > > using > > > > > > > > short > > > > > > > > lived certs, and secure distribution methods. > > > > > > > > > > > > > > > > > On Jun 7, 2024, at 6:34 AM, Bryan Beaudreault < > > > > > > > > > bbeaudrea...@apache.org> wrote: > > > > > > > > > > > > > > > > > > You're sort of correct. We've been using mTLS in prod > > > > > > > > > for a > > > > > > > > > while > > > > > > > > > now, ever > > > > > > > > > since the feature was committed. It's true that the > > > > > > > > > actual > > > > > > > > > HBase > > > > > > > > > username > > > > > > > > > is not verified with mTLS, however you still can > > > > > > > > > authenticate > > > > > > > > > the > > > > > > > > > connection. The idea behind mTLS is that the certificate > > > > > > > > > carries > > > > > > > > > the > > > > > > > > > authentication -- so a client will need a certificate > > > > > > > > > which has > > > > > > > > > been signed > > > > > > > > > by the same CA (or at least within the CA chain) which > > > > > > > > > signed > > > > > > > > > the > > > > > > > > > server's > > > > > > > > > certificate, and vise versa. > > > > > > > > > > > > > > > > > > For us, if someone has a valid certificate and the mTLS > > > > > > > > > authentication > > > > > > > > > succeeds, then we just trust their username. Based on how > > > > > > > > > we > > > > > > > > > use > > > > > > > > > HBase in > > > > > > > > > our environment, this is perfectly secure for our use- > > > > > > > > > case. > > > > > > > > > That > > > > > > > > > may not > > > > > > > > > work for everyone, and I did file a jira to add a feature > > > > > > > > > for > > > > > > > > > validating > > > > > > > > > the username (perhaps pulling from a custom certificate > > > > > > > > > property). > > > > > > > > > But I > > > > > > > > > haven't actually implemented that, and not sure that I > > > > > > > > > will > > > > > > > > > since > > > > > > > > > it works > > > > > > > > > as-is for us. > > > > > > > > > > > > > > > > > > I'm on mobile now so I can't find it, but it should be > > > > > > > > > findable > > > > > > > > > in > > > > > > > > > jira if > > > > > > > > > you search the tls-related tickets > > > > > > > > > > > > > > > > > > > On Fri, Jun 7, 2024 at 8:53 AM Andor Molnar < > > > > > > > > > > an...@apache.org > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > Hi Bryan / Hbase devs, > > > > > > > > > > > > > > > > > > > > Based on the changes when you added mTLS support in > > > > > > > > > > HBASE- > > > > > > > > > > 27280 > > > > > > > > > > [1], > > > > > > > > > > only the certificate and hostname verification part > > > > > > > > > > were > > > > > > > > > > added to > > > > > > > > > > the > > > > > > > > > > codebase. HBase doesn't actually authenticates the user > > > > > > > > > > when > > > > > > > > > > mTLS > > > > > > > > > > is > > > > > > > > > > being used. > > > > > > > > > > > > > > > > > > > > In other words some other auth method Simple or > > > > > > > > > > Kerberos is > > > > > > > > > > still > > > > > > > > > > needed to identify the HBase user, because mTLS doesn't > > > > > > > > > > extract > > > > > > > > > > identity information from the client certificate and > > > > > > > > > > doesn't > > > > > > > > > > map > > > > > > > > > > it to > > > > > > > > > > an active HBase user. > > > > > > > > > > > > > > > > > > > > Is that correct? > > > > > > > > > > > > > > > > > > > > Regards, > > > > > > > > > > Andor > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > [1] https://issues.apache.org/jira/browse/HBASE-27280 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > Best regards, > Andrew > > Unrest, ignorance distilled, nihilistic imbeciles - > It's what we’ve earned > Welcome, apocalypse, what’s taken you so long? > Bring us the fitting end that we’ve been counting on > - A23, Welcome, Apocalypse >