2.4.0 (2025-09-28)
OCSP responder certificates now have an empty subject.
Fix configuring CRL reasons for CRL distribution points for signing certificates.
Update the default Docker image to be based on Debian 13 (Trixie).
Command-line
manage.py init_ca, manage.py view_ca, manage.py sign_cert and manage.py view_cert now output data in a unified way. They can now output the certificate data as PEM, DER, text or JSON (identical to REST API output), or just the serial (to use in further commands).
manage.py dump_ca and manage.py dump_cert are deprecated and will be removed in
django-ca~=2.6.0. Useview_{ca,cert} --output-format {pem,der}instead.BACKWARDS INCOMPATIBLE: manage.py regenerate_ocsp_keys: Removed the
--key-type,--key-size,--elliptic-curve,--profile,algorithmand--expiresparameters (deprecated sincedjango-ca~=2.3.0).manage.py sign_cert:
BACKWARDS INCOMPATIBLE: The
--outoption was removed. Simply pipe stdout instead.
manage.py resign_cert:
BACKWARDS INCOMPATIBLE: manage.py resign_cert: Removed the
--ca,--subject,--profile,--algorithm,--ocsp-responder,--ca-issuer,--policy-identifier,--certification-practice-statement,--user-notice,--crl-full-name,--issuer-alternative-name,--extended-key-usage,--key-usage,--ocsp-no-check,--subject-alternative-nameand--tls-feature, as well as all arguments to mark extensions as (not) critical (deprecated sincedjango-ca~=2.3.0).If you want to resign a certificate with other parameters, simply sign a new one with the same CSR.
Do not copy the IssuerAlternativeName and FreshestCRL extensions from the source certificate (the certificate authority should provide it instead).
Unrecognized extensions (those not supported by cryptography) are now copied over verbatim from the source certificate.
REST API
BACKWARDS INCOMPATIBLE: The data returned when fetching certificate authorities or certificates has changed to match the JSON data returned by the various
manage.pycommands.Implement endpoint to fetch profiles (fixes #168).
Fix internal server error (HTTP 500) when authenticating with a user that does not exist.
Admin interface
Fix clearing/updating extensions when a new certificate authority is selected while signing certificates.
Dependencies
BACKWARDS INCOMPATIBLE: Dropped support for
pydantic~=2.10.0.BACKWARDS INCOMPATIBLE: Dropped support for
acme~=3.2.0,acme~=3.3.0andacme~=4.0.0.Add support for
cryptography~=46.0.Add support for
acme~=4.2.0,acme~=5.0.0andjosepy~=2.1.0.Add support for Debian 13 (Trixie).
Python API
CertificateManager.objects.create_cert()andProfile.create_cert()now allow creating a certificate with neither a common name nor a Subject Alternative Name extension via the allow_empty_subject flag.BACKWARDS INCOMPATIBLE: Attributes in
django_ca.typehintshave been renamed to ensure naming consistency:old name
new name
AccessMethodsAllowedHashTypesCertificateExtensionKeysConfigurableExtensionKeysEllipticCurvesEndEntityCertificateExtensionKeysExtensionKeysGeneralNamesHashAlgorithmsKeyUsagesLogEntryTypesBACKWARDS INCOMPATIBLE: Attributes in
django_ca.constantshave been renamed to ensure naming consistency:old name
new name
HASH_ALGORITHM_NAMESHASH_ALGORITHM_TYPES
Deprecation notices
This is the last release to support
acme~=4.1.0,acme~=4.2.0andjosepy~=2.0.0.