from OpenSSL import crypto def gen_priv_key(): key = crypto.PKey() key.generate_key(crypto.TYPE_RSA, 2048) return crypto.dump_privatekey(crypto.FILETYPE_PEM, key).decode("utf-8") def parse_priv_key(priv_key: str) -> crypto.PKey: return crypto.load_privatekey(crypto.FILETYPE_PEM, priv_key) def gen_csr(priv_key: str, cn: str) -> str: priv_key = parse_priv_key(priv_key) req = crypto.X509Req() req.get_subject().CN = cn req.set_pubkey(priv_key) req.sign(priv_key, "sha256") return crypto.dump_certificate_request(crypto.FILETYPE_PEM, req).decode("utf-8")