T Techclick ← All lessons
Zscaler · ZPA · Clientless · Interactive lesson

ZPA Browser Access: a visitor pass, not a building key

A contractor opens a URL, authenticates against your IdP, and reaches exactly one internal web app — no agent, no VPN, no inbound firewall rule. This lesson is the production map: the flow, the 12 tickets that actually arrive, and the six hops where it quietly breaks.

20 min read · L2 primary · Quiz at end

⚡ Quick Answer

ZPA Browser Access is a visitor pass, not a building key. Publish one internal web app to an unmanaged browser — no agent, no inbound port — then work every production scenario and the six-hop fault map.

After this page you can

Ticket that starts this lesson

“Audit vendor starts Monday. Their laptop is theirs. They need the ticketing portal only. Do not give them VPN. Do not install our agent. And no, we are not opening 443 inbound.”

Quick answer

Browser Access publishes one internal HTTP/HTTPS application as a public hostname served by the ZPA Service Edge. The user authenticates at your IdP. Policy is checked per request. The App Connector still dials outbound only. The app server is never on the internet. What you lose is device posture — there is no Client Connector to report it.

The user who cannot install your agent

Hero · visitor pass
Contractor outside a locked building with a visitor pass — one app, no network key
Notice: they get a pass to one room. They do not get a key to the building. That is the whole Browser Access bargain.

ZPA’s normal model is clean: Zscaler Client Connector on the device, a broker in the cloud, an App Connector next to the app, and a one-to-one tunnel stitched between them. The user never touches the network. The app is never published to the internet.

Then reality shows up. A three-month audit vendor. A partner helpdesk. An employee on a personal iPad. A newly acquired company whose devices you do not manage yet. None of them will install your agent, and honestly none of them should.

The old answer was a DMZ reverse proxy or a VPN account with a network route — both mean an inbound listener and a routable path into your estate. Browser Access is the ZPA answer: the Service Edge itself becomes the reverse proxy for one published web application. The browser is the client. Brokering, SAML, policy, and the outbound-only connector tunnel stay the same as agent-based ZPA.

Who talks to whom
Unmanaged browser connects through a security broker to exactly one internal app
Browser → ZPA Service Edge → App Connector → one app. Public DNS lands on Zscaler, not on your perimeter.
The one-line definition

Browser Access publishes a single internal HTTP/HTTPS application as a public hostname served by the ZPA Service Edge, authenticated by your IdP and policy-checked per request, without exposing the app server or opening an inbound port. Official start: About Browser Access.

Mental model — visitor pass

Learn three objects before you click anything. If you skip this, every later menu looks like another VPN wizard.

1. Published hostname

The name the user types. Public DNS CNAMEs it to a Zscaler-supplied target so the browser lands on a ZPA Service Edge.

2. Browser Access certificate

The certificate the Service Edge presents during TLS. You upload one, or you let Zscaler generate and renew a managed certificate.

3. Internal application

The FQDN the App Connector resolves inside your estate. It must be HTTP/HTTPS and the server must support TLS 1.2.

Two things you do not get on this path: a network route, and a device posture signal. Policy can see the user, SAML attributes, and SCIM groups. It cannot see disk encryption or EDR, because nothing on the laptop is reporting.

Say this out loud

The Service Edge is the reverse proxy. The connector still dials out. Identity is the whole control plane. Posture is gone by design.

Session feel · four beats
Four-panel journey: URL, identity, policy, one unlocked app
Click URL → IdP login → policy allow → one app. If any beat is wrong, stop there. Do not rebuild the whole segment.

Words you will see in the portal

TermMeaning in this lesson
Application segmentThe object that names the app, port, and Browser Access checkbox. For Browser Access you may enter FQDNs only — no IP ranges.
SNIThe hostname the browser puts in TLS. The Service Edge uses it to pick the published application.
User PortalOptional landing page. After IdP login the user sees only the apps their policy entitles.
Privileged Remote Access (PRA)Different product path: RDP, SSH, VNC in an HTML5 console — not a web app.
Clientless Access diagnosticsThe log view for Browser Access transactions. Start here when one user fails.

Nine hops from click to app

A Browser Access failure is always a failure at one identifiable hop. Learn the order once; every ticket gets shorter.

