Source code for commands.create_test_issuing_ca

"""Command to create a test Issuing CA and some example end-entity certificates."""

from __future__ import annotations

import random

from cryptography import x509
from django.core.management.base import BaseCommand

from .base_commands import CertificateCreationCommandMixin


[docs] class Command(CertificateCreationCommandMixin, BaseCommand): """Django management command for adding issuing CA test data."""
[docs] help = 'Removes all migrations, deletes db and runs makemigrations and migrate afterwards.'
[docs] def handle(self, *_args: tuple[str], **_kwargs: dict[str, str]) -> None: """Executes the command.""" key_usage_extension = x509.KeyUsage( digital_signature=True, content_commitment=False, key_encipherment=False, data_encipherment=False, key_agreement=False, key_cert_sign=False, crl_sign=False, decipher_only=False, encipher_only=False, ) root_1, root_1_key = self.create_root_ca('root_ca') issuing_1, issuing_1_key = self.create_issuing_ca(root_1_key, 'root_ca', 'issuing_ca', validity_days=50) self.store_issuing_ca(issuing_1, [root_1], issuing_1_key, 'issuing_ca.p12') self.save_issuing_ca(issuing_1, [root_1], issuing_1_key, 'issuing_ca') ee_certs = {} ee_keys = {} for i in range(10): random_integer = random.randint(20, 80) # noqa: S311 sign = random.choice([1, -1]) # noqa: S311 validity_days = random_integer * sign ee, key = self.create_ee( issuer_private_key=issuing_1_key, issuer_cn='issuing_ca', subject_name=f'EE {i}', extensions=[(key_usage_extension, False)], validity_days=validity_days, ) ee_certs[f'ee{i}'] = ee ee_keys[f'key{i}'] = key self.store_ee_certs(ee_certs) self.store_ee_keys(ee_keys) self.save_ee_certs(ee_certs) self.create_csr(10)