Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

CA/B Forum Baseline Requirements

This page documents compliance with the CA/Browser Forum Baseline Requirements for the Issuance and Management of Publicly-Trusted TLS Server Certificates, Version 2.2.8 (16-Jun-2026). Operators issuing certificates under a publicly-trusted root must configure kipuka and the issuing CA to satisfy these requirements jointly; operators running private PKI may relax constraints through configuration.

Responsibility Boundary

kipuka is a Registration Authority (RA) and enrollment server. It validates CSRs and enforces certificate profile constraints, but it does not perform domain validation, CAA checking, or revocation services. Those responsibilities belong to the issuing Certification Authority.

The following table maps each BR area to the specific software component that owns it. When deploying under a publicly-trusted root, all affected components must be configured correctly.

kipuka (RA) Responsibilities

BR AreaCrateStatus
CSR validation (key size, SAN, extensions)kipuka-estEnforced
RSA exponent / key quality checks (§6.1.6)kipuka-est, syntaNot Implemented
Weak key rejection (§6.1.1.3)kipuka-estNot Implemented
Serial number generationkipuka-est, kipuka-hsmEnforced
Certificate construction (AKI, SKI, BC, KU, EKU, SAN)syntaEnforced
AIA / CDP injectionsyntaNot Implemented
Certificate Policies (Reserved OIDs)syntaPartial
Validity period clampingkipuka-estEnforced
notBefore 48-hour enforcementkipuka-estNot Enforced
SHA-1 signing rejectionkipuka-estNot Enforced
organizationalUnitName prohibitionkipuka-estNot Implemented
Server-side key generationkipuka-est, syntaEnforced
OTP authenticationkipuka-otpEnforced
HSM key operationskipuka-hsmEnforced
CoAP/DTLS transportkipuka-coapEnforced
Audit logging (enrollment)kipuka-estEnforced
Certificate linting (pre-sign)kipuka-estNot Implemented
Dogtag CA integrationkipuka-dogtagEnforced

Issuing CA (Dogtag PKI) Responsibilities

BR AreaSubsystemStatus
Domain validation (DCV)base/acmeAvailable
CAA record processing (§4.2.2.1)base/caNot Implemented
DNSSEC validation of CAAbase/caNot Implemented
Multi-Perspective Issuance (§3.2.2.9)base/acmeNot Implemented
Certificate Transparency (SCT)base/ca (CTEngine)Available
Certificate linting (post-sign)base/caNot Implemented
OCSP responderbase/ocspAvailable
CRL generation and publishingbase/caAvailable
Revocation processingbase/caAvailable
Key archival / escrowbase/kraAvailable
Signed audit loggingbase/serverAvailable

Certificate Profile Enforcement

kipuka validates every CSR against the BR certificate profile before forwarding to the CA for signing. A CSR that violates any rule is rejected with an EnrollReject audit event and an HTTP 400 response.

Subject Fields

FieldBR Sectionkipuka BehaviorStatus
commonName§7.1.4.3Rejected if CN not in SANEnforced
organizationName§3.2.2.2Not verified; use subject_pattern to restrictCA Responsibility
organizationalUnitName§7.1.2.10.2Not stripped or rejectedNot Implemented
serialNumberNot included by defaultN/A
countryName§3.2.2.3ISO 3166 format-validatedEnforced

Key Type and Size Requirements (§6.1.5)

Key TypeMinimumStatus
RSA2048 bitsEnforced (rejected if smaller)
RSA3072 bitsConfigurable via allowed_key_types
ECDSA P-256256 bitsEnforced
ECDSA P-384384 bitsEnforced
ECDSA P-521521 bitsEnforced (not recommended by BR)

To restrict a label to specific key types:

[[est.label]]
name = "web-servers"
ca_id = "issuing-ca-1"
allowed_key_types = ["rsa-3072", "rsa-4096", "ecdsa-p256", "ecdsa-p384"]

Public Key Quality Checks (§6.1.6)

CheckBR RequirementStatus
RSA public exponent is odd and >= 3SHALL confirm (§6.1.6)Not Implemented
RSA exponent in range 2^16+1 to 2^256-1SHOULD (§6.1.6)Not Implemented
RSA modulus divisible by 8, not prime power, no factors < 752SHOULD (§6.1.6)Not Implemented
ECDSA point validation (ECC Full or Partial)SHOULD (§6.1.6)Not Implemented

