Spaces:
Running
Running
File size: 7,131 Bytes
07861d1 fd38101 07861d1 4d46788 12b0c6f 07861d1 32d1c30 07861d1 a90db02 32d1c30 07861d1 208023b 07861d1 255821a 07861d1 5d6ebf8 07861d1 208023b 07861d1 12b0c6f 07861d1 12b0c6f 07861d1 12b0c6f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 |
import re
import time
from genPVTCSR import gen_pvt_csr
from tools import get_domains, get_ca_server, get_kid_hmac, extract_subdomains
from acme_tools import pg_client, new_account
from getTokenCert import get_tokens, verify_tokens
from gen_records import txt_recs
from dns_cf import add_txt, del_txt
from verify_txt import verify_txt
from send_mail import send_email
def cf_non_wildcard(verification_tokens, email, exchange):
tokens = verification_tokens
for key, value in tokens.items():
txt_rec = txt_recs(key, exchange)
txt_value = value[0].strip()
try:
del_txt(txt_rec)
except Exception as e:
print(f"Error deleting TXT records or no TXT records exists: {e}")
add_txt(txt_rec, txt_value, ssl_email=email)
def cf_wildcard(verification_tokens, email, exchange):
tokens = verification_tokens
for key, value in tokens.items():
txt_rec = txt_recs(key, exchange)
print("\nTXT record:", txt_rec, "\n")
try:
del_txt(txt_rec)
except Exception as e:
print(f"Error deleting TXT records or no TXT records exists: {e}")
for txt_value in value:
add_txt(txt_rec, txt_value, ssl_email=email)
def verify_email(email):
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
return re.match(pattern, email)
def validate_domains(i_domains):
domains = []
try:
domains = get_domains(i_domains)
except:
domains = i_domains
pattern = r'^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+$'
for domain in domains:
if re.match(pattern, domain):
continue
else:
return False
return True
def verify_txt_records(verification_tokens, exchange):
tokens = verification_tokens
for key, value in tokens.items():
txt_rec = key
txt_value = value[0].strip()
if not verify_txt(txt_rec, txt_value):
return False
else:
continue
return True
def handle_error(message):
err = f"Error: {message}"
return err, err, err, err
def main(i_domains, wildcard, email, ca_server, key_type, key_size=None, key_curve=None, kid=None, hmac=None):
if i_domains == "":
print("domain", i_domains)
return handle_error("No domain provided")
elif not validate_domains(i_domains):
print("domain", i_domains)
return handle_error("Invalid domains provided")
else:
print("domain", i_domains)
if email == "":
print("email", email)
return handle_error("No email provided")
elif not verify_email(email):
print("email", email)
return handle_error("Invalid email provided")
else:
print("email", email)
if ca_server == "":
print("ca", ca_server)
return handle_error("No CA server provided")
else:
print("ca", ca_server)
if key_type == "":
print("key type", key_type)
return handle_error("No key type provided")
else:
print("key type", key_type)
if key_curve == "":
print("size", key_size)
print("curve", key_curve)
return handle_error("No key size or curve provided")
else:
print("size", key_size)
print("curve", key_curve)
print("All data filled")
domains = get_domains(i_domains)
exchange = extract_subdomains(domains=domains)
if wildcard:
domains = [exchange, f'*.{exchange}']
ca_server_url = get_ca_server(ca_server, key_type)
pgk_client = pg_client(ca_server_url, key_type=key_type, key_size=key_size, key_curve=key_curve)
if pgk_client is None:
return handle_error("Cannot create client access")
nkid, nhmac = get_kid_hmac(ca_server)
if nkid == 'Error' or nhmac == 'Error':
return handle_error("Try with another provider or contact us")
kid = nkid
hmac = nhmac
try:
account = new_account(pgk_client, email, kid=kid, hmac=hmac)
except Exception as e:
print(f"Account Error: {e}")
return handle_error(e)
private_key, csr = gen_pvt_csr(domains=domains, email=email, key_type=key_type, key_curve=key_curve, key_size=key_size)
verification_tokens, challs, order = get_tokens(pgk_client, csr, ca_server_url)
try:
if wildcard:
cf_wildcard(verification_tokens, email, exchange)
else:
cf_non_wildcard(verification_tokens, email, exchange)
except Exception as e:
print(f"Error adding TXT records: {e}")
for i in range(30):
print(f"Waiting for {30-i} seconds", end="\r")
time.sleep(1)
retries = 0
while not verify_txt_records(verification_tokens, exchange):
print("TXT records not verified yet")
retries = retries+1
if retries >=30:
break
time.sleep(5)
cert = verify_tokens(pgk_client, challs, order)
for key in verification_tokens:
txt_rec = txt_recs(key, exchange)
try:
del_txt(txt_rec)
print("TXT records deleted successfully")
except Exception as e:
print(f"Error deleting TXT records or no TXT records exist: {e}")
try:
private_key = private_key.decode("utf-8")
csr = csr.decode("utf-8")
cert = cert.decode("utf-8")
except Exception as e:
private_key = "Failed to obtain private key"
csr = "Failed to obtain CSR"
cert = "Failed to obtain certificate"
generation_details = f"""
SSL Certificate for {i_domains} were generated successfully, using Project Gatekeeper, a free SSL Certificate creator tool.
SSL Provider = {ca_server}
Key Type = {key_type}
Key Curve = {key_curve}
Key Size = {key_size}
For more details, visit: https://projectgatekeeper.vercel.app/tool/decode-ssl.html
"""
if send_email(email, private_key, csr, cert, generation_details):
email_status = f"Email Sent to {email}"
else:
email_status = f"Can't sent email to {email}"
print(email_status)
return private_key, csr, cert, email_status
if __name__ == "__main__":
DOMAINS = 'nayankasturi.eu.org'
ca_server = "Let's Encrypt (Testing)" #Let's Encrypt (Testing), Let's Encrypt, Google (Testing), Google, Buypass (Testing), Buypass, ZeroSSL, SSL.com
EMAIL = "[email protected]"
key_type = "ecc"
key_curve = "ec384"
key_size = "4096"
KID = None
HMAC = None
private_key, csr, cert, email_status = main(i_domains=DOMAINS, wildcard=True, email=EMAIL, ca_server=ca_server, key_type=key_type, key_size=key_size,key_curve=key_curve, kid=KID, hmac=HMAC)
print("Private Key:")
print(private_key)
print()
print("CSR:")
print(csr)
print()
print("Certificate:")
print(cert)
print()
print(email_status)
print()
|