Skip to content

Commit

Permalink
[resotolib][chore] Refactor CA bundle generation
Browse files Browse the repository at this point in the history
  • Loading branch information
lloesche committed Oct 2, 2023
1 parent 14cefe4 commit 1a35f21
Showing 1 changed file with 22 additions and 15 deletions.
37 changes: 22 additions & 15 deletions resotolib/resotolib/x509.py
Original file line number Diff line number Diff line change
Expand Up @@ -186,24 +186,31 @@ def write_cert_to_file(cert: Certificate, cert_path: str, rename: bool = True) -
os.rename(tmp_cert_path, cert_path)


def generate_ca_bundle_bytes(cert: Certificate, include_certifi: bool = True) -> bytes:
content = bytearray()
if include_certifi:
content.extend(certifi.contents().encode())
content.extend("\n".encode())
content.extend(f"# Issuer: {cert.issuer.rfc4514_string()}\n".encode())
content.extend(f"# Subject: {cert.subject.rfc4514_string()}\n".encode())
label: str = cert.issuer.get_attributes_for_oid(NameOID.COMMON_NAME)[0].value # type: ignore
content.extend(f"# Label: {label}\n".encode())
content.extend(f"# Serial: {cert.serial_number}\n".encode())
md5 = cert_fingerprint(cert, "MD5")
sha1 = cert_fingerprint(cert, "SHA1")
sha256 = cert_fingerprint(cert, "SHA256")
content.extend(f"# MD5 Fingerprint: {md5}\n".encode())
content.extend(f"# SHA1 Fingerprint: {sha1}\n".encode())
content.extend(f"# SHA256 Fingerprint: {sha256}\n".encode())
content.extend(cert_to_bytes(cert))
return bytes(content)


def write_ca_bundle(cert: Certificate, cert_path: str, include_certifi: bool = True, rename: bool = True) -> None:
tmp_cert_path = f"{cert_path}.tmp" if rename else cert_path
content = generate_ca_bundle_bytes(cert, include_certifi)
with open(tmp_cert_path, "wb") as f:
if include_certifi:
f.write(certifi.contents().encode())
f.write("\n".encode())
f.write(f"# Issuer: {cert.issuer.rfc4514_string()}\n".encode())
f.write(f"# Subject: {cert.subject.rfc4514_string()}\n".encode())
label: str = cert.issuer.get_attributes_for_oid(NameOID.COMMON_NAME)[0].value # type: ignore
f.write(f"# Label: {label}\n".encode())
f.write(f"# Serial: {cert.serial_number}\n".encode())
md5 = cert_fingerprint(cert, "MD5")
sha1 = cert_fingerprint(cert, "SHA1")
sha256 = cert_fingerprint(cert, "SHA256")
f.write(f"# MD5 Fingerprint: {md5}\n".encode())
f.write(f"# SHA1 Fingerprint: {sha1}\n".encode())
f.write(f"# SHA256 Fingerprint: {sha256}\n".encode())
f.write(cert_to_bytes(cert))
f.write(content)
if rename:
os.rename(tmp_cert_path, cert_path)

Expand Down

0 comments on commit 1a35f21

Please sign in to comment.