Generate deterministic expired TLS fixtures on modern OpenSSL

This commit is contained in:
2026-09-13 18:04:50 +03:00
parent daf9751ccc
commit 1e14bf72a2
2 changed files with 21 additions and 4 deletions
+3 -1
View File
@@ -37,7 +37,9 @@ jobs:
run: |
set -o pipefail
mkdir -p build
python3 -u tools/tls_fixture.py > build/tls-fixture.log 2>&1 &
python3 -m venv build/test-tools
build/test-tools/bin/pip install cryptography==46.0.3
build/test-tools/bin/python -u tools/tls_fixture.py > build/tls-fixture.log 2>&1 &
TLS_PID=$!
trap 'kill "$TLS_PID" 2>/dev/null || true' EXIT
for attempt in {1..30}; do
+15
View File
@@ -13,6 +13,9 @@ import subprocess
import threading
import time
import zlib
import datetime
from cryptography import x509
from cryptography.hazmat.primitives import hashes, serialization
root = pathlib.Path(__file__).resolve().parents[1]
work = root / "build/tls"
@@ -167,6 +170,18 @@ for name, days in (("valid", "1825"), ("expired", "-1")):
key, csr, cert = (work / (name + suffix) for suffix in (".key", ".csr", ".pem"))
subprocess.run(["openssl", "req", "-new", "-newkey", "rsa:2048", "-nodes", "-config", str(config),
"-keyout", str(key), "-out", str(csr)], check=True, capture_output=True, timeout=15)
if name == "expired":
private_key = serialization.load_pem_private_key(key.read_bytes(), password=None)
template = x509.load_pem_x509_certificate((work / "valid.pem").read_bytes())
now = datetime.datetime.now(datetime.timezone.utc)
builder = (x509.CertificateBuilder().subject_name(template.subject).issuer_name(template.issuer)
.public_key(private_key.public_key()).serial_number(x509.random_serial_number())
.not_valid_before(now - datetime.timedelta(days=2))
.not_valid_after(now - datetime.timedelta(days=1)))
for extension in template.extensions:
builder = builder.add_extension(extension.value, extension.critical)
cert.write_bytes(builder.sign(private_key, hashes.SHA256()).public_bytes(serialization.Encoding.PEM))
else:
subprocess.run(["openssl", "x509", "-req", "-in", str(csr), "-signkey", str(key), "-sha256",
"-days", days, "-extfile", str(config), "-extensions", "ext", "-out", str(cert)],
check=True, capture_output=True, timeout=15)