4.7 KiB
Zimmer NAM — LDAP / Active Directory Auth Setup
Reference for configuring services to authenticate against the Zimmer NAM domain.
Extracted from the production Ignition 8.1 gateway Ignition-IGNTN-APP-VP01
(config.idb, NAM AD-Hybrid user source), audited 2026-08-05. Full audit:
~/Desktop/config-idb-users-groups.md.
Directory / connection
| Setting | Value |
|---|---|
| Domain | nam.zimmer.com |
| Primary DC | uswap-vdc-nam1:389 |
| Secondary DC | uswap-vdc-nam2:389 |
| Encryption | None — plain LDAP on 389 (no LDAPS/StartTLS in the Ignition config) |
| SASL | DIGEST-MD5, CRAM-MD5 offered; QoP auth-conf,auth-int,auth; strength high,medium,low; no mutual auth |
| Referrals | FOLLOW |
| Read timeout | 60 000 ms |
| Paging | 1000 entries/page |
| Anonymous bind | Disallowed |
Bind identity (UPN, not DN)
- Service account:
svc_igntnapp - Binds by UPN:
svc_igntnapp@nam.zimmer.com— there is no bind DN/CN anywhere in the working config; end users also authenticate as<sAMAccountName>@nam.zimmer.com(automatic suffix). - Password: held encrypted by the gateway; obtain from the credential owner — never
commit it (in this repo's services use a
${secret:NAME}reference).
User lookup
| Setting | Value |
|---|---|
| Search base | domain root DC=nam,DC=zimmer,DC=com (Ignition field left empty) |
| User search filter | (&(objectClass=user)(sAMAccountName={0})) |
| User enumeration filter | (&(objectClass=user)(!(objectClass=computer))) |
| Username attribute | sAMAccountName |
| Display name | name |
mail |
|
| Phone / SMS | telephoneNumber / mobile |
Groups / roles
The working setup does not use LDAP groups at all. The Ignition profile is AD-Hybrid: AD answers who you are, while what you may do (roles Administrator, Designer, Engineer, Maintenance, Management, Mfg_Tech, Operator) is assigned manually per user inside the application. AD security-group membership grants nothing.
Implication for new services: don't assume a memberOf-based authorization
scheme exists to mirror — there is no established group→role convention in this
domain's SCADA stack. Either keep app-local role assignment (matching the
existing pattern) or define new AD groups deliberately; standard AD attributes
(memberOf, filter (&(objectClass=group)(member={0}))) are available if we
choose to.
Behavioral notes from the working config
- Users are populated on demand: a local record is created on first successful AD login (with no roles until granted).
- Failover: soft failover to the local internal user source, 60 s credential-cache validation — cached logins keep working through a DC outage.
- Lockout: 5 failed attempts / 15-minute window.
Cautions
- Port 389 without TLS means simple binds transit cleartext unless SASL confidentiality is negotiated — for new .NET services prefer LDAPS (636) or StartTLS against the same DCs.
TLS probe results (verified 2026-08-10, from the dev Mac)
Both DCs were live-probed; LDAPS and StartTLS both work on both DCs.
| Check | uswap-vdc-nam1 | uswap-vdc-nam2 |
|---|---|---|
| Ports open | 389, 636, 3268, 3269 | 389, 636, 3268, 3269 |
| LDAPS (636) handshake | TLSv1.3 OK | TLSv1.3 OK |
| StartTLS on 389 | OK | OK |
| Anonymous rootDSE over LDAPS | result: 0 Success |
result: 0 Success |
| Cert subject/SAN | USWAP-VDC-NAM1.nam.zimmer.com (matches FQDN) |
USWAP-VDC-NAM2.nam.zimmer.com (matches FQDN) |
| Cert validity | 2026-03-21 → 2027-03-21 | 2026-03-20 → 2027-03-20 |
| Chain | leaf ← zimmer-issueca1 ← zimmer-rootca (intermediate served, root not) |
same |
| Key size | RSA 1024-bit (sha256 sig) | RSA 1024-bit (sha256 sig) |
Implications for new .NET services:
- Use LDAPS 636 (or StartTLS) — no reason to accept cleartext binds.
- Trust:
zimmer-rootcais an internal CA, not in default OS/container trust stores. Either install the root (+ intermediate) into the host/container trust store, or pin the chain viaLdapOptions.ServerCertificateValidationCallback(code-only seam inZB.MOM.WW.Auth.Ldap). - ⚠️ RSA 1024-bit DC certs: OpenSSL at default security level (SECLEVEL=2 —
what Debian-based .NET containers ship) rejects 1024-bit keys
(
EE certificate key too weak, observed in this probe), so a Linux/container client may fail the TLS handshake even with the CA trusted. Windows/Schannel hosts accept them. Options: get the DC cert template reissued at 2048+ (right fix, needs AD PKI owner), or lower SECLEVEL / use a custom validation callback in affected containers (workaround). Certs expire 2027-03 — a reissue opportunity. - Hostnames resolve from the dev network: nam1 =
10.201.216.2, nam2 =10.201.138.78.