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

RFC Support Reference

This page documents every standards specification that kipuka implements, which sections are covered, and any caveats relevant to conformance testing.

Core Enrollment Standards

RFC 7030 – Enrollment over Secure Transport (EST)

SectionOperationStatusNotes
4.1/cacertsImplementedReturns the CA certificate chain as a PKCS#7 certs-only message. Unauthenticated; available without client credentials.
4.2/simpleenrollImplementedPKCS#10 CSR in, signed certificate out. Supports OTP, mTLS, GSSAPI, and CMS-based authentication.
4.2.2/simplereenrollImplementedRenewal with the existing client certificate presented via mTLS. Subject and SAN matching enforced by default.
4.3/fullcmcImplementedFull CMC (RFC 5272) request/response over the EST transport. Disabled by default; enable with est.fullcmc = true.
4.4/serverkeygenImplementedServer generates the key pair; returns a PKCS#7 EnvelopedData wrapping the private key and the signed certificate. Disabled by default.
4.5/csrattrsImplementedReturns a DER-encoded sequence of OIDs and attribute definitions the server expects in a CSR.
3.2EST-over-TLS bindingImplementedAll endpoints served over TLS 1.2 or 1.3 via rustls. The well-known URI prefix /.well-known/est is configurable via est.base_path.
3.2.2EST labelsImplementedLabel-specific paths (/.well-known/est/{label}/...) route to per-CA configurations with independent certificate profiles, allowed key types, and validity limits.
3.3.2HTTP-based client authImplementedHTTP-layer authentication (OTP via Authorization header) supplements TLS-layer mTLS authentication.
4.2.3Retry-After handlingImplementedWhen a request is deferred (e.g., pending manual approval), kipuka returns HTTP 202 with a Retry-After header. The interval is configurable via est.retry_after.
3.5Linking identity and POPImplementedProof-of-Possession via CSR self-signature is verified. When mTLS is used, the binding between the TLS identity and the CSR subject is enforced.

RFC 8951 – Clarifications for EST

RFC 8951 addresses ambiguities in RFC 7030. kipuka incorporates all clarifications that affect server behavior:

ClarificationStatusNotes
Content-Type enforcementImplementedStrict application/pkcs10 for enrollment; application/pkcs7-mime; smime-type=certs-only for /cacerts responses.
Base64 encoding rulesImplementedAccepts both raw DER and Base64-encoded bodies. Responses use Base64 with Content-Transfer-Encoding: base64.
Error response formatImplementedHTTP 4xx/5xx responses include a Content-Type: application/json body with a machine-readable error code and human-readable message.
TLS-unique channel bindingImplementedChannel binding values used for proof-of-possession when available (TLS 1.2 with tls-unique; TLS 1.3 uses Exporter instead).

RFC 5272 – Certificate Management over CMS (Full CMC)

The /fullcmc endpoint accepts a Full PKI Request (a ContentInfo containing a PKIData structure) and returns a Full PKI Response.

FeatureStatusNotes
PKIData parsingImplementedParses TaggedRequest sequences containing PKCS#10 or CRMF requests.
PKIResponse constructionImplementedReturns ResponseBody with certificates and optional control attributes.
Control attributesPartialid-cmc-statusInfoV2, id-cmc-identification, id-cmc-transactionId, and id-cmc-senderNonce / id-cmc-recipientNonce are supported. RA-delegated controls are not yet implemented.
Nested CMS signingImplementedRequests may be signed by a Registration Authority; kipuka validates the RA certificate against a configured RA trust store.

RFC 8739 – Short-Term, Automatically Renewed Certificates (STAR)

kipuka implements the server-side portion of STAR for short-lived certificate management. The kipuka::star module tracks renewal orders and issues replacement certificates before expiry.

FeatureStatusNotes
STAR order lifecycleImplementedStarOrder tracks each auto-renewal series through pending, active, expired, and cancelled states.
Automatic re-issuanceImplementedThe StarManager monitors active orders and issues replacement certificates before the not-after of the current certificate. Renewal interval is configurable per order.
Certificate fetch endpointImplementedThe /.well-known/est/{label}/star/{order-id} path returns the latest certificate in the renewal series.
CancellationImplementedOperators can cancel a STAR order via the admin API. The server stops issuing renewals and the order transitions to cancelled.