Weak Key Rejection (§6.1.1.3)

The BR requires CAs to reject keys known to be weak. kipuka does not currently perform weak key checks.

CheckSourceStatus
Debian weak keysgithub.com/cabforum/Debian-weak-keysNot Implemented
ROCA vulnerabilitygithub.com/crocs-muni/rocaNot Implemented
Close Primes (Fermat factorization, 100 rounds)fermatattack.secvuln.infoNot Implemented

Serial Number Generation

The BR requires that certificate serial numbers contain at least 64 bits of output from a CSPRNG (§7.1).

kipuka generates 160-bit (20-byte) serial numbers, significantly exceeding the minimum. Serial numbers must be non-sequential, greater than zero, and less than 2^159.

ConfigurationSourceEntropy
HSM configuredPKCS#11 C_GenerateRandom160 bits from HSM’s FIPS-validated DRBG
Software-onlygetrandom(2)160 bits from OS CSPRNG

Serial numbers are encoded as unsigned integers with the high bit set to zero to ensure a positive ASN.1 INTEGER encoding (per RFC 5280 §4.1.2.2).

Extension Enforcement

Mandatory Extensions (§7.1.2.7.6)

ExtensionCriticalkipuka BehaviorStatus
Authority Key IdentifierNSHA-1 hash of CA public keyEnforced
Subject Key IdentifierNSHA-1 hash of EE public keyEnforced
Basic ConstraintsYCA:FALSE, no pathLenEnforced
Key UsageYFrom ca.default_key_usageEnforced
Extended Key UsageNserverAuth + clientAuthEnforced
Subject Alternative Name*Required (require_san = true)Enforced
Authority Info AccessNCA profile responsibilityNot Implemented
Certificate PoliciesNOperator-configuredPartial
CRL Distribution PointsNCA profile responsibilityNot Implemented

Notes:

  • AIA MUST contain at least one AccessDescription. The id-ad-caIssuers method (SHOULD) provides a URL to the issuing CA’s certificate. When using Dogtag, this is set in the certificate profile.
  • CRL Distribution Points presence depends on whether the certificate includes an AIA OCSP pointer and the certificate’s validity period (§7.1.2.11.2).
  • Certificate Policies MUST include a Reserved Certificate Policy Identifier matching the validation type: DV (2.23.140.1.2.1), IV (2.23.140.1.2.3), OV (2.23.140.1.2.2), or EV (2.23.140.1.1). kipuka does not enforce the correct OID per validation type.

Extension Validation Rules

  • CSRs with basicConstraints CA:TRUE are rejected.
  • CSRs with Key Usage keyCertSign or cRLSign are rejected.
  • pathLenConstraint MUST NOT be present in subscriber certificates (§7.1.2.7.8). kipuka does not include it, but does not actively reject CSRs that request it.
  • SAN entries are validated: DNS names must be valid hostnames (no wildcards unless enabled), IP addresses must parse as IPv4/IPv6, email addresses must contain exactly one @.
  • notBefore MUST be within 48 hours of the certificate signing operation (§7.1.2.7). kipuka does not enforce this constraint.

Subscriber Certificate Key Usage (§7.1.2.7.11)

For RSA keys, digitalSignature SHOULD be set. keyEncipherment MAY be set for TLS 1.2 compatibility. dataEncipherment is a Pending Prohibition.

For ECC keys, digitalSignature MUST be set. keyAgreement is a Pending Prohibition.

kipuka defaults: digitalSignature, keyEncipherment for RSA, digitalSignature for ECDSA. Configurable via ca.default_key_usage.

Subscriber Certificate EKU (§7.1.2.7.10)

Key PurposeOIDBR Presencekipuka Default
id-kp-serverAuth1.3.6.1.5.5.7.3.1MUSTIncluded
id-kp-clientAuth1.3.6.1.5.5.7.3.2MAYIncluded
id-kp-codeSigning1.3.6.1.5.5.7.3.3MUST NOTNot included
id-kp-emailProtection1.3.6.1.5.5.7.3.4MUST NOTNot included
id-kp-timeStamping1.3.6.1.5.5.7.3.8MUST NOTNot included
id-kp-OCSPSigning1.3.6.1.5.5.7.3.9MUST NOTNot included
anyExtendedKeyUsage2.5.29.37.0MUST NOTNot included

