As pointed out by Kevin the KnoxShell can download the cert today by just
going to https://KNOX_HOSTNAME:KNOX_PORT. The only thing we need to
implement within the scope of this JIRA is to add a new KnoxShell
command to make it happen.
Larry's recommendation about creating a new landing page that has links to
admin UI, PEM and JKS truststores, etc... should be covered later on; new
JIRAs should be created and addressed.

On Mon, Feb 25, 2019 at 5:29 PM larry mccay <lmc...@apache.org> wrote:

> I think it is mostly a client side replacement for what KnoxCLI export-cert
> does which doesn't require SSH to the gateway machine.
> Think about KnoxShell users and that they may only have line of site of the
> gateway endpoints but not access to the machine.
>
> Yes, one could do the same with openssl s_client but we could do better
> than that for them.
>
> On Mon, Feb 25, 2019 at 11:13 AM Robert Levas <rle...@cloudera.com.invalid
> >
> wrote:
>
> > What is the use case for this?
> >
> > If a user just wants to download the TLS certificate, couldn't they
> execute
> > the following on the command line?
> >
> > openssl s_client -connect *knoxhost*:*knoxport* -showcerts </dev/null
> > 2>/dev/null | openssl x509 -outform PEM > knox_gateway.pem
> >
> >
> > Then the user can import the PEM file into their truststore.
> >
> > Or maybe the KnoxCLI can do this for the user.
> >
> >
> > On Mon, Feb 25, 2019 at 10:48 AM Phil Zampino <pzamp...@apache.org>
> wrote:
> >
> > > I'll echo the reservations around the overhead (config, performance,
> > > etc...) associated with an additional endpoint.
> > >
> > > I like the idea of leveraging the browser (cited by Larry), which
> already
> > > has a built-in mechanism for allowing the user to explicitly allow the
> > > interaction with the potentially untrusted Knox endpoint (e.g.,
> > self-signed
> > > cert deployment).
> > >
> > > The solution might be as simple as a download link on the Admin UI. The
> > > KnoxShell command could use loginInsecure() to access that link
> location,
> > > presuming it will be a well-known resource path.
> > >
> > > Thanks,
> > >    Phil
> > >
> > >
> > > On Mon, Feb 25, 2019 at 10:06 AM larry mccay <lmc...@apache.org>
> wrote:
> > >
> > > > Hi Sandor -
> > > >
> > > > Thanks for starting this discussion and taking up that task!
> > > >
> > > > +1 to Kevin's points.
> > > > KnoxSession already has a loginInsecure() method as well.
> > > >
> > > > I also think that it needs to be available from the Admin UI - in
> which
> > > > case the SSL cert is already trusted by your browser or the exception
> > > > already added.
> > > > The API use from KnoxShell is a bit odd as there is no protection
> > > against a
> > > > MITM returning a cert and intercepting all KnoxShell requests.
> > > > I'd like the primary mechanism to be a download link.
> > > > At least when the cert is CA signed, the browser will validate the
> > > hostname
> > > > and that it is trusted as part of the download whereas the
> > > loginInsecure()
> > > > will not.
> > > > Perhaps, we should try login() first and when it fails hostname
> > > validation
> > > > then we fallback to loginInsecure().
> > > >
> > > > thanks,
> > > >
> > > > --larry
> > > >
> > > > On Mon, Feb 25, 2019 at 9:54 AM Kevin Risden <kris...@apache.org>
> > wrote:
> > > >
> > > > > I'm not a fan of adding a new endpoint. This port would need to be
> > > > > configurable. We would need to ensure that it always points to the
> > > > correct
> > > > > location.
> > > > >
> > > > > Instead, can we download the cert from the existing HTTPS endpoint?
> > We
> > > > > would have to not trust the TLS connection to pull the public cert,
> > but
> > > > > this is the same as pulling the truststore over the HTTP endpoint
> you
> > > > > proposed. This will guarantee we don't have to do anything special
> on
> > > > > startup and will work with any configured TLS certificate.
> > > > >
> > > > > Kevin Risden
> > > > >
> > > > >
> > > > > On Mon, Feb 25, 2019 at 9:44 AM Sandor Molnar
> > > > <smol...@cloudera.com.invalid
> > > > > >
> > > > > wrote:
> > > > >
> > > > > > Hi folks,
> > > > > >
> > > > > > I've just started to think about how to resolve
> > > > > > https://issues.apache.org/jira/browse/KNOX-1418 and an approach
> > > could
> > > > > be:
> > > > > >
> > > > > > 1.) Server-side changes
> > > > > > I'm thinking of starting a new embedded Jetty instance when the
> > > gateway
> > > > > > server starts on a pre-configured port (e.g. 8100) with a simple
> > HTTP
> > > > > > connector. This connector would have only one handler: Jetty's
> > > > > > ResourceHandler (
> > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> https://www.eclipse.org/jetty/javadoc/9.4.8.v20171121/index.html?org/eclipse/jetty/server/handler/ResourceHandler.html
> > > > > > ).
> > > > > > Whenever the gateway is started we would export the public cert
> of
> > > the
> > > > > > gateway into a dedicated folder (e.g.
> > > > > > $GATEWAY_HOME/data/security/clientCert/gateway-client-trust.jks).
> > We
> > > > have
> > > > > > to configure the ResourceHandler to allow access to this folder
> > only
> > > > > (thus
> > > > > > nothing else will be exposed through this new endpoint).
> > > > > >
> > > > > > 2.) KnoxShell-side changes
> > > > > > Within KnoxShell we should add a new command that simply hits the
> > new
> > > > > > endpoint and save the output in the root of the current user (for
> > > > > instance
> > > > > > curl
> http://c7401.ambari.apache.org:8100/gateway-client-trust.jks
> > >
> > > > > > ~/gateway-client-trust.jks)
> > > > > >
> > > > > > 3.) Optionally, we may change KnoxCLI to inform the end-user
> about
> > > the
> > > > > new
> > > > > > location of the JKS certificate in case the user executes
> > `knoxcli.sh
> > > > > > export-cert --type JKS` (it does not make sense to do the same
> what
> > > we
> > > > > > already have)
> > > > > >
> > > > > > Any comments are highly appreciated!
> > > > > >
> > > > > > I've already coded a POC and it works as expected:
> > > > > >
> > > > > > $ rm -f ~/gateway-client-trust.jks
> > > > > >
> > > > > > $ curl
> > http://c7401.ambari.apache.org:8100/gateway-client-trust.jks
> > > >
> > > > > > ~/gateway-client-trust.jks
> > > > > >   % Total    % Received % Xferd  Average Speed   Time    Time
> > >  Time
> > > > > > Current
> > > > > >                                  Dload  Upload   Total   Spent
> > > Left
> > > > > > Speed
> > > > > > 100   674  100   674    0     0  43602      0 --:--:-- --:--:--
> > > > --:--:--
> > > > > > 44933
> > > > > >
> > > > > > $ ./bin/knoxshell.sh samples/ExampleWebHdfsLs.groovy
> > > > > > Enter username: guest
> > > > > > Enter password:
> > > > > > [app-logs, ats, atsv2, hdp, mapred, mr-history, tmp, user]
> > > > > >
> > > > > >
> > > > > > Thanks,
> > > > > > Sandor
> > > > > >
> > > > >
> > > >
> > >
> >
>

Reply via email to