Flow 1 · request path
UNMANAGED DEVICE ZSCALER CLOUD YOUR ESTATE — NO INBOUND PORT Any browser no ZCC · TLS 1.2+ Public DNS CNAME → Service Edge ZPA Service Edge — reverse proxy Terminates TLS with the Browser Access cert Matches SNI · rewrites host · holds connector mTLS Your IdP SAML + MFA SCIM groups Access policy user / SAML / group default = deny App Connector outbound 443 mTLS only resolves the internal FQDN Internal web app HTTP/HTTPS · TLS 1.2 required never internet-facing 1 2 3 4 5 6 7 8 — response returns the same brokered path. The app never sees the internet. 9 — session is re-evaluated against policy. No ZCC means no device signal at any step.

Read left → right, then follow the dashed return. The only client change versus agent ZPA is the browser; the connector story is unchanged.

  1. Browser asks public DNS for the published hostname.
  2. CNAME sends TLS to a ZPA Service Edge. Certificate must match that name.
  3. Unauthenticated request is redirected to your IdP (SAML).
  4. IdP returns assertion. ZPA evaluates access policy — user, SAML attribute, SCIM group. Default deny.
  5. On allow, the Service Edge uses the connector tunnel that is already up.
  6. App Connector resolves the internal FQDN and picks a server in the server group.
  7. Connector opens HTTP/HTTPS to the app. Server must speak TLS 1.2.
  8. Response returns the same path. No inbound port on your firewall changed.
  9. Later requests are re-checked. There is still no posture object to evaluate.
Two properties that fall out of the picture

The app is still not on the internet — the public name resolves to Zscaler. And the broker still brokers. What you lost is not control. It is device signal.

BA vs ZCC vs PRA — choose before you click

Decision feel
Decision diamond splitting Path A managed agent from Path B visitor-pass browser
Path A is a managed endpoint with Client Connector. Path B is clientless. Do not start in the Admin Portal until this diamond is answered.
Flow 2 · which access method
Can you install an agent? managed endpoint you own yes Client Connector any protocol · full posture no RDP, SSH or VNC? privileged console yes Privileged Remote Access HTML5 · approval · recording no HTTP/HTTPS by FQDN? web app the connector can name yes Browser Access clientless · identity policy only no Rethink the ask Sensitive data on an unmanaged device? Layer isolation or DLP — the browser is not a data boundary.

Protocol first, device second, data last. Most bad designs start at the bottom of this tree.

Client ConnectorBrowser AccessPrivileged Remote Access
Client neededAgent installedAny TLS 1.2 browserAny browser
ProtocolsTCP and UDP, any appHTTP / HTTPS onlyRDP, SSH, VNC
Device postureYesNoNo
Segment definitionFQDN, wildcard, IP, rangesFQDN onlyDefined per privileged app
Certificate neededNo public app certYes — published host or wildcardYes — portal certificate
Typical userEmployeeContractor, partner, BYODAdmin, third-party DBA
Session recordingNoNoYes

Source: About Browser Access, Configuring Defined Application Segments (FQDN-only + TLS 1.2), Understanding Privileged Remote Access.

Same domain or split domain

This single decision causes more Browser Access rework than everything else combined. The external hostname the user types does not have to equal the internal hostname the connector dials — Zscaler documents that split explicitly — but making them differ has consequences inside the application.

Infographic · two domain models
A · Same FQDN in and out user types app.corp.example connector dials app.corp.example Links, cookies and redirects keep working. One bookmark works for agent and browser users. You must own the public zone for that name. Internal clients must not resolve the public CNAME. Use split DNS: public → ZPA, internal → real server. B · Different external / internal user types hr.access.example connector dials hrportal.intranet.local Publish .local names safely. Hide internal naming. One wildcard zone for every published app. Absolute internal URLs break the page. Login and logout redirects hide this first. Service Edge rewrites the Host header.

Same-domain is invisible to the application. Split-domain is invisible to the attacker. Choose based on how well-behaved the app’s URLs are. Official: different external vs internal domains.

Practical test before you commit to model B: browse the app internally, open developer tools, and look at what it emits. If every asset and form action is a relative path, split-domain will be clean. If login bounces through an absolute https://hrportal.intranet.local/… URL, the user’s browser will chase a name it cannot resolve.