Validity Period Enforcement (§6.3.2)

The CA/B Forum is reducing maximum certificate validity on a declining timeline. kipuka tracks this through the max_validity_days parameter.

Issued on or afterIssued beforeSHOULD NOT exceedMUST NOT exceedRecommended config
2026-03-15397 days398 days398
2026-03-152027-03-15199 days200 days200
2027-03-152029-03-1599 days100 days100
2029-03-1546 days47 days47

For the purpose of these calculations, a day is measured as 86,400 seconds. Any amount of time greater than this, including fractional seconds and/or leap seconds, represents an additional day. Certificates SHOULD NOT be issued for the maximum permissible time by default, to account for clock drift.

Each CA and each EST label can specify a maximum validity:

[[ca]]
id = "public-ca"
name = "Public TLS CA"
cert = "/etc/kipuka/ca/public-ca.pem"
key = "/etc/kipuka/ca/public-ca.key"
validity_days = 90
max_validity_days = 200

The effective maximum is the minimum of the CA’s max_validity_days, the label’s max_validity_days, and the client’s requested validity. If the client requests more, kipuka clamps notAfter to the allowed maximum and logs the original and clamped values.

STAR Integration

STAR (RFC 8739) auto-renewal certificates typically use much shorter validity periods (hours or days). STAR renewal orders track their own interval independently of max_validity_days.

Domain Validation

kipuka does not perform domain validation. This is a CA responsibility. When using Dogtag as the issuing CA, the ACME subsystem provides HTTP-01 and DNS-01 challenge validation.

Validation Data Reuse (§4.2.1)

Domain and IP address validation data has maximum reuse periods that decline over time:

Issued on or afterIssued beforeMax reuse period
2026-03-15398 days
2026-03-152027-03-15200 days
2027-03-152029-03-15100 days
2029-03-1510 days

Prohibited Names (§4.2.2)

CAs SHALL NOT issue certificates containing Internal Names or Reserved IP Addresses. Effective 2026-03-15, certificates SHALL NOT contain Domain Names ending in an IP Reverse Zone Suffix.

CAA Record Processing (§4.2.2.1)

Status: CA Responsibility – not implemented in Dogtag.

The CA MUST retrieve and process CAA records in accordance with RFC 8659 for each dNSName in the subjectAltName extension before certificate issuance. The CA MUST process the issue, issuewild, and iodef property tags.

RequirementBR SectionEffectiveStatus
CAA record retrieval and processing§4.2.2.1CurrentNot Implemented
Process accounturi and validationmethods parameters§4.2.2.1.2SHOULD now, MUST 2027-03-15Not Implemented
DNSSEC validation of CAA queries to IANA root trust anchor§4.2.2.1.32026-03-15Not Implemented
DNSSEC SERVFAIL is NOT permission to issue§4.2.2.1.32026-03-15Not Implemented

Impact: Neither kipuka nor Dogtag currently implements CAA checking. Any deployment under a publicly-trusted root must add CAA processing upstream or implement it in the CA before issuance.

Multi-Perspective Issuance Corroboration (§3.2.2.9)

Status: CA Responsibility – not implemented in Dogtag.

The CA MUST corroborate domain validation and CAA checks from multiple remote Network Perspectives before certificate issuance.

EffectiveMin Remote PerspectivesMin RIR RegionsQuorum (non-corroborations allowed)
2025-03-152Per Quorum Table
2026-03-1532Per Quorum Table
2026-06-1542Per Quorum Table
2026-12-1552Per Quorum Table

Quorum table (Table 5 of the BR):

Remote Perspectives UsedMax Non-Corroborations
2–51
6+2

Impact: This requirement is already in effect. Deployments under publicly-trusted roots cannot issue certificates without MPIC infrastructure.

Certificate Transparency (§4.3.1.2, §7.1.2.9)

Status: CA Responsibility – available in Dogtag.

