Symptom, cause, fix · As of September 2026 (Server 1.0.31, Agent 1.0.36)

Known Issues

Each section describes one issue the way an administrator sees it, names the cause, and the fix. The issues are unrelated to each other; read only the section whose symptom you are seeing.


1. The browser asks for a password, or access is denied despite having permission

Usually there is nothing to do here. Kerberos signs domain users in automatically through the server's computer account; the SPN for the server's own name already exists. Something needs setting up only if the portal must also be reachable under a different name, for example behind a Network Load Balancer (NLB) with one shared address for several nodes. We advise against that: ZeroPortal needs no load balancer for high availability, the agent switches to the next reachable node on its own (see Setting up high availability). An SPN on a shared alias is exactly the source of error this section describes — for the same reason, many vendors avoid NLB in front of Kerberos-secured services.

1.1 Symptom

1.2 Cause

The portal signs domain users in silently through Windows authentication (Negotiate: Kerberos or NTLM). Browsers only send the Windows account to sites in the Local Intranet zone; if that zone entry is missing, the login window appears (401). "No access" (403), on the other hand, is a permissions question: the group is not assigned to a portal group, or the ticket predates the group change. NTLM instead of Kerberos happens with an alias name that has no SPN, or when accessing by IP address; the permissions in the portal are the same either way.