Runbook — Side A identity, Side B ZPA, Side C proof

Work a first contractor app in this order. Do not start with the certificate if the IdP group does not exist yet — you will publish an empty door.

Side A — IdP and entitlement

  1. Create a time-bound group

    Guest user or dedicated partner realm. Put them in one group such as ext-audit-ticketing. Set an expiry in the identity system, not a calendar reminder. Source: your IdP lifecycle process + ZPA access policy uses SAML/SCIM groups.

  2. Enforce MFA and a short session

    With no device posture, identity is the entire control plane. Conditional access at the IdP is the compensating control Browser Access cannot provide.

  3. Confirm SCIM (or SAML attributes) actually arrive in ZPA

    A missing group looks identical to an explicit deny. Check the user object in ZPA before you blame the segment.

Side B — ZPA objects

Primary source for this block: Configuring Defined Application Segments and the June 2025 managed-certificate notes.

admin.private.zscaler.com · Application Segments · Add
Training mock · not live

Resource Management → Application Management → Application Segments → Add

Add Application Segment

ext-ticketing-ba
ticket.access.example
443
Unavailable — Browser Access accepts FQDNs only
Browser Access
Managed
jira.intranet.example

Click next: attach the server group whose connectors can resolve jira.intranet.example. Field names follow Zscaler Help — Adding Application Segment / Browser Access / Managed certificate type. Example values only.

  1. Application segment + Browser Access

    FQDN, port, Browser Access enabled. Enabling Browser Access still keeps Client Connector access on that segment — employees with ZCC can keep using the same app. You cannot paste an IP range here.

  2. Certificate + public DNS

    Managed: ZPA generates, signs, and renews the cert and can publish the CNAME for you. Customer-managed: upload cert + private key + full chain, then publish the CNAME yourself. Prefer managed for anything contractor-facing — expired certs are the classic self-inflicted outage. You can also hide the application name behind a hash so partners never see your authentication domain. Source: Zscaler managed certificates and unified portal.

  3. Server group + connector group

    Connectors must resolve the internal FQDN and have a route to it. Production habit: at least two connectors per group, close to the app. Green on the connector means it reached Zscaler, not the app.

  4. Access policy — identity only

    One rule, one app, one contractor group. Do not share the employee posture rule. If the portal will not save a device-posture criterion, that is expected — there is no agent to report it.

admin.private.zscaler.com · Access Policy · Add Rule
Training mock · not live

Policy → Access Policy → Add Rule

Allow · ext-audit-ticketing

ext-ticketing-ba
ext-audit-ticketing
Web Browser
Not available on clientless / Web Browser sessions
Allow

Click next: place this rule above any broader deny. Then prove it from an off-network browser. Default policy is deny — a missing group looks like a block.

Side C — prove it before you mail the URL

  1. Resolve from off-network

    From a phone hotspot, confirm the published name is a CNAME to the Zscaler target — not to your own edge. Do not test this only from the corporate LAN (split-DNS will lie to you).

  2. Certificate matches the published host

    Browser padlock, no name mismatch, full chain. If you used managed certificates, renewal is Zscaler’s problem.

  3. SAML + allow in diagnostics

    Log in as the contractor. Open Clientless Access diagnostics, filter to that user, and read the request detail before you change configuration. Source: Browser Access / Clientless Access Diagnostics.

  4. Page completeness

    If CSS, images, or the login redirect 404, you have a split-domain / absolute-URL problem — not a ZPA “down” problem. Confirm in developer tools first.

Off-network checks (example names only)
dig +short ticket.access.example CNAME
curl -sI https://ticket.access.example | head
# Expect: CNAME to the Zscaler-supplied target, then HTTP 302 toward your IdP.
# Do not copy a CNAME target from a blog — take it from your tenant.

Twelve production tickets

These are the situations that actually arrive. The build is the easy half. The gotcha is why the ticket comes back.