RequirementBR SectionStatus
Lint to-be-signed certificate content before signing§4.3.1.2Not Implemented
Submit Precertificate to CT logs§7.1.2.9Available in Dogtag (CTEngine.java)
Embed SCT list in final certificate§7.1.2.9Available in Dogtag (caServerCertWithSCT.cfg)
Precertificate Signing CA profile (sunset 2026-03-15)§7.1.2.4N/A (already past effective date)

When using Dogtag with CT enabled, the CA creates a precertificate with the poison extension (OID 1.3.6.1.4.1.11129.2.4.3), submits it to configured CT logs, and replaces the poison with an SCT list extension (OID 1.3.6.1.4.1.11129.2.4.2) in the final certificate. kipuka receives the final certificate with embedded SCTs and returns it to the client.

Certificate Linting (§4.3.1.2)

Status: Not Implemented in either component.

Effective 2025-03-15, the CA SHALL implement a Linting process to test the technical conformity of each to-be-signed certificate artifact prior to signing. CAs SHOULD use widely-adopted Linting tools (see cabforum.org/resources/tools).

Linting could be split across the stack: kipuka could lint the CSR and proposed certificate content pre-submission, while the CA lints the to-be-signed tbsCertificate post-assembly. Neither integration exists today.

Revocation and OCSP

Revocation Requirements (§4.9)

Status: CA Responsibility.

RequirementBR SectionDogtag Support
Revoke within 24 hours for key compromise, mis-issuance, failed CAA§4.9.1.1ServiceRevoke handles revocation
Revoke within 5 days for non-critical reasons§4.9.1.1Supported
Investigate Certificate Problem Reports within 24 hours§4.9.5Operational procedure
24x7 revocation request acceptance§4.9.3Dogtag web UI + REST API
Mass revocation plan with 9 provisions§5.7.1.2Operational procedure (effective 2025-12-01)

CRL Requirements (§4.9.7)

RequirementFrequencyDogtag Support
Subscriber cert CRL (with AIA OCSP pointer)At least every 7 daysCRLIssuingPoint auto-update
Subscriber cert CRL (without OCSP pointer)At least every 4 daysConfigurable
CRL after revocationWithin 24 hoursImmediate on ServiceRevoke
CA certificate CRLAt least every 12 monthsConfigurable

OCSP Requirements (§4.9.9)

RequirementBR SectionStatus
OCSP response available within 15 minutes of issuance§4.9.9CA Responsibility (effective 2025-01-15)
OCSP GET method support§4.9.9Dogtag CAOCSPServlet
OCSP validity < 16 hours: update before half validity§4.9.9Configurable in Dogtag
OCSP validity >= 16 hours: update at least 8 hours before nextUpdate, no later than 4 days after thisUpdate§4.9.9Configurable in Dogtag
MUST NOT respond “unknown” for issued certs (effective 2025-01-15)§4.9.9Dogtag CRL-based OCSP

SHA-1 Sunset (§7.1.3.2)

Status: Not Enforced.

RequirementEffectiveStatus
SHA-1 MUST NOT be used in certificate signaturesCurrentkipuka does not validate signing algorithm
SHA-1 MUST NOT be used in CRL signatures2026-09-15CA Responsibility

kipuka should reject enrollment requests that specify SHA-1 as the signature algorithm. This check is not currently implemented.

Server-Side Key Generation (§6.1.2)

The /serverkeygen endpoint generates a key pair and returns the private key to the client in a PKCS#7 EnvelopedData structure.

ComponentAlgorithmNotes
Content encryptionAES-256-CBC or AES-256-GCMSymmetric encryption of the private key
Key wrapping (RSA)RSA-OAEP (SHA-256)Wraps the CEK to the client’s public key
Key wrapping (ECDH)ECDH-ES + AES-256-WRAPKey agreement with client’s EC public key

Additional BR constraints:

  • If the subscriber certificate will contain id-kp-serverAuth, the CA SHALL NOT generate a key pair on behalf of the subscriber and SHALL NOT accept a certificate request using a key pair previously generated by the CA (§6.1.1.3). kipuka does not enforce this cross-request check.
  • Parties other than the Subscriber SHALL NOT archive the Subscriber Private Key without authorization (§6.1.2).
  • Key pairs are generated using the same CSPRNG path as serial numbers and exist in kipuka’s memory only for the duration of the request.

