Unable to use Browzer, looping refresh on Chrome

I followed the example setup for BrowZer and Zac. However when I get to the final step of logging in to Browzer (brozac.domain.com:8446) I get greeted with the below certificate alert, then the page just loops reloading constantly. I can't see any errors in the brozac service for it.

I tried on Firefox as well however it looks like Firefox version 123 is not supported.

I checked my Zac login directly and that works, I can login to Auth0 and see a user created for my email address so I assume at least part of the puzzle is working.

The one thing I do see is in the Chrome console I have the following warning
_shouldRouteOverZiti: no associated Ziti config, bypassing intercept of

Any help would be greatly appreciated. Also Shoutout to the very helpful ZitiTV, very helpful when I needed a bit more detail.

1 Like

Hi @zHines, welcome to the community, to BrowZer and to OpenZiti!

The popup you see is merely a nuisance, but it's a common complaint. The first time you go to a browzer-enabled site you get that popup. We keep trying to discover a good way of suppressing the need for it and I'm sure we will some day but we havent' cracked that nut yet. Until that day, you can just ignore that first prompt. That is the server "demanding" the client supply a certificate before it connects. It's a "mutual TLS" thing...

As you discovered, BrowZer currently only works in chrome variants. That is true.

As to the BrowZer infinite redirect, that has been something I've hit myself but it's usually only "the first times" I do browzer, while I'm getting used to things (aka: as I mess them up). The best thing to do is to go to dev tools -> Application tab -> storage and "Clear site data". -- all of it. That OFTEN solves the issue.

As for your log message, it makes me think you have something else wrong though. "no associated Ziti Config" sounds to me like you don't have something setup just right.