Transport

RFC 7252 – Constrained Application Protocol (CoAP)

The kipuka-coap crate implements EST-over-CoAP for resource-constrained devices (IoT sensors, embedded controllers) that cannot maintain persistent TCP connections.

FeatureStatusNotes
CoAP message parsingImplementedConfirmable (CON) and Non-confirmable (NON) message types. Token matching for request/response correlation.
DTLS transportImplementedCoAP endpoints served over DTLS 1.2 with PSK or certificate-based authentication via the kipuka_coap::dtls module.
Block-wise transferImplementedRFC 7959 Block1/Block2 options for transferring certificates and CSRs that exceed a single CoAP datagram. Block size is negotiated automatically.
Content-Format mappingImplementedEST content types mapped to CoAP Content-Format option values per the EST-coaps draft.
/cacerts over CoAPImplementedReturns the CA certificate chain using block-wise transfer.
/simpleenroll over CoAPImplementedEnrollment via PKCS#10 CSR over CoAP/DTLS.

RFC 4210 / RFC 9810 – Certificate Management Protocol (CMP)

The CMP endpoint at /.well-known/cmp provides a comprehensive certificate lifecycle protocol with its own ASN.1 message format, independent of the EST transport.

FeatureStatusNotes
Initialization Request (ir)ImplementedNew certificate enrollment via CMP.
Certification Request (cr)ImplementedCertificate request from an entity with an existing certificate.
Key Update Request (kur)ImplementedCertificate renewal / rekeying.
Revocation Request (rr)ImplementedCertificate revocation via CMP (disabled by default).
MAC-based protectionImplementedHMAC-SHA256 with shared secret for initial enrollment (RFC 4210 section 5.1.3.1).
Signature-based protectionImplementedProtection using an existing certificate and private key.
Error handlingImplementedPKIFailureInfo codes returned in error responses.

RFC 8295 – EST with CMS-Level Security (CMS-EST)

CMS-EST wraps EST messages in CMS SignedData and EnvelopedData structures, providing message-level security independent of the TLS transport.

FeatureStatusNotes
CMS SignedData requestsImplementedAll EST requests wrapped in CMS SignedData for authentication.
CMS EnvelopedData responsesImplementedResponses encrypted to the client’s certificate using CMS EnvelopedData.
Content encryptionImplementedAES-256-GCM and AES-128-GCM supported. Configurable via allowed_content_encryption.
Air-gapped deploymentImplementedCMS-EST enables EST enrollment without direct TLS connectivity.

RFC 9483 – EST over CoAP (EST-coaps)

Extends the RFC 7252 CoAP transport entry above with EST-specific path mapping and content-format negotiation.

FeatureStatusNotes
Compressed URI pathsImplemented/sen, /sren, /skg, /att, /crts mapped to EST operations per section 5.1.
Content-Format IDsImplementedCoAP content-format option values 280-287 per section 5.4.
DTLS 1.2 transportImplementedRFC 6347 with PSK and certificate-based authentication.
DTLS 1.3 transportImplementedRFC 9147 support.
Block-wise transferImplementedRFC 7959 Block1/Block2 for PQC certificates exceeding single datagram size.

RFC 7959 – Block-Wise Transfers in CoAP

FeatureStatusNotes
Block1 (request)ImplementedReassembles fragmented CSR uploads.
Block2 (response)ImplementedSplits certificate responses into negotiated block sizes (16-1024 bytes).
Block size negotiationImplementedServer respects client-requested block size within configured limits.

Composite Post-Quantum Signatures

SpecificationStatusNotes
draft-ietf-lamps-pq-composite-sigs-19ImplementedComposite ML-DSA + classical algorithm combinations for hybrid migration.
CNSA Suite 2.0TrackedConfiguration defaults align with NSA CNSA 2.0 timeline (2025 prefer, 2030 require PQC).

Certificate Policy

CA/Browser Forum Baseline Requirements

