Certification Practice Statement (CPS)
Alliance for Empowerment Inc. — Multi-Organization PKI — Implements CP A4E-PKI-CP-001 v1.0
- Document ID
- A4E-PKI-CPS-001
- Version
- 1.0 — Production Release
- Effective Date
- 2026-05-01
- Review Date
- 2027-05-01
- Classification
- Public (Internal Network)
- Policy Authority
- Brian Vicente, Network Coordinator
- Implements CP
- A4E-PKI-CP-001 v1.0
- Hosted At
- http://10.0.1.232/pki/docs/cps.html
ℹ
This CPS describes the operational implementation of the Alliance Multi-Org PKI Certificate Policy. It provides the specific technical configurations, procedures, and controls for all three organization CAs and step-ca RA instances. Aligned with RFC 3647, RFC 5280, NIST SP 800-57 Rev.6, FIPS 203/204/205, ITU-T X.690, ISC2 CCSP Domain 3, and CA/B Forum BR.
1. Introduction
1.1 PKI Architecture
The Alliance Multi-Org PKI is a three-tier hierarchy hosted across Hyper-V and XenServer infrastructure:
| Host | IP | Role | OS | Hypervisor |
|---|---|---|---|---|
| PKI-ROOT | 10.0.1.244 | Offline Root CA (air-gapped) | Windows Server 2022 | Hyper-V |
| PKI-ALLIANCE | 10.0.1.246 | Alliance Issuing CA + Certificate Templates | Windows Server 2022 | Hyper-V |
| PKI-ABLE2 | 10.0.1.6 | Able-2 Issuing CA | Windows Server 2022 | XenServer |
| PKI-CAPE | 10.0.1.249 | Capabilities Issuing CA | Windows Server 2022 | XenServer |
| the-orc | 10.0.1.232 | PKI Web / CRL / OCSP / CP / CPS / Docs | Debian 12 / Docker | XenServer |
| ALLIANCE-DC01 | 10.0.1.245 | Domain Controller / DNS / AD | Windows Server 2022 | Hyper-V |
| ABLE2-DC01 | 10.0.1.5 | Domain Controller / DNS / AD | Windows Server 2022 | XenServer |
| CAPE-DC01 | 10.0.1.248 | Domain Controller / DNS / AD | Windows Server 2022 | XenServer |
Note on certificate templates: All certificate templates are managed on PKI-ALLIANCE (not on the Root CA). This is the correct ADCS Enterprise CA architecture.
2. Publication and Repository
| Endpoint | the-orc URL (10.0.1.232) | Internal DNS Alias |
|---|---|---|
| CP document | http://10.0.1.232/pki/docs/cp.html | pki.alliance.internal/cps/cp.html |
| CPS document | http://10.0.1.232/pki/docs/cps.html | pki.alliance.internal/cps/cps.html |
| Root CRL | http://10.0.1.232/pki/CRL/AllianceRootCA.crl | pki.alliance.internal/CRL/AllianceRootCA.crl |
| Alliance Issuing CRL | http://10.0.1.232/pki/CRL/AllianceIssuingCA.crl | pki.alliance.internal/CRL/AllianceIssuingCA.crl |
| Able-2 Issuing CRL | http://10.0.1.232/pki/CRL/Able2IssuingCA.crl | pki.able2.internal/CRL/Able2IssuingCA.crl |
| Capabilities Issuing CRL | http://10.0.1.232/pki/CRL/CapeIssuingCA.crl | pki.capabilities.internal/CRL/CapeIssuingCA.crl |
| OCSP Responder | http://10.0.1.232/pki/OCSP | pki.alliance.internal/OCSP |
| Root Cert | http://10.0.1.232/pki/Certs/Alliance-Root-CA.crt | pki.alliance.internal/Certs/Alliance-Root-CA.crt |
All CDP and AIA endpoints are served over HTTP (not HTTPS). This is required per RFC 5280 §4.2.1.13 and CA/B Forum BR to ensure relying parties can perform revocation checks without circular trust dependencies.
3. Identification and Authentication
3.1 Enrollment Authentication Methods
| Method | Authenticator | Provisioner | Use Case |
|---|---|---|---|
| AD Auto-Enrollment | AD Computer/User Account (Kerberos) | ADCS native | Windows workstations, domain servers |
| ACME (HTTP-01 / TLS-ALPN) | DNS control proof | step-ca ACME | Linux servers, Docker, web services |
| SCEP | Challenge password + AD account | step-ca SCEP | Network devices, Intune MDM, UniFi APs |
| JWK | ECDSA-signed JWT | step-ca JWK | Automation, CI/CD, Atera scripts |
| X5C | Client cert (AD-issued) | step-ca X5C | Re-enrollment of AD domain members |
| Manual CSR | PKI admin review + AD identity | ADCS manual | CA certificates, code signing, OCSP |
4. Lifecycle Operations
4.1 ADCS Certificate Templates
| Template Name | EKU | Key | Validity | Auto-Enroll |
|---|---|---|---|---|
| AllianceTLSServer | serverAuth | RSA-2048+/P-256 | 2 years | No |
| AllianceTLSClient | clientAuth | RSA-2048+/P-256 | 2 years | Yes |
| AllianceSMIME | emailProtection | RSA-2048+ | 2 years | Yes |
| AllianceCodeSign | codeSigning | RSA-4096 | 2 years | No |
| AllianceOCSPSigning | OCSPSigning | RSA-2048+ | 2 years | No |
| AllianceSmartCard | smartcardLogon + clientAuth | RSA-2048+ | 2 years | Yes |
| AllianceDevice | clientAuth | RSA-2048+/P-256 | 1 year | MDM |
| Alliance8021X | clientAuth + serverAuth | RSA-2048+/P-256 | 1 year | Yes |
4.2 Renewal and Re-Key Policy
- AD auto-enrollment renews at 80% of certificate lifetime
- ACME certs renewed at 66% of 90-day lifetime (approximately day 60); cert-manager or step-ca renewal agent handles this automatically
- Forced re-key required on: key compromise, algorithm change (PQC migration), CA re-key, subscriber identity change
- CRL and OCSP checked at renewal; revoked subscriber certs are blocked from renewal
5. Operational Controls
5.1 Root CA Key Ceremony Procedure
- Power on PKI-ROOT VM via Hyper-V or XenCenter console
- Verify NIC is disconnected in Device Manager before any signing operation
- Insert offline USB; copy pending CSR(s) onto PKI-ROOT via USB only
- Review each CSR: verify subject DN, SAN, extensions, requestor identity in AD, and NameConstraints compliance
- Sign CSR(s) using ADCS; export signed certificate(s) to USB immediately
- Publish updated CRL to USB
- Shut down PKI-ROOT VM; verify NIC remains disconnected
- Import signed cert(s) and CRL to the-orc endpoints
- Log ceremony in PKI Operations runbook: date/time, certs signed, serial numbers, SHA-256 thumbprints, operator initials
5.2 Atera RMM Monitoring Policy
- certsvc (Active Directory Certificate Services) service state monitored on all issuing CAs; alert on stop
- CRL file modification date monitored; alert if issuing CA CRL is older than 13 days (1 day before overlap window)
- the-orc HTTP endpoint availability monitored; alert if /pki/CRL/ or /pki/OCSP returns non-200
- PKI-ROOT VM power state monitored; alert if VM starts outside approved maintenance window
6. Technical Security Controls
| CA | Key Storage | Backup | Phase 2 Plan |
|---|---|---|---|
| Root CA | Windows CNG + BitLocker + DPAPI | Encrypted offline USB vault | FIPS 140-3 HSM |
| Alliance Issuing CA | Windows CNG + BitLocker | Encrypted VM snapshot + file export | FIPS 140-3 HSM |
| Able-2 Issuing CA | Windows CNG + BitLocker | Encrypted VM snapshot + file export | FIPS 140-3 HSM |
| Capabilities Issuing CA | Windows CNG + BitLocker | Encrypted VM snapshot + file export | FIPS 140-3 HSM |
| step-ca (all orgs) | No CA keys (RA mode only) | Config + DB backup to the-orc nightly | N/A |
⚠
OPEN ITEM — Key Escrow / Recovery: NIST SP 800-57 Rev.6 §5.3.8 requires documented key recovery procedures for CA signing keys. Formal key escrow procedures with tested recovery must be completed before Phase 2 (HSM). This is a tracked open item in the PKI Operations Runbook. Current mitigating control: encrypted VM snapshot backup tested quarterly.
7. Certificate Profiles and ASN.1 DER Requirements
⚠
RULE — No Post-Sign Extension Injection: All certificate extensions MUST be configured within ADCS templates or step-ca JSON templates at request time. The use of
certutil -setextension on Standalone CA CSRs is strictly prohibited on production systems. This practice violates ITU-T X.690 DER encoding rules and RFC 5280, and was the root cause of the ASN1 bad tag value error previously observed. Extensions must be DER-encoded during the CA signing operation only.7.1 End-Entity DER Encoding Checklist
- Version:
02 01 02(X.509 v3) - Basic Constraints: MUST be absent or CA=FALSE on all end-entity certificates
- Key Usage: correct DER bitstring; TLS Server RSA =
03 02 05 A0(digitalSignature + keyEncipherment); TLS Server ECDSA =03 02 07 80(digitalSignature only) - Extended Key Usage: all EKU OIDs explicitly enumerated; no implicit inheritance
- Subject Alternative Name: MUST be present and non-empty for all TLS; contains dNSName or iPAddress only; CN not relied upon for TLS validation
- CDP: HTTP URL only; no LDAP; no trailing slash; must resolve on internal network
- AIA OCSP: HTTP URL (not HTTPS); OCSP responder does not require HTTPS
- AIA CA Issuer: HTTP .crt URL pointing to issuing CA certificate
- Certificate Policies: policy OID + CPS pointer URL (IA5String); no userNotice in production v1.0
7.2 Corrected step-ca TLS Server Template (v1.0)
{
"subject": {
"commonName": "{{ .Subject.CommonName }}",
"organization": "{{ .Insecure.User.org | default "Alliance for Empowerment Inc." }}"
},
"sans": {{ toJson .SANs }},
"keyUsage": ["digitalSignature", "keyEncipherment"],
"extKeyUsage": ["serverAuth"],
"basicConstraints": { "isCA": false },
"extensions": [
{
"id": "2.5.29.32",
"critical": false,
"value": "{{ .Insecure.User.policyOID | default "1.3.6.1.4.1.65571.2.1" }}"
}
],
"validity": {
"notBefore": "{{ now }}",
"notAfter": "{{ now | date "2006-01-02T15:04:05Z" | addDate 0 0 90 }}"
}
}
8. Compliance and Audit
8.1 Annual Internal Audit Checklist
- Verify Root CA and all issuing CA certificates are within valid period; flag certs expiring within 24 months
- Verify all CRLs are current; HTTP GET test from each org network segment
- Verify CDP, AIA, OCSP URLs in issued certificates resolve to live, correct content
- Verify step-ca RA instances are running; test ACME challenge flow end-to-end for each org
- Review CA audit logs: Event IDs 4886 (issued), 4887 (declined), 4888 (revoked), 4890 (revocation config changed)
- Run
certutil -view -restrictto check for certs issued outside NameConstraints permitted subtrees - Verify key backup integrity: attempt recovery test of at least one issuing CA key backup annually
- Test browser trust: load internal HTTPS page on Chrome, Edge, Firefox, Safari per org
- Review Atera RMM alert history; confirm no unresolved certsvc or CRL publish alerts
- Review and update CP/CPS; increment version and effective date if material changes made
8.2 Compliance Matrix
| Standard | Control | Implementation | Status |
|---|---|---|---|
| NIST SP 800-57 Rev.6 §5.3.4 | Key storage | CNG + BitLocker; HSM Phase 2 | Partial |
| NIST SP 800-57 Rev.6 §5.3.6 | Validity periods | Root 20y, Issuing 10y, EE 2y/90d | Pass |
| NIST SP 800-57 Rev.6 §5.3.8 | Key recovery | VM snapshot backup; HSM escrow Phase 2 | Partial |
| NIST SP 800-131A Rev.3 | Algorithm strength | RSA-4096/SHA-256; no SHA-1/RSA-1024 | Pass |
| RFC 5280 §4.2.1.3 | Key Usage DER encoding | Per ASN.1 template; no post-sign injection | Pass |
| RFC 5280 §4.2.1.6 | SAN required for TLS | Mandatory in all TLS templates | Pass |
| RFC 5280 §4.2.1.10 | NameConstraints | Root CA; .onmicrosoft.com excluded | Pass |
| CA/B Forum BR §7.1.4.2 | SAN dNSName mandatory | Enforced in step-ca policy engine | Pass |
| ISC2 CCSP D3 | PKI governance | Documented procedures, air-gapped root | Pass |
| CompTIA Security+/CySA+ | PKI baseline controls | 3-tier hierarchy, CRL/OCSP, dual key usage | Pass |
| ITU-T X.690 ASN.1 | DER encoding | No post-sign injection rule enforced | Pass |
9. Business and Legal Matters
- Governing organization: Alliance for Empowerment Inc., Pine City, New York 14871
- Policy administrator: Brian Vicente, Network Coordinator — pki-admin@wearealliance.org
- Subscriber obligations: Protect private keys; report compromise within 24 hours to pki-admin@wearealliance.org; use certificates only for authorized purposes within NameConstraints subtrees
- Relying party obligations: Validate full certificate chain including CRL or OCSP status check before trusting any certificate issued under this CPS
- Privacy: Subject DN and SAN data limited to operational minimum; no data shared externally; retention per organizational policy
- CA termination: Minimum 90-day advance notice to all subscribers; final CRL with extended NextUpdate published; key destruction ceremony documented in runbook
- Domains in scope: wearealliance.org, o365.wearealliance.org, alliance.internal, able2.internal, able-2.org, capabilities.internal, capabilities.org
- Domains excluded: AllianceforEmpowerment1118.onmicrosoft.com and all *.onmicrosoft.com subdomains (Microsoft-managed; not under PKI organizational control per RFC 5280 §4.2.1.10)
10. step-ca RA Integration
✓
step-ca is operated in Registration Authority (RA) mode only across all three organizations. step-ca instances do not generate or hold CA private key material. All signing operations are performed exclusively by the ADCS issuing CAs. step-ca enforces CP/CPS SAN policy constraints via its policy engine before forwarding any request to ADCS for signature.
10.1 Provisioner Configuration
| Provisioner | Auth | Default Validity | Policy Constraints |
|---|---|---|---|
| ACME | HTTP-01 / TLS-ALPN-01 DNS challenge | 90 days | SANs must match permitted subtrees; no wildcards; no IP for ACME |
| SCEP | Challenge password + AD account | 1 year | Device certs only; clientAuth EKU required; device in CMDB |
| JWK | ECDSA P-256 signed JWT | 1 year | Automation use; IP SANs allowed only for network infrastructure certs |
| X5C | Existing AD-issued client cert | 1 year | Re-enrollment of AD domain members only; cert must be non-revoked |
10.2 Policy Engine Rules (ca.json excerpt)
"policy": {
"x509": {
"allow": {
"dns": [
"*.alliance.internal", "*.wearealliance.org",
"*.o365.wearealliance.org",
"*.able2.internal", "*.able-2.org",
"*.capabilities.internal", "*.capabilities.org"
],
"email": [
"@wearealliance.org",
"@able-2.org",
"@capabilities.org"
]
},
"deny": {
"dns": ["*.onmicrosoft.com", "*.mail.onmicrosoft.com"],
"ip": ["0.0.0.0/0"]
},
"allowWildcardNames": false
}
}
10.3 RA Database and Backup
- step-ca database:
/etc/step-ca/db/(Badger v2) on each step-ca host - Nightly encrypted backup to the-orc:
/backup/step-ca/[org]/ - RA certificate (authorizes step-ca to submit to ADCS) renewed 30 days before expiry via scheduled task on each step-ca host
- step-ca logs forwarded to Watchguard SIEM (syslog UDP/514) for security event correlation with Atera RMM
11. Post-Quantum Cryptographic Procedures
⚛
Current production (v1.0) uses classical algorithms only. PQC OIDs are reserved in arc
1.3.6.1.4.1.65571.5.x. No PQC keys are active. Activation of any PQC algorithm requires formal change control approval, lab validation, and update to CP/CPS to v1.1 or higher.| OID Suffix | Algorithm | Standard | Level | Intended Use |
|---|---|---|---|---|
| .5.1 | ML-KEM-512 | FIPS 203 | 128-bit | KEM / key agreement |
| .5.2 | ML-KEM-768 | FIPS 203 | 192-bit | KEM recommended (TLS Phase 2) |
| .5.3 | ML-KEM-1024 | FIPS 203 | 256-bit | KEM high security |
| .5.4 | ML-DSA-44 | FIPS 204 | 128-bit | EE signatures |
| .5.5 | ML-DSA-65 | FIPS 204 | 192-bit | Recommended CA key (Phase 3) |
| .5.6 | ML-DSA-87 | FIPS 204 | 256-bit | CA key high security |
| .5.7 | SLH-DSA-SHA2-128s | FIPS 205 | 128-bit | Backup/fallback signatures |
| .5.8 | SLH-DSA-SHA2-256s | FIPS 205 | 256-bit | Long-term archival signing |
| .5.9 | Ascon-128 | SP 800-232 | 128-bit AEAD | IoT/edge lightweight encryption |
| .5.10 | Ascon-128a | SP 800-232 | 128-bit AEAD fast | High-throughput IoT/edge |
11.1 Phase Activation Gate Criteria
- Phase 2 Hybrid gate: Windows Server / ADCS PQC support generally available; step-ca PQC provisioner stable release; successful lab validation on non-production PKI for minimum 30 days
- Phase 3 PQC Primary gate: Chrome + Firefox + Edge native PQC TLS in GA release; FIPS 140-3 HSM available with ML-DSA-65 support; Phase 2 hybrid in production for minimum 6 months
- Phase 3 IoT gate: SP 800-232 (Ascon) implementation support in target embedded/IoT platforms confirmed by vendor
- Phase 4 RSA Sunset gate: NIST SP 800-131A published deprecation timeline; all active subscribers confirmed migrated to PQC or hybrid
12. Browser Trust Deployment
12.1 Windows (Chrome / Edge) — GPO Deployment
# Step 1: Publish root CA to AD certificate stores
certutil -dspublish -f Alliance-Root-CA.crt RootCA
certutil -dspublish -f Alliance-Root-CA.crt NTAuthCA
# Step 2: Verify AD publication
certutil -viewdelstore "ldap:///CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration"
# Step 3: GPO configuration
# Path: Computer Config > Windows Settings > Security Settings
# > Public Key Policies > Trusted Root Certification Authorities
# Import: Alliance-Root-CA.crt
# Apply GPO to: Domain Computers OU
12.2 Firefox — Enterprise Policy Deployment
# Method 1: Windows GPO Registry Key
# HKLM\SOFTWARE\Policies\Mozilla\Firefox
# Value: "security.enterprise_roots.enabled" = 1 (REG_DWORD)
# This causes Firefox to read from the Windows Certificate Store
# Method 2: policies.json (Linux / macOS / Docker)
# /etc/firefox/policies/policies.json
{
"policies": {
"Certificates": {
"Install": ["/etc/ssl/certs/alliance-root-ca.crt"],
"ImportEnterpriseRoots": true
},
"SecurityDevices": {
"Add": {}
}
}
}
12.3 Intune — iOS / Android / macOS Trust
- Create Intune Trusted Certificate configuration profile
- Upload Alliance-Root-CA.crt; destination store: Computer Certificate Store — Root
- Assign profile to: All Devices (or org-specific device group)
- macOS: also push via MDM PKCS profile to System Keychain
- iOS: trust prompt shown once; user must tap “Trust” in Settings > General > About > Certificate Trust Settings
12.4 Browser Compatibility Matrix
| Browser | P-256 | P-384 | P-521 | RSA-2048+ | Notes |
|---|---|---|---|---|---|
| Chrome | ✓ | ✓ | ✗ | ✓ | P-521 not supported; use P-256/P-384 or RSA |
| Edge | ✓ | ✓ | ✗ | ✓ | Same engine as Chrome (Blink/BoringSSL) |
| Firefox | ✓ | ✓ | ✓ | ✓ | Full ECDSA support via NSS |
| Safari | ✓ | ✓ | ✓ | ✓ | Full support via Apple Secure Transport |
⚠
P-521 is PROHIBITED for TLS Server certificates in this CPS. All TLS Server certificates targeting Chrome or Edge clients MUST use P-256 or P-384 ECDSA, or RSA-2048+. This is enforced in step-ca policy engine and ADCS template key size restrictions. P-521 may only be used for OCSP Signing or Code Signing certificates where browser TLS is not involved and client compatibility is verified out-of-band.