1.3 Fix

  1. Add the portal URL to the intranet zone, by group policy for every user: User Configuration → Administrative Templates → Windows Components → Internet Explorer → Internet Control Panel → Security Page → Site to Zone Assignment List, portal URL (e.g. https://zeroportal.firma.local or *.firma.local) with value 1; the same setting also exists under Computer Configuration. To test on a single machine: Internet Options → Security → Local Intranet → Sites → Advanced.

Local Intranet zone

Portal domain as an intranet site

  1. For Edge and Chrome, alternatively: the browser policy AuthServerAllowlist with the portal name (several separated by commas). Firefox: network.negotiate-auth.trusted-uris.

  2. SPN only for an alias. The SPN already exists for the server's own name. If the portal is reached under a DNS alias (e.g. zeroportal.firma.local pointing at ZPSRV01), register it on the server's computer account:

powershell setspn -Q HTTP/zeroportal.firma.local # is the name already taken? setspn -S HTTP/zeroportal.firma.local ZPSRV01$ setspn -L ZPSRV01$ # check

An SPN may only sit on one account; no portal restart is needed; there is no SPN for an IP address. Load balancer in front of several nodes: NTLM, or a shared gMSA.

  1. On "no access": check permissions in the portal (see Users, permissions, licences and logs); sign out and back in on the Windows client after a group change.

1.4 Check

Open the portal from a client: no login window should appear, and the header shows account and method (Username: DOMAIN\user Auth: Kerberos).

Portal header with account and sign-in method

On the client, klist shows the ticket HTTP/zeroportal.firma.local, whoami /groups the groups in the token. In the portal log C:\ProgramData\NickIT\ZPServer\Logs\ZeroPortalLogs.log, every rejected action is logged as a warning Access denied (403): user '…' tried …; a login window (401) is not logged. A browser on the portal server itself usually shows NTLM; that is not an error.

Symptom Cause Fix
Login window, everything works after entering credentials Portal URL not in the Local Intranet zone Roll out the zone entry by GPO (step 1), restart the browser
Login window, credentials are not accepted NTLM blocked and Kerberos not possible (alias without SPN, access by IP) Access by the server name, or register an SPN (step 3)
"No access" despite the right AD group, header shows the account Group not assigned to a portal group, or ticket predates the group change Check permissions, sign out and back in on the client, check the log for Access denied (403)
"No access" only in a browser on the server itself With User Account Control on, privileged groups such as Domain Admins don't count in a non-elevated browser Bind portal administrators to a regular AD group, launch the browser "as administrator", or administer from another machine; an SPN does not help
Header shows NTLM although Kerberos is expected Alias without SPN, access by IP, a duplicate SPN, or the client's clock is more than five minutes off Check setspn -Q HTTP/<name> and setspn -X (duplicates), check time sync, access by the server name

2. Installing an MSIX package takes minutes on devices without internet

Some devices have no internet access for good reason: manufacturing networks, point-of-sale systems, classified or otherwise isolated networks, or a proxy that only lets signed-in users through and shuts out the system account. But Windows checks a package's signature online by default — without a connection, every check runs into a timeout before the install continues. This section shortens the wait without turning the check off.

2.1 Symptom

Deployment times in the tray menu

2.2 Cause

Before installing, Windows checks the signature of every package and, to do so, wants to fetch the intermediate certificate from the internet (if it is missing locally) and check the revocation list (CRL) or an OCSP response. Without internet, every lookup runs into a timeout: 15 seconds per address by default, and up to 20 seconds per check; a package is checked more than once, so this adds up to minutes. Deployment runs under the system account; a proxy set up only for signed-in users does not help it (netsh winhttp show proxy).

2.3 Fix

Every step needs administrator rights; none of them turns off signature checking. Steps 1 and 2 are safe on any device, step 3 only for devices without internet.

  1. Add the intermediate certificate to the computer store. On a machine with internet: right-click the package → Properties → Digital Signatures → Details → View Certificate → Certification Path, select the certificate between issuer and root, View Certificate → Details → Copy to File (DER, .cer). On the device, import it into the local computer's Intermediate Certification Authorities store:

powershell Import-Certificate -FilePath .\Intermediate-CA.cer -CertStoreLocation Cert:\LocalMachine\CA

Import into the computer store

Centrally: Computer Configuration → Policies → Windows Settings → Security Settings → Public Key Policies → Intermediate Certification Authorities. Trust is still decided by the root authority.

  1. Limit the wait for certificate lookups. Revocation checking stays on, but without internet it now fails after seconds instead of a quarter minute per address:

powershell $key = 'HKLM:\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CertDllCreateCertificateChainEngine\Config' New-Item -Path $key -Force | Out-Null New-ItemProperty -Path $key -Name ChainUrlRetrievalTimeoutMilliseconds -Value 3000 -PropertyType DWord -Force | Out-Null New-ItemProperty -Path $key -Name ChainRevAccumulativeUrlRetrievalTimeoutMilliseconds -Value 6000 -PropertyType DWord -Force | Out-Null

Centrally: the same values as a registry item (Computer Configuration → Preferences → Windows Settings → Registry) or the policy Public Key Policies → Certificate Path Validation Settings, Network Retrieval tab, both timeouts in seconds.

Consequence: signature checking itself is not turned off, it just gives up sooner when an address does not answer. On devices with an occasionally slow or unstable network, this can make the revocation check end more often in "could not be determined" instead of "valid" — Windows still allows the install in that case, but the revocation list was not checked in full. Do not set these values on devices with reliable internet.

  1. Turn off the Defender cloud query (devices without internet only). Real-time protection stays on:

powershell Set-MpPreference -MAPSReporting Disabled -SubmitSamplesConsent NeverSend -DisableBlockAtFirstSeen $true

Centrally: Computer Configuration → Administrative Templates → Windows Components → Microsoft Defender Antivirus → MAPS. Leave out on devices with occasional internet.

  1. Restart the deployment service. The certificate takes effect right away, but the timeout values only reliably apply after restarting the AppXSvc service or the device:

powershell Restart-Service AppXSvc -Force

The restart aborts any deployment in progress; do not run it during a sync. When rolled out by group policy, the device's next restart is enough.

  1. Make the revocation-list addresses reachable (recommended). If devices can reach the CRL and OCSP addresses (a proxy or firewall exception, an internal mirror), the check is fast and complete. The addresses appear in warning 3410 and in the output of certutil -verify -urlfetch (section 2.4).

Only as a last resort: the options Check for server certificate revocation and Check for publisher's certificate revocation (Internet Options, Advanced) apply only to the user account, are not reliable for the system account, and a revoked certificate is no longer detected. To undo: delete the registry values.

2.4 Check

Measure before and after (clear the cache first, so the measurement is honest):

certutil -urlcache * delete
Measure-Command { Get-AuthenticodeSignature 'C:\Path\App.msix' }

Under a second: fine. Two-digit seconds or more: the device is affected.

Check the chain and each address (shows, per address, whether the lookup succeeded):

$sig = Get-AuthenticodeSignature 'C:\Path\App.msix'
[IO.File]::WriteAllBytes("$env:TEMP\signer.cer", $sig.SignerCertificate.Export('Cert'))
certutil -verify -urlfetch "$env:TEMP\signer.cer"

Agent log: C:\ProgramData\NickIT\ZeroPortalAgent\Logs\agent-<date>.log, the line with [3410]. "Certificate chain INCOMPLETE … '' is not in the local store": the intermediate certificate is missing (step 1). "Certificate chain is complete locally … revocation checking (CRL/OCSP) … Endpoints: …": revocation-list lookups (steps 2 and 5).

Symptom Cause Fix
Still slow after step 1 The wait comes from the revocation-list lookups Step 2 (timeouts) and step 5 (open up the addresses)
No change after step 2 Service not restarted, values under the wrong key, or another intermediate certificate is missing Restart AppXSvc, compare the key path with the appendix, check log 3410 for the named issuer
No warning 3410, yet it's slow Deployment under the threshold, package fetched over HTTP, or diagnosis not possible Measure by hand (above); lower the threshold with Set-ZPAgentConfiguration -SlowDeployWarnSeconds
Fast on the admin PC, slow on the devices The admin PC has internet or a proxy the devices' system account does not have Check netsh winhttp show proxy on a device; apply steps 1 to 5 there
Error 0x800B0109 instead of a wait Signature certificate not trusted on the device Distribute the root certificate, see Distributing MSIX packages

Appendix: registry (local computer)

Key Value Type Recommendation Windows default Meaning
HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CertDllCreateCertificateChainEngine\Config ChainUrlRetrievalTimeoutMilliseconds DWORD 3000 15000 Timeout per lookup address
same key ChainRevAccumulativeUrlRetrievalTimeoutMilliseconds DWORD 6000 20000 Total wait for all revocation-list lookups in one check

Registry (per user account, not recommended)

Key Value Meaning
HKCU\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing State = 0x23C00 Default: publisher revocation check on
same key State = 0x23E00 Check for publisher's certificate revocation unchecked