first build
This commit is contained in:
39 files changed
+2522
No files matched your search
@@ -0,0 +1,50 @@
|
||||
"""Certificate helpers shared by tests (not pytest fixtures)."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import datetime
|
||||
|
||||
from cryptography import x509
|
||||
from cryptography.hazmat.primitives import hashes
|
||||
from cryptography.hazmat.primitives.asymmetric import rsa
|
||||
from cryptography.x509.oid import NameOID
|
||||
|
||||
|
||||
def _name(cn: str) -> x509.Name:
|
||||
return x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, cn)])
|
||||
|
||||
|
||||
def issue_test_ca() -> tuple[rsa.RSAPrivateKey, x509.Certificate]:
|
||||
key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
|
||||
now = datetime.datetime.now(datetime.UTC)
|
||||
cert = (
|
||||
x509.CertificateBuilder()
|
||||
.subject_name(_name("Test CA"))
|
||||
.issuer_name(_name("Test CA"))
|
||||
.public_key(key.public_key())
|
||||
.serial_number(1)
|
||||
.not_valid_before(now - datetime.timedelta(minutes=1))
|
||||
.not_valid_after(now + datetime.timedelta(days=30))
|
||||
.add_extension(x509.BasicConstraints(ca=True, path_length=None), critical=True)
|
||||
.sign(key, hashes.SHA256())
|
||||
)
|
||||
return key, cert
|
||||
|
||||
|
||||
def sign_csr(csr: x509.CertificateSigningRequest, ca_key, ca_cert) -> x509.Certificate:
|
||||
now = datetime.datetime.now(datetime.UTC)
|
||||
builder = (
|
||||
x509.CertificateBuilder()
|
||||
.subject_name(csr.subject)
|
||||
.issuer_name(ca_cert.subject)
|
||||
.public_key(csr.public_key())
|
||||
.serial_number(x509.random_serial_number())
|
||||
.not_valid_before(now - datetime.timedelta(minutes=1))
|
||||
.not_valid_after(now + datetime.timedelta(days=7))
|
||||
)
|
||||
try:
|
||||
san = csr.extensions.get_extension_for_class(x509.SubjectAlternativeName)
|
||||
builder = builder.add_extension(san.value, critical=False)
|
||||
except x509.ExtensionNotFound:
|
||||
pass
|
||||
return builder.sign(ca_key, hashes.SHA256())
|
||||
Reference in new issue
Block a user