kipuka enforces the CA/B Forum Baseline Requirements for TLS server certificates when configured to issue publicly-trusted certificates. See CA/B Forum Baseline Requirements for the full mapping.

RequirementStatusNotes
Certificate profileEnforcedSubject fields, key types, extensions validated against BR profiles. Non-compliant CSRs are rejected before signing.
Serial number generationEnforced160-bit serials from OS CSPRNG (exceeds the BR minimum of 64 bits).
Maximum validity periodEnforcedConfigurable max_validity_days with declining defaults that track the BR timeline (398/200/100/47 days).
Key size minimumsEnforcedRSA >= 2048 bits, ECDSA P-256 or P-384. Smaller keys are rejected at CSR validation.

NIAP Common Criteria – CA Protection Profile v2.0

kipuka is designed to satisfy the Security Functional Requirements (SFRs) of the NIAP CA Protection Profile. See NIAP CA Protection Profile for the full SFR-by-SFR mapping.

Cryptographic Standards

FIPS 140-3 – Cryptographic Module Validation

kipuka does not itself hold a FIPS 140-3 certificate. FIPS compliance is achieved by delegating all cryptographic operations to a validated PKCS#11 HSM module.

AspectMechanismNotes
Key generationC_GenerateKeyPairRSA and ECDSA key pairs generated inside the HSM boundary.
SigningC_SignAll certificate signing operations execute within the validated module.
Random number generationC_GenerateRandomSerial number entropy sourced from the HSM’s validated DRBG when an HSM is configured; falls back to OS CSPRNG (getrandom) otherwise.
Key storageHSM tokenPrivate keys are CKA_SENSITIVE and CKA_EXTRACTABLE=false by default.

When kipuka operates with a software-only key (no HSM), it uses the Synta crate’s software implementations. These are suitable for testing and non-FIPS environments but do not carry a FIPS validation.

FIPS 204 – ML-DSA (Post-Quantum Digital Signatures)

kipuka supports ML-DSA (formerly CRYSTALS-Dilithium) signing via two paths:

PathMechanismLevels
Synta softwarekipuka_hsm::sign::sign_ml_dsaML-DSA-44 (L2), ML-DSA-65 (L3), ML-DSA-87 (L5)
PKCS#11 HSMCKM_IBM_DILITHIUM or vendor-specificDepends on HSM firmware; see HSM Compatibility Matrix

ML-DSA support is experimental. CA certificates and end-entity certificates can use ML-DSA key pairs, but client and browser ecosystem support is limited as of 2026.

FIPS 203 – ML-KEM (Post-Quantum Key Encapsulation)

ML-KEM (formerly CRYSTALS-Kyber) is supported for key encapsulation in hybrid key exchange scenarios. The kipuka_hsm::key module defines MlKemLevel variants L1, L3, and L5 corresponding to ML-KEM-512, ML-KEM-768, and ML-KEM-1024 respectively.

PathMechanismLevels
Synta softwareSoftware KEMML-KEM-512 (L1), ML-KEM-768 (L3), ML-KEM-1024 (L5)
PKCS#11 HSMVendor-specific mechanismsDepends on HSM firmware support

ML-KEM is primarily relevant for /serverkeygen responses where the server encrypts the generated private key for transport to the client.

Summary Matrix

StandardScopeStatus
RFC 7030EST protocolCore implementation – all six endpoints
RFC 8951EST clarificationsFully implemented
RFC 4210 / 9810CMP protocolInitialization, certification, key update, revocation
RFC 5272CMC (Full)/fullcmc endpoint, partial control attributes
RFC 8295CMS-ESTCMS-wrapped EST for air-gapped environments
RFC 8739STAR auto-renewalShort-lived certificate management
RFC 7252CoAP transportConstrained device enrollment over DTLS
RFC 9483EST-coapsEST over CoAP with compressed URI paths
RFC 7959CoAP block transferBlock1/Block2 for large certificate payloads
RFC 6960OCSPClient certificate revocation checking
RFC 6347DTLS 1.2CoAP transport security
RFC 9147DTLS 1.3CoAP transport security (modern)
CA/B Forum BRCertificate profiles, validityEnforced at CSR validation and signing
NIAP CA PP v2.0Protection ProfileSFR mapping documented
FIPS 140-3Cryptographic modulesVia HSM integration
FIPS 204ML-DSA post-quantum signingVia Synta / PKCS#11
FIPS 203ML-KEM post-quantum KEMVia Synta / PKCS#11
Composite PQCHybrid ML-DSA + classicalMigration path to post-quantum
CNSA Suite 2.0NSA algorithm guidanceTimeline tracking for PQC transition
RFC 9908CSR Attributes ClarificationServer-templated CSR subjects + key constraints
draft-est-renewal-infoEST Renewal InformationSuggested renewal window scheduling