BA-01Third-party contractor on an unmanaged laptop
Situation
Vendor needs ticketing for three months. You have no legal basis to install an agent.
Build
Browser Access + guest identities in one SCIM group + one allow rule for that segment.
Gotcha
Entitlement outlives the engagement. Expire the group in the IdP.
BA-02Employee on a personal phone or tablet
Situation
Leave portal and payslips from personal devices. MDM on personal phones is a fight.
Build
Browser Access for those two low-sensitivity apps only, MFA at the IdP. Everything else stays agent-only.
Gotcha
Data leaves the app onto an unmanaged device the moment it renders. Pair with isolation or DLP, or do not publish that app clientlessly.
BA-03Straight-through publish — same FQDN
Situation
Internal web app already answers on a name you own publicly.
Build
One segment, Browser Access, cert matching that name, public CNAME to ZPA, internal DNS still to the real server.
Gotcha
If an internal client resolves the public CNAME, traffic hairpins out to Zscaler and someone calls it a latency problem.
BA-04Publishing a .local or non-routable name
Situation
App answers on appsrv01.intranet.local.
Build
Split-domain: external app.access.example, internal the .local name. Connector resolves internally.
Gotcha
Test login and logout redirects specifically. That is where absolute internal URLs hide.
BA-05Twenty apps, one certificate
Situation
A pattern for publishing internal tools to partners.
Build
Reserve *.access.example, one wildcard Browser Access cert, one segment per app, one rule per app.
Gotcha
A wildcard cert is a shared blast radius. Keep it off anything you would not want reachable if that key were mishandled.
BA-06Same app for agent users and browser users
Situation
Employees run Client Connector; contractors do not; both need the finance dashboard.
Build
Enable Browser Access on the existing segment. Write two access rules — the employee rule can carry posture, the contractor rule cannot.
Gotcha
One rule for both audiences means the weakest audience sets the security level.
BA-07A partner front door instead of a list of URLs
Situation
Forty people, four apps. Emailing four links is not onboarding.
Build
User Portal with its own (preferably managed) certificate. After IdP login, each user sees only entitled apps. You can merge Browser Access and PRA into one portal.
Gotcha
The portal is also a disclosure surface. Keep names boring, or use the name-hashing option.
BA-08Day one of an acquisition
Situation
Acquired staff need three of your apps on Monday. Their endpoints and network are not yours.
Build
Federate their IdP, publish three Browser Access apps, entitle by their group. No site-to-site project.
Gotcha
This is a bridge. Put an end date on it the day you build it.
BA-09Shared kiosks and shop-floor terminals
Situation
Frontline staff share machines; installing an agent per profile is impractical.
Build
Browser Access with short authentication timeouts and MFA.
Gotcha
Cached credentials and a walk-away are the threat. Timeout is the control that matters.
BA-10Admin asks for RDP or SSH in the browser
Situation
Third-party DBA needs a jump host without a VPN.
Build
Not Browser Access. That is Privileged Remote Access — HTML5 RDP/SSH/VNC with approvals and session recording.
Gotcha
Both are “clientless in a browser.” Different licences, different portals, different policy model.
BA-11A thick client, file share, or database tool
Situation
Someone asks whether SAP GUI, SMB, or a SQL client can go through Browser Access.
Build
No. Browser Access carries HTTP and HTTPS. Anything else needs Client Connector, or PRA if the protocol is RDP/SSH/VNC.
Gotcha
A web front end for a thick-client app is still a web app and is fine. The test is the protocol on the wire.
BA-12“Add a posture check to the contractor rule”
Situation
Audit wants disk encryption and EDR before the contractor reaches the app.
Build
You cannot on Browser Access. Compensate at identity and data: MFA, time-bound entitlement, short timeouts, isolation or DLP.
Gotcha
The most common design mistake: “harden” a clientless rule with a device condition and lock every legitimate user out — or assume the platform is broken when it will not save.

Fault map, traps, and proof

Ops · prove it
Operations desk with health checks on a monitor after a Browser Access pilot
Pull the clientless transaction before you rebuild the segment. Browser Access issues are almost never where the user says they are.

Browser Access fails quietly. You rarely get a useful error — you get a spinner, a certificate warning, or a redirect loop. Work the chain in order: DNS, certificate, identity, policy, connector, app.

