diff --git a/gen_cert.py b/gen_cert.py index e760deae30e602f4305e99bff074649792d97674..035f418ebdb804c253a90fe83ebd5d5d93292077 100644 --- a/gen_cert.py +++ b/gen_cert.py @@ -3,7 +3,8 @@ import datetime import argparse from cryptography import x509 from cryptography.hazmat.primitives import hashes, serialization -from cryptography.hazmat.primitives.asymmetric import rsa +import requests as req +from dotenv import dotenv_values def load_ca(ca_cert_path, ca_key_path, ca_key_password): @@ -18,6 +19,14 @@ def load_ca(ca_cert_path, ca_key_path, ca_key_password): def load_csr(csr_path): + """ Load CSR file + + Args: + csr_path (): string representing the path to the CSR + + Returns: + + """ with open(csr_path, 'rb') as csr_file: csr = x509.load_pem_x509_csr(csr_file.read()) return csr @@ -60,16 +69,36 @@ def save_certificate(cert, filepath): with open(filepath, "wb") as f: f.write(cert.public_bytes(serialization.Encoding.PEM)) +def get_certificate_details(cert, cert_name): + txt = f"Details of {cert_name}\n" + subject = cert.subject + for attr in subject: + txt += f"{attr.oid._name}: {attr.value}\n" + + txt += f"Validity for {cert_name}\n" + txt += f"\t Not valid before: {cert.not_valid_before}\n" + txt += f"\t Not valid after: {cert.not_valid_after}" + + return txt def main(): parser = argparse.ArgumentParser() parser.add_argument("ca_cert_path", help="Path to the CA certificate") parser.add_argument("ca_key_path", help="Path to the CA private key") - parser.add_argument("csr_path", help="Path to the Certificate Signing Request (CSR)") - parser.add_argument("output_cert_path", help="Output path for the signed certificate") + parser.add_argument( + "csr_path", help="Path to the Certificate Signing Request (CSR)") + parser.add_argument("output_cert_path", + help="Output path for the signed certificate") args = parser.parse_args() + config = dotenv_values(".env") + + bot_token = config["API_TELEGRAM"] + channel_id = config["CHANNEL_ID"] + + + ca_cert_path = args.ca_cert_path ca_key_path = args.ca_key_path csr_path = args.csr_path @@ -81,14 +110,16 @@ def main(): print("\n") try: - ca_cert, ca_key = load_ca(ca_cert_path, ca_key_path, ca_key_password=ca_pass.encode()) + ca_cert, ca_key = load_ca( + ca_cert_path, ca_key_path, ca_key_password=ca_pass.encode()) except: print("Bad password") exit(1) csr = load_csr(csr_path) - signed_cert = create_certificate(csr, ca_cert, ca_key, is_intermediate=False) + signed_cert = create_certificate( + csr, ca_cert, ca_key, is_intermediate=False) save_certificate(signed_cert, output_cert_path) @@ -96,7 +127,22 @@ def main(): f.write(signed_cert.public_bytes(serialization.Encoding.PEM)) f.write(ca_cert.public_bytes(serialization.Encoding.PEM)) - print(f"Certificate {csr_path} saved at {output_cert_path}. Signed by {ca_cert_path}") + + msg = f"Certificate {csr_path} saved at { + output_cert_path}.\nSigned by {ca_cert_path}\n\n{ + get_certificate_details(ca_cert, "Signer certificate")}\n\n{get_certificate_details(signed_cert, "Signed cert")}" + + url = f"https://api.telegram.org/bot{bot_token}/sendMessage" + + payload = { + 'chat_id': channel_id, + 'text': msg + } + + print(msg) + + response = req.post(url, payload) + print(response.json()) if __name__ == "__main__":