The Lighthouse service account
Lighthouse runs as one Windows account: the Windows service Lighthouse, or the IIS app pool when it runs as a website. Everything the server does on its own happens as that account: it signs in to SQL Server, reads and issues at ADCS, reads Active Directory for Windows sign-in, opens the private keys of its certificates, and connects to Windows servers over WinRM for Windows Installations that have no account of their own (see Windows Installations: a separate install account). This guide is for the administrator who sets that account up: which kind to choose, how to create it, every right it needs, how to give it to the installer, how to check it works, and what the usual errors mean.
Each organization is different, so Lighthouse supports four kinds of account:
| Group managed service account (gMSA) | Domain user account | Built-in account | Local account (no domain) | |
|---|---|---|---|---|
| Choose it when | You have Active Directory. Recommended. | Your policy or tooling does not allow gMSAs, or your team manages service accounts in a password vault | A quick trial, or a single server where you are happy to give rights to the computer | The server is not in a domain |
| Name in the installer | CONTOSO\gmsa-lighthouse$ |
CONTOSO\svc-lighthouse |
NT SERVICE\Lighthouse (service) or IIS APPPOOL\Lighthouse (IIS) |
WEB01\lighthouse or .\lighthouse |
| Password | None to manage: the domain changes it every 30 days by itself | Yours to keep and change; the installer asks for it on every install, upgrade and repair | None | Yours to keep and change, as for a domain user |
| Seen on the network as | Itself | Itself | The server's computer account, CONTOSO\WEB01$ |
Nobody: other computers do not know it |
| SQL Server on another computer | Yes | Yes | Yes, as CONTOSO\WEB01$ |
Only with a SQL login in the connection |
| ADCS, Windows sign-in, WinRM to other servers | Yes | Yes | Yes, as the computer | No |
| Two or more servers | One account for all (allow each server to use it) | One account for all (same password on each) | Rights given again for every server | Not supported |
| Rights given to other programs too | No | No | Yes: anything else on the server that uses the network as the computer gets them | No |
Not supported: LocalSystem, NT AUTHORITY\NetworkService and NT AUTHORITY\LocalService (far more power than Lighthouse needs, or shared with every other service), a person's own account, any member of Domain Admins or Administrators, and cloud-only Entra ID accounts (Windows cannot run a service as one). A standalone managed service account (sMSA, also ending in $) works like a gMSA on a single server.
Every right, in one place
Required rows apply to every server. When used rows apply only when you turn the feature on or use it. The last column says who gives it: "Setup" means the installer does it for you, as the person installing, with no extra step.
Required
| Right | Where | Who gives it | Notes |
|---|---|---|---|
Run the Windows service: Log on as a service (SeServiceLogonRight) |
The Lighthouse server, Local Security Policy, User Rights Assignment | Setup, for a gMSA, a domain user or a local account. Windows, for the built-in account | If a Group Policy sets this right, it replaces the local list at the next refresh: add the account (or a group holding it) to that policy. Not needed when Lighthouse runs in IIS |
| Run the IIS app pool: Log on as a batch job | The Lighthouse server | Windows: IIS adds the app pool account to IIS_IUSRS, which has this right by default |
Only for IIS. If a hardening policy removed IIS_IUSRS from this right, add the account |
Read the settings file %ProgramData%\Lighthouse\lighthouse.json |
The Lighthouse server | Setup | Readable only by SYSTEM, Administrators, the account and the person installing |
Change files in %ProgramData%\Lighthouse\secrets, sign-in-keys and logs; read ssh |
The Lighthouse server | Setup | Setup closes these folders to everyone else. A log folder of your own (logFolder) gains only the account |
Read the private keys of the HTTPS certificate (HTTPS_CERT), the key-encryption certificate (KEY_ENCRYPTION_CERT, made by setup), the group certificate (GROUP_CERT) and the CA client certificates (CLIENT_CERTS) |
LocalMachine\My on the Lighthouse server |
Setup | A certificate replaced later needs it again: run the MSI with the new thumbprint, or certlm.msc, the certificate, All Tasks, Manage Private Keys, add the account with Read |
db_datareader and db_datawriter on the Lighthouse database, with UPDATE and DELETE denied on dbo.AuditEvents |
SQL Server | Setup, when the person installing has securityadmin. Otherwise a DBA, with the script in For a DBA |
The account never needs db_owner or schema rights: setup changes the schema as the person installing |
| Reach SQL Server: TCP 1433 (and UDP 1434 for a named instance) | Network | Your network team |
When used
| Feature | Right | Where | Notes |
|---|---|---|---|
| ADCS: read (Settings, CAs, Microsoft ADCS, and the ADCS sync job) | Read | The CA: certsrv.msc, the CA's Properties, Security | Domain account or computer account only |
| ADCS: issue (an ADCS enrollment template, Installations renewing through ADCS, CA migration to ADCS) | Request Certificates on the CA, and Enroll on each certificate template Lighthouse uses | The CA's Security tab; certtmpl.msc, the template's Properties, Security | The template must be published on the CA. For web servers, set the template's Subject Name to Supply in the request |
| ADCS: revoke | Issue and Manage Certificates | The CA's Security tab | Only if Lighthouse should revoke at that CA |
| Make ADCS templates (New template on an ADCS CA) | Nothing for Lighthouse's own account: reading templates is allowed to every domain account. Writing uses a separate template account (a domain user with a password), delegated create and delete of template and OID objects and write of the CA's published list | Active Directory, Configuration partition, by an Enterprise Admin | Never give these to the gMSA. Every right, step by step, in adcs-templates.md, Every permission, in full. Without a template account Lighthouse prepares a script instead |
| Windows sign-in (people sign in with their Windows account) | Read users and their group membership (tokenGroups) |
Active Directory | Any domain account can by default. In a hardened domain, add the account (or, for the built-in account, the computer) to Windows Authorization Access Group |
| Windows sign-in with Kerberos | The SPN HTTP/<name people type> on the account |
Active Directory: setspn -S |
gMSA and domain user: on that account. Built-in: on the computer account (Windows registers the computer's own name already). In IIS with a gMSA or domain user, also set useAppPoolCredentials. Without it, browsers fall back to NTLM, which works |
| Windows Installations over WinRM (IIS sites, other Windows uses and Files on Windows), only those with no Sign in as account | Member of Administrators on each of those servers, and WinRM reachable (TCP 5985, or 5986 with HTTPS) | Each of those servers | Lighthouse connects with Kerberos as its account, so give the server's name as its full DNS name. A local account cannot do this. For the Lighthouse server itself, the account must be a local administrator there too. We recommend a separate install account instead (below): then Lighthouse's own account needs no rights on your Windows servers at all |
| EJBCA (sync, enrollment, revoke) | A client certificate whose EJBCA role allows what Lighthouse does there | EJBCA; the certificate in LocalMachine\My |
Name its thumbprint in CLIENT_CERTS so setup gives the account read on its key. The Windows account itself needs nothing in EJBCA |
| Linux and Unix files over SSH | Read on %ProgramData%\Lighthouse\ssh\id_ed25519 and known_hosts |
The Lighthouse server | Setup gives it on the folder. The rights on each Linux server belong to the SSH account there, not to the Windows account |
| Network appliances (F5, Palo Alto, Citrix ADC) | An account on the appliance | The appliance | Its password goes in the secret store (lh secret set appliance-password); the Windows account needs nothing more |
| Cloud vaults (Azure Key Vault, AWS ACM, Google Certificate Manager) | The cloud role in Cloud vaults | The cloud | Signs in with a stored credential or as the server (managed identity, instance role, VM service account), never as the Windows account |
| DigiCert, Sectigo, GoDaddy, ACME CAs, HashiCorp Vault PKI | API keys, tokens or an AppRole | At the CA | Kept in the secret store; nothing for the Windows account |
| Macs from Jamf Pro | A Jamf API client with Read Computers | Jamf Pro | Its secret in the secret store |
| Moving in from Keyfactor Command | A Keyfactor account, typed in for that move and never kept | Keyfactor Command | |
| Network scans | Nothing in Windows | Network | The server must reach the ranges and ports scanned |
| Email (alerts, requests, approvals) | An SMTP account, or a relay that accepts the server | Your mail server | An SMTP password goes in the secret store. A relay restricted by address needs the server's IP |
| Teams, Slack, Jira, ServiceNow, webhooks, log forwarding, Explain with AI | Outbound HTTPS to the service | Network | Their URLs, tokens and keys are in the secret store |
| Two or more servers | gMSA: every server in PrincipalsAllowedToRetrieveManagedPassword. Domain user: the same password on every server. Built-in: SQL login and CA rights for each server's computer account |
Active Directory, SQL Server, the CA | See Two or more servers |
| Outposts | The Outpost's own account on its computer: NT SERVICE\LighthouseOutpost or a gMSA (SERVICEACCOUNT=EXAMPLE\gmsa-outpost$); a domain user account is not offered for Outposts yet |
The Outpost's computer and the servers it installs on | For WinRM from the Outpost as its own account, it needs Administrators on those servers. With a Sign in as account on the Installation it needs none: the install account's password is an Outpost secret |
Windows Installations: a separate install account
Keyfactor and Venafi let their IIS and Windows automation sign in as any account that is an administrator on the target, kept apart from the product's own service account, with its password stored encrypted. Lighthouse does the same, and we recommend it over giving the service account administrator rights on your servers.
Why a separate account. Lighthouse's service account already reads and writes the database, issues at the CA and opens its own keys. If it were also an administrator on every IIS, SQL and Exchange server, anyone who got hold of it (or of the Lighthouse server) would hold all of that at once. With a separate install account per group of servers, the service account keeps only what Lighthouse itself needs, and one leaked install password reaches one group of servers and nothing else. Each account can also be turned off, audited and rotated on its own.
How it is set. On an IIS site, another Windows use or Files on Windows Installation, under Sign in as, give the Account and the Password secret name. Leave both empty and Lighthouse signs in as its service account (or the Outpost's), as before. Through the API they are signInAs and signInPasswordSecret in the job's parameters. Only administrators make and change Windows Installations; the Keeper's Log records each change with the account's name.
Step by step
- Make the account, one per group of servers (web servers, SQL servers, Exchange). A domain user is best:
New-ADUser -Name lh-install-web -SamAccountName lh-install-web -AccountPassword (Read-Host -AsSecureString "Password") ` -Enabled $true -PasswordNeverExpires $false -AccountNotDelegated $true -Description "Lighthouse installs on web servers"-AccountNotDelegatedis Account is sensitive and cannot be delegated: its sign-in can never be passed on to another server. Deny it interactive sign-in through Group Policy (Deny log on locally, Deny log on through Remote Desktop Services). It may go in Protected Users when it is a domain account, since Lighthouse signs it in with Kerberos only. Or a local account on each server, with the same name and password on each server in the group, written.\namein Lighthouse. - Make it an administrator on those servers only, never in Domain Admins. With a group, so new servers are one step: a domain group
Lighthouse Install Webholding the account, added to the local Administrators group of each web server by Group Policy (Restricted Groups, or Local Users and Groups), or by hand:Add-LocalGroupMember -Group Administrators -Member "CONTOSO\lh-install-web". - Let WinRM in, as for any Windows Installation (
Enable-PSRemotingon Windows Server, TCP 5985 or 5986 from the computer that does the work). For a local account that is not the built-in Administrator, also setLocalAccountTokenFilterPolicy:New-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name LocalAccountTokenFilterPolicy -Value 1 -PropertyType DWord -Force. - Store the password, on the computer that does the work:
- The Lighthouse server: as an administrator there,
lh secret set windows-web-servers(it asks without echo). The secret is encrypted with DPAPI for that computer under%ProgramData%\Lighthouse\secrets, or, on a group of servers, sealed to the group certificate in the database, so every server can use it. - An Outpost: in the console, Settings, Outposts, the Outpost, Secrets, where it is sealed in the browser to that Outpost's key, or on the Outpost's computer
lh-outpost secret set windows-web-servers. It never comes to Lighthouse.
- The Lighthouse server: as an administrator there,
- Name it on each Installation under Sign in as:
CONTOSO\lh-install-webandwindows-web-servers. - Try it with a Replace-All Drill dry run: the Windows check signs in as the account, says so, and changes nothing.
- Take the service account's rights away on those servers once every Installation there has its own account: remove it (or
CONTOSO\WEB01$for the built-in account) from their Administrators group.
How Lighthouse uses it
- Only the account's name and the secret's name are kept with the Installation. The password is read from the secret store for the run and never written to the database, a log, the Keeper's Log or an error.
- It reaches PowerShell in the environment of the one PowerShell process that runs the step, which takes it out at once: never on a command line (which a process list shows) and never in the script's text (which PowerShell's script block logging, event 4104, records).
- It always signs in over WinRM, even to the server Lighthouse runs on. A domain account (
DOMAIN\nameorname@domain) uses Kerberos only, so its password is never offered to a computer outside the domain: give the server by its full DNS name, not an address. A local account (.\name, orSERVER\namewith the server's own name) uses Negotiate: the server must be in WinRM's TrustedHosts on the computer that does the work, or have a WinRM https listener. - CredSSP is never used, so there is no second hop: the account can do what it may on that server and nothing beyond it.
- A shell that cannot sign in as the account refuses the step. Lighthouse never falls back to its own account for an Installation that names one, and an Outpost older than this version refuses the work rather than run it as its own account.
Changing the password
Change it in Active Directory (or on each server for a local account), then set the secret again with the same name: lh secret set windows-web-servers, or the Outpost's Secrets. Every Installation that names it uses the new password on its next run.
Option 1: a group managed service account (recommended)
A gMSA is a domain account whose password Active Directory makes and changes by itself. Only the computers you name can fetch it, nobody can sign in with it interactively, and there is nothing to expire, lock out or forget.
What you need first: a domain controller on Windows Server 2012 or later, and the Active Directory module for PowerShell on the Lighthouse server (Install-WindowsFeature RSAT-AD-PowerShell).
- Once per forest, the KDS root key. If your domain has never had a gMSA, a domain admin runs this on a domain controller, then waits 10 hours so every domain controller has it:
Get-KdsRootKey # nothing listed: no key yet Add-KdsRootKey -EffectiveImmediately - A group for the servers that may use it (easier to add a second server later):
New-ADGroup -Name "Lighthouse Servers" -GroupScope Global -GroupCategory Security Add-ADGroupMember "Lighthouse Servers" -Members "WEB01$" - The account:
New-ADServiceAccount -Name gmsa-lighthouse -DNSHostName gmsa-lighthouse.contoso.com ` -PrincipalsAllowedToRetrieveManagedPassword "Lighthouse Servers" ` -KerberosEncryptionType AES128,AES256 -Description "iRonShore Lighthouse" - On the Lighthouse server, restart it (so its new group membership counts), then:
Install-ADServiceAccount gmsa-lighthouse Test-ADServiceAccount gmsa-lighthouse # True - CA rights (only for the ADCS features you use): in certsrv.msc, right-click the CA, Properties, Security, Add. In the picker, choose Object Types and tick Service Accounts (gMSAs are hidden otherwise), enter
gmsa-lighthouse, and tick Read, and Request Certificates to issue, and Issue and Manage Certificates to revoke. In certtmpl.msc, each template's Properties, Security: add it the same way with Read and Enroll. - Kerberos for Windows sign-in (optional; NTLM works without it):
In IIS, also:setspn -S HTTP/lighthouse.contoso.com CONTOSO\gmsa-lighthouse$%windir%\system32\inetsrv\appcmd.exe set config "Lighthouse" -section:system.webServer/security/authentication/windowsAuthentication /useAppPoolCredentials:true /commit:apphost. Check it after each upgrade. - Install. On the setup screens, How Lighthouse runs: choose Domain service account with no password to manage (gMSA) and type
CONTOSO\gmsa-lighthouse$. Setup checks that this computer may use it. Silently:SERVICEACCOUNT=CONTOSO\gmsa-lighthouse$.
Option 2: a domain user account
A normal Active Directory user, used only by Lighthouse. It works everywhere a gMSA does. The difference is the password: you keep it, you change it, and Windows needs it on every install, upgrade and repair, because the service or app pool is set up again each time. Lighthouse never saves the password: Windows keeps it for the service (as it does for every service), and IIS keeps it encrypted in its own configuration for the app pool.
- Make the account. A long random password (25 characters or more) from your password vault:
If your policy does not allow Password never expires, plan the change in Changing the password before the password expires: the service keeps running, but will not start again with an expired password.New-ADUser -Name "svc-lighthouse" -SamAccountName svc-lighthouse ` -UserPrincipalName [email protected] -Description "iRonShore Lighthouse service" ` -AccountPassword (Read-Host -AsSecureString "Password") -Enabled $true ` -PasswordNeverExpires $true -CannotChangePassword $true Set-ADAccountControl svc-lighthouse -AccountNotDelegated $true - Keep it a service account. Do not add it to Administrators or Domain Admins (except Administrators on Windows servers it installs on as itself, below; better, give those Installations a separate install account). Deny it interactive sign-in through Group Policy (Deny log on locally, Deny log on through Remote Desktop Services). Do not put it in Protected Users: that group stops the NTLM and the cached sign-ins a service needs.
- Log on as a service. Setup gives it on the Lighthouse server. If a Group Policy sets Log on as a service on your servers, add the account to that policy, or setup's change is undone at the next policy refresh and the service will not start after a restart.
- CA rights, as for a gMSA in step 5 above, but the picker finds the user without changing Object Types.
- Kerberos for Windows sign-in (optional):
setspn -S HTTP/lighthouse.contoso.com CONTOSO\svc-lighthouse, anduseAppPoolCredentialsin IIS as above. - Install. On the setup screens, How Lighthouse runs: choose Domain user account with a password, type
CONTOSO\svc-lighthouseand its password. Setup signs in as the account to check the password, and stops with the reason if it is wrong, expired, disabled or locked out. Silently:msiexec /i Lighthouse-0.37.0-x64.msi /qn /l*v lighthouse-install.log ^ SERVICEACCOUNT=CONTOSO\svc-lighthouse SERVICEPASSWORD="<password>" ...SERVICEPASSWORDstays out of the MSI log and out of answer files, and is never written to the settings file. A command line is kept in your shell history, so prefer the screens, or a deployment tool's secret variable. - Upgrades and repairs. A double-click upgrade or a repair shows one screen, Service account password, and checks it before anything changes. A silent upgrade needs
SERVICEPASSWORDagain: without it, setup stops with that reason and rolls back, leaving the old version running.
Changing the password
- Change it in Active Directory.
- On every Lighthouse server, straight away (the old password, tried again and again, can lock the account out):
- Windows service: services.msc, iRonShore Lighthouse, Log On, type the new password twice, OK, then restart the service.
- IIS: IIS Manager, Application Pools, Lighthouse, Advanced Settings, Identity, the ... button, Set, type the new password, OK, then Recycle.
- Or run the same MSI again with
SERVICEPASSWORD="<new password>", which checks it and sets it either way.
- Check Settings, Application, Servers: every server shows up again.
Option 3: the built-in account
NT SERVICE\Lighthouse (for the Windows service) and IIS APPPOOL\Lighthouse (for the app pool) are made by Windows for Lighthouse alone and have no password. On this server they are their own account. Towards any other computer they are the server's computer account, CONTOSO\WEB01$, so every right Lighthouse needs elsewhere goes to the computer:
- SQL Server on another computer: the login is
CONTOSO\WEB01$. Setup makes it for you when the database is elsewhere. With SQL Server on the same computer, the login is the built-in account itself. - ADCS: in the CA's and the templates' Security tabs, choose Object Types, tick Computers, and add
WEB01. - WinRM: add
CONTOSO\WEB01$to Administrators on each web server. - Kerberos: Windows already has
HTTP/WEB01.contoso.comon the computer. For another name,setspn -S HTTP/lighthouse.contoso.com WEB01.
Choose it for a trial, or for one server whose computer account nobody else uses for anything sensitive. Anything else on the server that uses the network as the computer (other services running as the built-in, Network Service or a virtual account) gets the same CA and SQL rights. With two or more servers, each computer account needs its own rights. To install: the default on the setup screens, or leave out SERVICEACCOUNT.
Option 4: a server that is not in a domain
Without Active Directory, there is no ADCS, no Windows sign-in for domain users and no WinRM with Kerberos. Use an OpenID Connect provider for sign-in (see Sign-in providers), EJBCA, Vault or a public CA for issuing, and SSH, appliances or cloud vaults for installs. Two ways to run it:
- The built-in account, with SQL Server on the same computer (SQL Server Express is enough for a small inventory). Nothing to set up.
- A local account, when SQL Server is on another computer through a SQL login, or when your policy asks for a named account:
Do not add it to Administrators. On the setup screens choose Domain user account with a password and typeNew-LocalUser -Name lighthouse -Description "iRonShore Lighthouse service" ` -Password (Read-Host -AsSecureString "Password") -PasswordNeverExpires -AccountNeverExpires.\lighthouse(setup writes it asWEB01\lighthouse). Silently:SERVICEACCOUNT=WEB01\lighthouse SERVICEPASSWORD="<password>". With SQL Server on another computer, give a SQL login in the connection:CONNECTION="Server=sql01;Database=Lighthouse;User ID=lighthouse;Password=<password>;Encrypt=true". Setup then grants nothing in SQL Server (the DBA gives that logindb_datareaderanddb_datawriter), and the connection is kept in the settings file, which only SYSTEM, Administrators and the account can read. Setup refuses a local account with Windows sign-in to SQL Server on another computer, since that computer cannot know the account.
Changing to another account later
- Give the new account its rights first (CA, WinRM, SPN; setup makes its SQL login).
- Run the installed version's MSI again with the new account:
Addmsiexec /i Lighthouse-0.37.0-x64.msi REINSTALL=ALL REINSTALLMODE=vomus SERVICEACCOUNT=CONTOSO\gmsa-lighthouse$SERVICEPASSWORD="<password>"for a domain user or local account. Setup gives the new account the settings file, folders and keys. - Check the server, then take the old account's rights away.
Checking that it works
%ProgramData%\Lighthouse\setup.loglists every step setup took, with the account.- The service:
Get-CimInstance Win32_Service -Filter "Name='Lighthouse'" | Select-Object StartName, State. - The app pool:
%windir%\system32\inetsrv\appcmd.exe list apppool Lighthouse /text:processModel.userName. - A gMSA:
Test-ADServiceAccount gmsa-lighthouseon each server says True. - SQL Server: the console opens and Settings, Application, Servers lists the server as up.
- ADCS: Settings, CAs, the CA, Test connection; then enroll a test certificate from an ADCS template.
- Windows sign-in with Kerberos: on a PC, sign in to Lighthouse, then
klistshows a ticket forHTTP/lighthouse.contoso.com.
Common errors and what to do
| What you see | Why | Fix |
|---|---|---|
| Setup stops: "... is a user account with a password, and Windows needs that password on every install, upgrade and repair" | A domain user or local account, and no password was given (usually a silent upgrade) | Run it again with SERVICEPASSWORD, or double-click the MSI and type it |
| Setup stops: "The password for ... is wrong, or there is no such account" | Wrong password, or a typing slip in the name | Check both; the account is not changed |
| Setup stops: "... is not allowed to log on as a service on this computer" | A Group Policy sets Log on as a service, or Deny log on as a service lists the account | Add the account to the policy that sets it, run gpupdate /force, run setup again |
| Setup stops: "... has expired", "... is locked out", "... is disabled", "... must change its password at next logon", "... may only sign in to some computers" | The account's state in Active Directory | Fix it in Active Directory Users and Computers, then run setup again |
| The setup screen says "This computer cannot use ...$" | The server is not in PrincipalsAllowedToRetrieveManagedPassword, or has not restarted since it was added |
Add it (or its group), restart the server, run Install-ADServiceAccount |
| Service does not start: error 1069, "The service did not start due to a logon failure" | The password changed in Active Directory but not on the service, or Log on as a service was taken away | Changing the password; check the policy |
| Site answers 503; event 5021 or 5057 from WAS: "The identity of application pool Lighthouse is invalid" | The app pool's password is wrong or expired | Set the app pool's password (Changing the password) |
| The account locks out again and again | Something still uses the old password: another Lighthouse server, a scheduled task, a test machine | Find it with the domain controller's event 4740 (it names the caller computer) |
| The server log says "Login failed for user 'CONTOSO\WEB01$'" | Built-in account with SQL Server elsewhere, and no login for the computer | Run the MSI again as someone with securityadmin, or use the DBA script with CONTOSO\WEB01$ |
| "Login failed for user 'CONTOSO\svc-lighthouse'" (or the gMSA) | The login or database user is missing | The DBA script below |
| ADCS: 0x80094012, "The permissions on the certificate template do not allow the current user to enroll" | No Enroll on the template | certtmpl.msc, the template, Security, Enroll for the account |
| ADCS: 0x80094800, "The requested certificate template is not supported by this CA" | The template is not published on the CA | certsrv.msc, Certificate Templates, New, Certificate Template to Issue |
| ADCS: 0x80070005, "Access is denied", when issuing or revoking | No Request Certificates (issue) or Issue and Manage Certificates (revoke) on the CA | The CA's Properties, Security |
| EJBCA: HTTP 403 at the first enrollment | The client certificate's EJBCA role can read but not enroll | See Giving Lighthouse's certificate the rights to enroll |
| "Keyset does not exist" or the HTTPS binding fails after a certificate was replaced | The account cannot open the new certificate's key | Run the MSI again with the new thumbprint, or Manage Private Keys in certlm.msc |
| People get a sign-in box again and again with Kerberos | Duplicate SPN, or IIS decrypts with the wrong account | setspn -X lists duplicates; keep HTTP/<name> on one account only; set useAppPoolCredentials for a gMSA or domain user in IIS |
| WinRM: "Access is denied" during an IIS renewal | The account that signs in is not an administrator on that server | Add the Installation's Sign in as account (or, with none, Lighthouse's account, or CONTOSO\WEB01$ for the built-in) to Administrators there. For a local account, also LocalAccountTokenFilterPolicy |
| "The secret 'windows-web-servers' with the password of ... is not set on this server" (or "on this Outpost computer") | The install account's password is not stored where the work runs | lh secret set windows-web-servers on the server, or the Outpost's Secrets |
| WinRM: "The user name or password is incorrect" with a Sign in as account | The stored password is old, or the account is locked out or disabled | Set the secret again; check the account in Active Directory |
| WinRM with a local account: "... TrustedHosts ..." | Negotiate with a local account needs the server trusted | Add it to TrustedHosts on the computer that does the work, or give the server a WinRM https listener |
| WinRM: "The WinRM client cannot process the request ... Kerberos" | The web server was given by IP address or short name | Use its full DNS name in the Installation |
For a DBA
When the person installing may not add logins, a DBA runs this once (change the account and database names), then the install can go on. For the built-in account with SQL Server elsewhere, the login is the computer, such as CONTOSO\WEB01$.
CREATE LOGIN [CONTOSO\gmsa-lighthouse$] FROM WINDOWS;
GO
USE [Lighthouse];
CREATE USER [CONTOSO\gmsa-lighthouse$] FOR LOGIN [CONTOSO\gmsa-lighthouse$];
ALTER ROLE db_datareader ADD MEMBER [CONTOSO\gmsa-lighthouse$];
ALTER ROLE db_datawriter ADD MEMBER [CONTOSO\gmsa-lighthouse$];
-- Once the database has its tables (after the first install), as setup does:
DENY UPDATE, DELETE ON OBJECT::dbo.AuditEvents TO [CONTOSO\gmsa-lighthouse$];
The person installing still needs dbcreator (or db_owner on an empty database the DBA made) to create and upgrade the schema, or installs with MIGRATE_DB=0 and the DBA runs lh db migrate.