Name Constraints and Encoding

Distinguished Name Encoding (§7.1.4)

All Distinguished Name components are encoded as UTF8String per RFC 5280 §4.1.2.4 and BR §7.1.4. kipuka does not use PrintableString or TeletexString encoding.

Name Constraints

kipuka enforces Name Constraints from the CA certificate at CSR validation time:

  • Permitted subtrees – SAN DNS names must fall within permitted DNS subtrees. IP addresses must fall within permitted IP ranges.
  • Excluded subtrees – SAN entries matching excluded subtrees cause rejection.

Enforcement before signing means a constraint violation produces an EnrollReject audit event rather than a mis-issued certificate.

Internationalized Domain Names (§7.1.4.2)

kipuka accepts IDN in SAN dNSName entries only in A-label (Punycode) form. U-label (Unicode) forms are rejected at CSR validation.

Compliance Timeline

Operators deploying kipuka under a publicly-trusted root should track these upcoming BR deadlines:

DateSectionRequirementOwner
Effective§4.2.2.1.3DNSSEC validation on CAADogtag CA
Effective§3.2.2.9MPIC with 4 perspectivesDogtag ACME
Effective§4.3.1.2Certificate lintingBoth
Effective§4.9.9OCSP within 15 minutesDogtag OCSP
Effective§6.3.2Max validity 200 dayskipuka
2026-07-15§5.4.1Detailed verification logsBoth
2026-09-15§7.1.3.2.1SHA-1 sunset (certs + CRLs)Both
2026-12-15§3.2.2.9MPIC with 5 perspectivesDogtag ACME
2027-03-15§4.2.2.1.2CAA accounturi processingDogtag CA
2027-03-15§3.2.2.4DCV method sunsetDogtag ACME
2027-03-15§6.3.2Max validity 100 dayskipuka
2029-03-15§6.3.2Max validity 47 dayskipuka
2029-03-15§4.2.1DCV reuse max 10 daysDogtag ACME

Compliance Checklist

kipuka Enforcement

RequirementSectionStatus
RSA >= 2048 bits§6.1.5Enforced
ECDSA P-256/P-384/P-521§6.1.5Enforced
RSA exponent validation§6.1.6Not Implemented
Weak key rejection§6.1.1.3Not Implemented
Serial >= 64 bits CSPRNG§7.1Exceeded (160 bits)
AKI present§7.1.2.11.1Enforced
SKI present§7.1.2.11.4Enforced
CA:FALSE for EE certs§7.1.2.7.8Enforced
pathLen MUST NOT for EE§7.1.2.7.8Enforced (absent)
Key Usage critical§7.1.2.7.11Enforced
EKU with serverAuth§7.1.2.7.10Enforced
SAN required§7.1.2.7.12Enforced
CN matches SAN§7.1.4.3Enforced
AIA (OCSP, caIssuers)§7.1.2.7.7Not Implemented
CRL Distribution Points§7.1.2.11.2Not Implemented
Certificate Policies (Reserved OID)§7.1.2.7.9Partial
OU prohibited§7.1.2.10.2Not Implemented
Max validity period§6.3.2Enforced
notBefore within 48 hours§7.1.2.7Not Enforced
DN encoding (UTF8String)§7.1.4Enforced
IDN A-label only§7.1.4.2Enforced
Name Constraints§7.1.5Enforced
/serverkeygen key protection§6.1.2Enforced
SHA-1 signing rejection§7.1.3.2Not Enforced
Certificate linting (pre-sign)§4.3.1.2Not Implemented

Dogtag CA Enforcement

RequirementSectionStatus
Domain validation§3.2.2.4Available (ACME)
CAA record processing§4.2.2.1Not Implemented
DNSSEC validation of CAA§4.2.2.1.3Not Implemented
Multi-Perspective Issuance§3.2.2.9Not Implemented
Certificate Transparency§4.3.1.2Available (CTEngine)
Certificate linting (post-sign)§4.3.1.2Not Implemented
OCSP within 15 minutes§4.9.9Available
CRL issuance frequency§4.9.7Available
Revocation processing§4.9.1Available
Mass revocation plan§5.7.1.2Procedure required