Flow 3 · six-hop fault map
1 · DNS name missing or points at you check the CNAME from off-net 2 · Cert warning, SAN, missing chain SAN = published host, full chain 3 · Identity redirect loop or re-prompt IdP domain vs app segment 4 · Policy auth then deny some users only SCIM group and rule order 5 · Connector green, still unreachable resolve, port, NTP, outbound 6 · The app half page, broken assets absolute URLs or no TLS 1.2

Work left to right. The first broken hop is the answer. Filter Clientless Access diagnostics to that user before you change a single object.

SymptomLikely causeFix
Certificate warning on first visitSAN does not match the published host, or intermediate chain missingReissue with the exact name and upload the full chain — or move to a managed certificate
Public hostname does not resolveCNAME never published, or published in the wrong zoneVerify from an off-network device, not from the corporate LAN
Endless login loopIdP domain overlaps an application segment or discoveryBypass the IdP domain in ZPA; confirm SAML ACS is not hairpinned
Some users in, some out, same URLGroup not synced, or rule ordered below a broader denyCheck SCIM and rule order. Default deny looks like a block.
Connector connected, app unreachableGreen means the connector reached ZscalerFrom the connector: resolve the internal FQDN, test the port, confirm NTP
TLS handshake fails to the backendApplication server does not support TLS 1.2Upgrade the app TLS stack or front it with something that does
Page loads, assets and redirects 404App emits absolute internal URLs under a different external nameSame-domain model, or fix the app’s base URL
Cannot save a posture conditionClientless sessions have no device signalNot a bug. Keep the ZPA rule identity-based; use IdP conditional access
Cannot add an IP or rangeBrowser Access segments accept FQDNs onlyGive the app a name the connector can resolve

Hardening before you call it done

The mistake to remember

Browser Access trades device trust for reach. That trade is fine — if you rebuild the lost assurance at identity and data, instead of assuming ZPA still has your back at the endpoint.

Pilot checklist — green means ship the URL

Interview lines you should be able to say

Why no posture on a Browser Access rule?

Posture is reported by Client Connector. Browser Access is clientless, so the criterion is unavailable by design.

Why no IP range on the segment?

The Service Edge selects the published application by hostname during TLS. FQDN only.

Does this expose the app to the internet?

No. The public name resolves to Zscaler. The connector still dials outbound only. No inbound port opens on your perimeter.

Knowledge check

Six judgment questions. Pick one answer each, then Check. Reasons point you back to the section to re-read.

Q1

Audit wants disk encryption on the contractor Browser Access rule. What do you do first?

Correct: b. Posture is reported by Client Connector. Browser Access has no agent, so the criterion is unavailable by design. Re-read Mental model and BA-12.
Q2

A Browser Access application segment will not accept an IP range. Why?

Correct: a. Official help: when defining applications for Browser Access you can only configure FQDNs. Agent-based segments can still use IPs. Re-read Words you will see and Side B.
Q3

A contractor needs RDP to a jump host with no VPN. Is that Browser Access?

Correct: c. Browser Access is HTTP/HTTPS web apps. PRA is the privileged-console path. Re-read BA vs ZCC vs PRA and BA-10.
Q4

Users authenticate successfully but the page returns broken CSS and the login redirect hangs. First suspicion?

Correct: b. Auth succeeded, so DNS, cert, IdP, and policy already worked. Broken assets after a split-domain publish is hop 6 — the app. Confirm in developer tools. Re-read Domain models and the fault map.
Q5

Which requirement does the application server itself have to meet for Browser Access?

Correct: d. Zscaler Help: Browser Access requires the application server to support TLS 1.2. The browser also needs TLS 1.2 (cipher suite ECDHE-RSA-AES128-GCM-SHA256). Re-read the flow and Side B.
Q6

One contractor reports failure. Everyone else works. Where do you look first?

Correct: a. A single-user fail is usually group membership, rule order, or their IdP session — all visible in the clientless transaction. Re-read Side C and the fault map.

Sources

Related: Browser Access setup (certs & CNAME) · Browser Access vs PRA · ZPA architecture · ZPA access policy · Application segments · ZTNA clientless vs agent

Product behaviour follows Zscaler documentation current at the time of writing. Verify field names in your tenant before you implement — portal labels move. Do not copy CNAME targets from this page; take them from your Admin Portal.