So... how can you improve upon this?
Well .. after all of all the great insights everyone has provided.. I see a few different directions.. depending upon what is possible and what makes sense.
I have tried to offer a full range of options.. please add to them if you have further ideas.. or if they can be further improved upon.
1. BrowZer
I am very keen to use this.. as it is going to be the long term solution.
As I understand, it works natively within the browser to authenticate the user.. before being provided with access to the ziti network
It would be great to learn more about this, especially how to works with and manages client based certificates to identify the user.
2. Turn user account management functionality into an app
This would provide the means to integrate into the Ziti SDK for native end to end encryption.
However, there are some scenarios where this may not be possible.. and will still require a webapp.
3. Personalised Subdomains
After reflecting on the comments from @TheLumberjack, personalised subdomains could work.. though can it scale?.. it will require a bit more effort to setup... so is the effort worth it?.. maybe if it could be automated.
so what would it look like?
All users would log into the "user account" section of your website using their on subdomain.. One example is
' http://scott.markamind.com
This subdomain would have a server certificate to encrypt the data between the users machine and the server.
Ok.. but where is the client certificate?
Great question.. the personalised subdomain would act as a reverse proxy.. that is accessible over a public DNS
To provide the client certificate, I would enrol the identity for "Scott" on this instance of the reverse proxy. This would happen as a part of the user onboarding process.
Then.. as I go about updating my account information on my personalised subdomain.. I am accessing the backend server over the ziti network.
Now, my backend application server can be locked down and only provide connection with clients that that have been validated with a client certificate.
This is not necessarily a complete solution... as the reverse proxy can still be compromised to gain access to the client certificate.
If this did happen, the controls within the Ziti controller can be used to mitigate the scope of the attack.
Some options include
- Multi factor authentication
- Regular posture checking
- Instant access revocation
When you compare this to a standard server certificate scenario, the advantage is the size of the surface attack.
Rather than exposing your entire app server to the public DNS.. it is limited to the individualised reverse proxy server per user.
As I understand, you can do something like this with a load balancer.. and put in application firewalls and other bits and pieces..to offer protection...
but then again.. such a solution cannot easily support client based certificates.. as I understand.. otherwise.. it would already be the standard today
However, this scenario does not compare to making your application server only accessible over a ziti network.
In my mind, I believe it worthwhile exploring how much can be automated to make it a viable solution... as there is a lot of ways it can be extended.
For instance.. rather than provide users with a reverse proxy.. what if they brought their own? This then changes the game.. as it allows the reverse proxy to be used by other user account services for other companies.
4. Ziti Browser
This is quite a radical idea..and way outside of my current capability.
In short, you take an open source browser like Firefox / Chromium etc.. and modify it so that it can only operate over a ziti network.
This would sort of like be like the Edge Tunneller.. where you enrol users into the network.. but rather than the encryption ending at the tunneller host, its now done natively in the browser.
Let me know if you have other suggestions / ideas.
Scott