RFC 9908 – CSR Attributes Template

The /csrattrs endpoint supports the RFC 9908 CertificationRequestInfoTemplate attribute alongside the traditional OID-list mode (backward compatible).

FeatureStatusNotes
id-aa-certificationRequestInfoTemplate OID (1.2.840.113549.1.9.16.2.61)ImplementedAttribute wraps the template in CsrAttrs SEQUENCE
Subject NameTemplate with optional valuesImplementedSingleAttributeTemplate — absent value means client supplies
SubjectPublicKeyInfoTemplate [0] IMPLICITImplementedAlgorithmIdentifier with EC curve or RSA NULL params
Mandatory [1] attributes fieldImplementedAlways emitted, even as empty SET (A1 00) per ASN.1 spec
id-aa-extensionReqTemplate OID (1.2.840.113549.1.9.16.2.62)ImplementedExtension OIDs with absent values for client-filled extensions
Per-label template variationImplementedDifferent labels can advertise different template constraints
Backward compatibility (§4)ImplementedOID-list entries coexist with template Attribute in same SEQUENCE

Configuration

[est.csr_template]
key_algorithm = "ec:P-256"
required_extensions = ["2.5.29.17"]

[[est.csr_template.subject]]
oid = "2.5.4.10"
value = "Example Corp"

[[est.csr_template.subject]]
oid = "2.5.4.3"
# No value — client must supply commonName

draft-ietf-lamps-est-renewal-info – EST Renewal Information

The GET /.well-known/est/renewal-info/{cert_id} endpoint returns a JSON object with a suggested renewal window for the identified certificate.

FeatureStatusNotes
cert_id format (base64url(AKI).base64url(serial))ImplementedURL-safe alphabet without padding
suggestedWindow JSON responseImplementedISO 8601 start and end timestamps
Retry-After headerImplementedConfigurable interval
AKI mismatch rejectionImplementedReturns 404 if AKI doesn’t match any known CA
cert_id length validationImplementedRejects >256 characters (400)

Conformance Test Suite

kipuka ships a wire-format conformance test suite in contrib/conformance/ that validates protocol compliance beyond HTTP status codes. Each suite uses openssl asn1parse, openssl pkcs7, openssl x509, and xxd for DER-level assertion.

./contrib/conformance/run-all.sh           # against running server
./contrib/conformance/run-all.sh --deploy  # full lifecycle
SuiteRFCAssertionsStatus
rfc7030-estRFC 703031PKCS#7 structure, cert chain, Content-Type, WWW-Authenticate
rfc9908-csrattrsRFC 990819Template OID, version, NameTemplate, SPKI, mandatory [1]
auth-otp12OTP lifecycle, consumption, revocation, reuse rejection
auth-mtlsRFC 7030 §4.2.26mTLS re-enrollment, subject matching
admin-api15Health, CAs, certs, auth boundary
tls-complianceRFC 7030 §3.37TLS 1.2+, AEAD ciphers, chain verification
est-renewal-infodraft9cert_id, JSON schema, Retry-After, error cases
rfc8739-starRFC 87398Order lifecycle (skips if manager not initialized)
rfc8295-cms-estRFC 82956Endpoint reachability, Content-Type handling
rfc4210-cmpRFC 42105Endpoint, Content-Type, error responses
rfc9483-coapRFC 94831169 cargo tests + URI routing + content-format IDs
audit-niapNIAP CA PP8Audit event source verification
Total129