Skip to content

EAP-TTLS for directory users

EAP-TTLS is the answer to a problem the other methods leave open: authenticating a directory user with their existing password, without certificates and without storing anything password-equivalent on the NAC server.

PEAP cannot do it — MS-CHAPv2 needs an NT hash, and a directory user’s password never leaves the directory. EAP-TLS can, but it costs a PKI and a certificate on every device. EAP-TTLS sits between them: the user types the password they already have, and Taranac verifies it by binding to the directory as that user.

That makes it the natural fit for the population that fits neither of the others — contractors on unmanaged laptops, staff on devices that will never be domain-joined, anything where certificate enrollment is more work than the access is worth. It is also the only password method available when the directory is not Active Directory: OpenLDAP, FreeIPA and the rest hand out no NT hash, so PEAP cannot work against them at all.

The inner method is PAP: the password crosses the tunnel in the clear. That sounds alarming and is in fact the more conservative choice — the reason is worth understanding before you configure anything.

  1. The client builds a TLS tunnel to Taranac, validating the NAC server’s certificate exactly as it does for PEAP. Nothing sensitive has crossed the wire yet.

  2. Inside that tunnel the client sends the username and password as PAP. It is plaintext within TLS — the same protection your browser gives a password on a login form.

  3. Taranac takes that password and, for a directory account, performs an LDAP bind as that user against the directory the account came from — a direct bind as user@domain on Active Directory, or a bind as the account’s distinguished name (resolved inside the configured search bases) on OpenLDAP, FreeIPA and the other types. The directory decides. Taranac never sees a hash, never stores one, and never needs to.

  4. For a local Taranac account the same request is verified against the stored argon2id password hash instead. One method, both identity sources.

EAP-TTLS leans entirely on your LDAP configuration, so check it before touching a client.

  • The directory is configured and reachable under Settings → LDAP, and users are synced — the account must exist in Taranac with source ldap (Infrastructure → Users). A bind cannot be attempted for a user Taranac does not know.
  • The account is in a group you can name in policy.
  • Bind verification uses a short timeout and fails closed — if the directory is unreachable, the request is rejected rather than admitted. Plan for that when the DC is the single point of failure for network access; see 802.1X authentication.
DimensionValue
How (method)eap_ttls
Who (user groups)your directory group
What / Where / WhenAny / Any / Always
Resultan authorization profile, e.g. Corp-Data

Placed above the default reject, as always. If you also run EAP-TLS for the same population, the two rules coexist without interfering: the method condition keeps them apart.

Step 3 — Configure the Windows supplicant

Section titled “Step 3 — Configure the Windows supplicant”

Windows 10 and 11 support EAP-TTLS natively — no supplicant to install.

Set the method to Microsoft: EAP-TTLS, and leave Remember my credentials on: with PAP there is no other way to avoid a prompt (see below).

Ethernet Properties with Microsoft: EAP-TTLS selected as the 802.1X method Windows 10 and 11 ship EAP-TTLS natively — the method is simply in the list.

SettingValueWhy
Enable identity privacy✅ On, with anonymousThe outer identity travels before the tunnel exists, in the clear. This replaces it with a placeholder and reveals the real username only inside TLS
Verify the server’s identity by validating the certificate✅ OnThe tunnel is the entire security model here — see the tip above
Connect to these serversThe NAC server certificate’s CNSame rules and same traps as PEAP
Trusted Root Certification AuthoritiesThe CA that signed the server certificateNot your client-certificate CA — a different anchor entirely
Client authentication → Non-EAP methodUnencrypted password (PAP)The only inner method that works with a directory

TTLS Properties with identity privacy on, PAP selected, and the Windows-credentials option greyed out Identity privacy set to anonymous, the server’s CA trusted, and PAP chosen under non-EAP methods. Note the option directly beneath PAP — greyed out; that is the subject of the next section.

Taranac handles identity privacy properly: it carries the inner identity through and evaluates policy against the real username, so the placeholder in the outer identity costs you nothing in the log or in policy matching.

Specify authentication mode → User authentication, with credentials saved.

Advanced 802.1X settings with single sign-on enabled Note that Save credentials is greyed out here — it becomes available once the mode is User authentication rather than User or computer.

Bounce the port and open Logging → NAC → Authentication. An accept shows the method as EAP-TTLS and the resolved username — the real one, even with identity privacy on.

NAC Auth Log showing EAP-TTLS accepts for a directory user An EAP-TTLS accept for a directory account: the rule that matched (EAP-TTLS · AD_Users → Corp-Data) and VLAN 10. The username is the real one — identity privacy sent anonymous on the wire, and Taranac resolved the inner identity behind it.

If it fails, EAP-TTLS is unusually pleasant to debug: the handler rejects with a specific reason for each gate it applies, and that text reaches the log rather than a generic failure.

Reply messageWhat it means
User not foundNo Taranac account matches the inner username — the directory user is not synced
Account disabled / Account lockedThe account exists but its Taranac state blocks it
Account not yet active / Account expiredOutside the account’s validity period
Password change requiredA local account flagged must change password. Deliberate: the flag gates 802.1X exactly as it gates the web login, so it cannot be side-stepped. Directory accounts delegate this to the directory
Password requiredThe inner request carried no password — usually the inner method is not PAP
LDAP authentication failedThe bind was attempted and the directory refused it — wrong password, or a directory-side restriction
LDAP config not found for userThe account is marked ldap but carries no domain reference; re-sync it
No password configured / Invalid passwordA local account with no hash, or the wrong password

The distinction that saves the most time is between User not found and LDAP authentication failed: the first means the account never reached Taranac, the second means it did and the directory said no. They send you to completely different places.

SymptomCauseFix
Rejected immediately, User not foundThe directory user is not synced into TaranacCheck Infrastructure → Users for the account with source ldap; run a sync
Rejected, LDAP authentication failed, password is definitely rightThe bind is failing for a directory-side reason, or the wrong domain is attached to the userTest the same credentials against the DC directly; check the user’s LDAP config
All users fail at once, having worked yesterdayThe directory is unreachable — bind verification fails closedCheck connectivity to the DC before touching anything client-side
Rejected, Password requiredThe inner method is not PAPSet Unencrypted password (PAP) in the client’s Non-EAP methods
Local test account rejected with Password change requiredMust change password is set on itClear the flag, or change the password through the portal
Connection fails before any log entryServer certificate rejected by the client — TLS never completesSame fix as PEAP: the right CA, in the machine store, with the server name pinned
SituationReach for
Directory users, no PKI, unmanaged or mixed devicesEAP-TTLS — existing passwords, nothing stored server-side
Directory users on managed domain machinesEAP-TLS — no passwords at all, and pre-logon machine authentication
Local Taranac accounts, simplest possible setupPEAP — but accept that an NT hash is stored
Devices with no user at allMAB with endpoint classification