The things to check here are:

  • you have an external jwt signer
  • you have an auth policy
  • the external jwt signer refers to the correct claims property
  • the IdP is configured to return that particular claim (often "email") and you can verify the jwt returned has that claim
  • you have made an identity that uses the --external-Id field and use the proper value in that field
  • the issuer used matches the jwt issuer exactly (we've seen people put in https://host/ but the issuer doesn't have a trailing slash: https://host and that causes issues)

Hopefully that all makes enough sense and is easy enough to follow? Glad you found the ZitiTV helpful! There was a follow-up that used KeyCloak specifically that might also be worth watching (well skimming since you're close)

You can find that here:

Hope that helps.

1 Like

Hi there,

Clearing storage did not help, I tried a couple of times. To Answer the rest of your checks.

  • you have an external jwt signer
    • Confirmed at <zac_url?/jwt-signers
      • issuer matches Auth0 domain
      • audience matches Auth0 clientID
      • claim property is email
      • it is enabled and use External is true.
  • you have an auth policy
    • Confirmed at <zac_url>/auth-policies
      • browzer-auth0-auth-policy extists, external JWT is true and an allow external JWT signers is set
  • the external jwt signer refers to the correct claims property
    • Confirmed at <zac_url?/jwt-signers claim property is email
  • the IdP is configured to return that particular claim (often "email") and you can verify the jwt returned has that claim
    • Confirmed using jwt.io I got the JWT from Chrome session storage and confirmed the email property is set and is my email.
  • you have made an identity that uses the --external-Id field and use the proper value in that field
    • Confirmed at <zac_url>/identities
      • user exists with identity name of my email, external id is my email, auth policy is browzer-auth0-auth-policy
      • This user is marked "online" and "Unregistered" not sure if that matters.
  • the issuer used matches the jwt issuer exactly (we've seen people put in https://host/ but the issuer doesn't have a trailing slash: https://host and that causes issues)
    • Confirmed at <zac_url?/jwt-signers
      • issuer is https://<auth0_host>/ matching iss value in the jwt.

One other thing that could be worth mentioning is every time navigate to the brozac url it does redirect me to the auth0 logout confirmation prompt, not sure if that is related.

Also thank-you in advance for pointing out the KeyCloak ZitiTV, I plan on using Keycloak in production once I validate my use cases.

1 Like

Another thing I have noticed is that the ctrl.<my_url>:8443 url to Zac returns a netfoundry certificate still, not my wildcard certificate, I am not sure if that's related. I have checked and I have the ZITI_PKI_ALT_SERVER_KEY and ZITI_PKI_ALT_SERVER_CERT set in my quickstart/<ip_XX>/<ip_XX>.env file and have sourced that file.

1 Like

Oh that's quite the hint. That makes me think the alt server certs are indeed wrong. At the beginning of the browzer instructions there's this important section:

Do you know if you correctly followed these instructions? It's really easy to overlook this. Is the indentation correct in the yaml? That's also super easy to mess up and yaml is sensitive to that.

Here's my example setup:

identity:
  cert:        "/home/ubuntu/.ziti/quickstart/ip-172-31-11-231/pki/ip-172-31-11-231-intermediate/certs/ip-172-31-11-231-client.cert"
  server_cert: "/home/ubuntu/.ziti/quickstart/ip-172-31-11-231/pki/ip-172-31-11-231-intermediate/certs/ip-172-31-11-231-server.chain.pem"
  key:         "/home/ubuntu/.ziti/quickstart/ip-172-31-11-231/pki/ip-172-31-11-231-intermediate/keys/ip-172-31-11-231-server.key"
  ca:          "/home/ubuntu/.ziti/quickstart/ip-172-31-11-231/pki/cas.pem"
  alt_server_certs:
    - server_cert:  "/etc/letsencrypt/live/clint.demo.openziti.org/fullchain.pem"
      server_key:   "/etc/letsencrypt/live/clint.demo.openziti.org/privkey.pem"

does yours look like that? I just stood this up, you should be able to check out my controller here: https://ctrl.clint.demo.openziti.org:8441/

Also make sure the server can read those ALT certs if you do it this way. They'll be only available to root by default if using LetsEncrypt

I did set those variables correctly and have confirmed the below certs in ~/.ziti/quickstart/ip-172-31-4-61/ip-172-31-4-61.yaml

    # Allows the webListener to have a specific identity instead of defaulting to the root 'identity' section.
    identity:
      ca:          "/home/ubuntu/.ziti/quickstart/ip-172-31-4-61/pki/ip-172-31-4-61-edge-controller-root-ca/certs/ip-172-31-4-61-edge-controller-root-ca.cert"
      key:         "/home/ubuntu/.ziti/quickstart/ip-172-31-4-61/pki/ip-172-31-4-61-edge-controller-intermediate/keys/ec2-13-236-44-189.ap-southeast-2.compute.amazonaws.com-server.key"
      server_cert: "/home/ubuntu/.ziti/quickstart/ip-172-31-4-61/pki/ip-172-31-4-61-edge-controller-intermediate/certs/ec2-13-236-44-189.ap-southeast-2.compute.amazonaws.com-server.chain.pem"
      cert:        "/home/ubuntu/.ziti/quickstart/ip-172-31-4-61/pki/ip-172-31-4-61-edge-controller-intermediate/certs/ec2-13-236-44-189.ap-southeast-2.compute.amazonaws.com-client.cert"
      alt_server_certs:
      - server_cert: "/etc/letsencrypt/live/remote-demo.hines.au/fullchain.pem"
        server_key:  "/etc/letsencrypt/live/remote-demo.hines.au/privkey.pem"

I also have confirmed the cert locations.

ubuntu@ip-172-31-4-61:~$ ls -la /etc/letsencrypt/live/remote-demo.hines.au/
total 12
drwxr-xr-x 2 root zitiweb 4096 Mar 10 01:24 .
drwxr-x--- 3 root zitiweb 4096 Mar 10 01:24 ..
-rw-r--r-- 1 root zitiweb  692 Mar 10 01:24 README
lrwxrwxrwx 1 root zitiweb   44 Mar 10 01:24 cert.pem -> ../../archive/remote-demo.hines.au/cert1.pem
lrwxrwxrwx 1 root zitiweb   45 Mar 10 01:24 chain.pem -> ../../archive/remote-demo.hines.au/chain1.pem
lrwxrwxrwx 1 root zitiweb   49 Mar 10 01:24 fullchain.pem -> ../../archive/remote-demo.hines.au/fullchain1.pem
lrwxrwxrwx 1 root zitiweb   47 Mar 10 01:24 privkey.pem -> ../../archive/remote-demo.hines.au/privkey1.pem

and the final path of the symlink

ubuntu@ip-172-31-4-61:~$ ls -la /etc/letsencrypt/archive/remote-demo.hines.au/
total 24
drwxr-xr-x 2 root zitiweb 4096 Mar 10 01:24 .
drwxr-x--- 3 root zitiweb 4096 Mar 10 01:24 ..
-rw-r--r-- 1 root zitiweb 1509 Mar 10 01:24 cert1.pem
-rw-r--r-- 1 root zitiweb 1826 Mar 10 01:24 chain1.pem
-rw-r--r-- 1 root zitiweb 3335 Mar 10 01:24 fullchain1.pem
-rw-r----- 1 root zitiweb  241 Mar 10 01:24 privkey1.pem

Yeah. I hit your controller and your certs seems good to me! We'll have to see what @curt thinks. There's probably something subtle wrong...

On further checking it looks like some, but not all services have loaded the correct certs, I believe only Zac is missing the cert chain.

https://ctrl.remote-demo.hines.au:8446/ and https://ctrl.remote-demo.hines.au:8441 both return the correct cert https://ctrl.remote-demo.hines.au:8443 does not.

It's probably expected that this ZAC uses the non-LE certs. I think that's how I did it in that walkthrough. You could certainly update that ZAC to use the LE certs if you want.

I hit my broazc too and I'm getting a 404 from my keycloak IdP so something change between the last time I got this all working and now. I'll work with curt to get my env working and one of us will follow up later tomorrow.

No worries, thank-you for the help. I will check in for an update tomorrow. Once we have this issue resolved I will possibly post a few more questions I have in relation to the best-practice for setting up BrowZer to route to other servers over the Linux Tunnel system.

Hrm. I ended up getting it sorted and working with keycloak...

I have a bunch of scripts that install "all the things" automatically. I dunno if you want to look through those scripts to see if you did all the same steps or not... I'll see if i can work up a set of test commands to use that can probe your config to see if it's all setup correctly tomorrow... :slight_smile: late here now

No worries, I look forward to an update tomorrow, if I get time later today I will have a look at the Keycloak scripts and see if anything stands out.

They're raw, but if you're inclined they're all in openziti-scripts/ziti-zrok-browzer at main · dovholuknf/openziti-scripts · GitHub. The install.sh script is the main entry to setting up ziti, zrok, and browser. You can skim and find the relevant bits... Browser install script is here openziti-scripts/ziti-zrok-browzer/install.browzer.sh at main · dovholuknf/openziti-scripts · GitHub

@zHines You mentioned Firefox, so I thought I'd mention that we support only Chromium-based browsers right now (Chrome, Brave, Edge).

This is just a hunch, but you might be hitting a known problem. Can you do the following:

  • in Chrome, visit chrome://flags
  • then search for "JSPI"
  • then enable it:
  • then restart Chrome as directed
  • then retry hitting your browZer URL

Let us know if the loop goes away, or not.

1 Like

@curt No luck on the above, I tried that and cleared all application data, still no luck. I have also tried on both a windows machine, Linux machine and Android phone on three different networks just to eliminate most client side issues.

1 Like

@zHines can you please set ZITI_BROWZER_RUNTIME_LOGLEVEL=trace in your bootstrapper, then restart it, then in Chrome, open a new tab and open dev tools, then hit your browZer URL, then once you see the loop happen, go to the dev tools Console tab, then save the log (via right-click Save-As...), and send the log to me (a DM is fine if you like).

@curt I have collected the logs you requested, however I can't for the life of me find a button to send a DM. Can you please point me in the right direction so I can send you the logs.

Click on my name in this msg, and a popup should appear with a Message button

image


I don't appear to have message as an option.