Skip to content

Instantly share code, notes, and snippets.

@zhullyb
Last active June 21, 2024 11:57
Show Gist options
  • Save zhullyb/ce451f5d27ca38079e9d146f5ab30053 to your computer and use it in GitHub Desktop.
Save zhullyb/ce451f5d27ca38079e9d146f5ab30053 to your computer and use it in GitHub Desktop.
A python script to get ssl certificate from https://ohttps.com
#!/usr/bin/env python
# A python script to get certificate from https://ohttps.com
# Documentation: https://ohttps.com/docs/cloud/api/api
apiid = "push-example_str"
apikey = ""
certificateid = "cert-example_str"
path = "./"
keyname = "example.key"
crtname = "example.crt"
url = "https://ohttps.com/api/open/getCertificate"
import sys
import os
import argparse
from time import time
from hashlib import md5
import requests
def main():
timestamp = int(time() * 1000)
params = {
"apiId": apiid,
"timestamp": timestamp,
"certificateId": certificateid
}
params_to_sign = {**params, "apiKey": apikey}
string_to_sign = "&".join(
[f"{k}={v}" for k, v in sorted(params_to_sign.items())])
sign = md5(string_to_sign.encode("utf-8")).hexdigest()
try:
res = requests.get(url, params={"sign": sign, **params}).json()
except Exception as e:
print("=" * 50)
print("Get certificate failed:" + str(e))
print("=" * 50)
sys.exit(2)
if res.get("success") == True:
certKey = res.get("payload").get("certKey")
fullChainCerts = res.get("payload").get("fullChainCerts")
save_to_file(certKey, fullChainCerts)
else:
print("=" * 50)
print("Get certificate failed:")
print(res.get("msg"))
print("=" * 50)
sys.exit(2)
def save_to_file(certKey, fullChainCerts):
global path
try:
if not os.path.exists(path):
os.makedirs(path)
if not path.endswith("/"):
path += "/"
with open(path + keyname, "w") as f:
f.write(certKey)
with open(path + crtname, "w") as f:
f.write(fullChainCerts)
except Exception as e:
print("=" * 50)
print("Save to file failed:" + str(e))
print("certKey: " + certKey)
print("fullChainCerts: " + fullChainCerts)
print("=" * 50)
sys.exit(2)
if __name__ == "__main__":
parser = argparse.ArgumentParser(
usage="usage: getCert.py [options]",
description = "A python script to get ssl certificate from https://ohttps.com"
)
parser.add_argument("-p", "--path", help="path to save")
parser.add_argument("--apiid", help="apiid of ohttps.com")
parser.add_argument("--apikey", help="apikey of ohttps.com")
parser.add_argument("--certificateid", help="certificateid of ohttps.com")
parser.add_argument("--keyname", help="key filename to save")
parser.add_argument("--crtname", help="crt filename to save")
args = parser.parse_args()
for _var in ["path", "apiid", "apikey", "certificateid", "keyname", "crtname"]:
if getattr(args, _var):
vars()[_var] = getattr(args, _var)
if vars()[_var] in [None, ""]:
print(f"Error: <{_var}> can't be empty, please either set it in\n"
"the script file or input it in command line")
sys.exit(2)
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment