Projekt

Obecné

Profil

Stáhnout (2.8 KB) Statistiky
| Větev: | Tag: | Revize:
1
import subprocess
2
import os
3
from time import time
4

    
5
CONFIG_NAME = "../config"
6

    
7
ROOT_KEY_NAME = "root"
8
ROOT_KEY_PASS = "secret_pass"
9
ROOT_CERT_NAME = "rootCA"
10

    
11
SOME_CERT_KEY_NAME = "somecert"
12
SOME_CERT_KEY_PASS = "another_secret_pass"
13
SOME_CERT_NAME = "somecert"
14

    
15

    
16
def make_private_key(name, passphrase):
17
    subprocess.run(["openssl",
18
                    "genrsa",               # generate a private key for RSA encryption scheme
19
                    "-des3",                # use DES3 for encryption by passphrase
20
                    "-out", f"{name}.key",  # output specification
21
                    "2048"],                # bits
22

    
23
                   input=bytes(             # input required to interact with openssl's CLI
24
                       f'{passphrase}\n'    # openssl queries for passphrase, respond and return
25
                       f'{passphrase}\n',   # openssl queries for passphrase verification, respond and return
26
                       encoding='utf-8')    # use standard encoding for input stream
27
                   )
28

    
29

    
30
def declare_root_CA(name, key_name, key_passphrase):
31
    print("declare root CA")
32
    subprocess.run(
33
        ["openssl", "req", "-x509", "-new", "-nodes", "-key", key_name + ".key", "-sha256", "-days", "1825", "-out",
34
         name + ".crt", "-config", "../root_ca_conf.cnf"], input=bytes(f'{key_passphrase}\nCZ\nPilsen Region\nPilsen\nJSMD\nDepartment of Mysteries\nMd, Js\ninfo@jsmd.gov\n', encoding='utf-8'))
35

    
36

    
37
def make_certificate_sign_request(name, key_name, key_passphrase):
38
    print("make CSR")
39
    subprocess.run(
40
        ["openssl", "req", "-new", "-key", key_name + ".key", "-out",
41
         name + ".csr"], input=bytes(f'{key_passphrase}\nCZ\nPilsen Region\nPilsen\nSome Randoes, a. s.\nBruh\nRando, A\neggsdee@centrum.cz.seznam\n\n\n', encoding='utf-8'))
42

    
43

    
44
def sign_certificate(name, request_name, ca_certificate, ca_key, ca_pass, config_name):
45
    print("sign certificate by CA")
46
    subprocess.run(
47
        ["openssl", "x509", "-req", "-in", request_name + ".csr", "-CA", ca_certificate + ".crt", "-CAkey", ca_key + ".key",
48
         "-CAcreateserial", "-out", name + ".crt", "-days", "123", "-sha256", "-extfile", config_name + ".ext"], input=bytes(ca_pass + "\n", encoding='utf-8'))
49

    
50

    
51
def setup():
52
    make_private_key(ROOT_KEY_NAME, ROOT_KEY_PASS)
53
    declare_root_CA(ROOT_CERT_NAME, ROOT_KEY_NAME, ROOT_KEY_PASS)
54

    
55

    
56
def cert():
57
    make_private_key(SOME_CERT_KEY_NAME, SOME_CERT_KEY_PASS)
58
    make_certificate_sign_request(SOME_CERT_NAME, SOME_CERT_KEY_NAME, SOME_CERT_KEY_PASS)
59
    sign_certificate(SOME_CERT_NAME, SOME_CERT_NAME, ROOT_CERT_NAME, ROOT_KEY_NAME, ROOT_KEY_PASS, CONFIG_NAME)
60

    
61

    
62
def test():
63
    subprocess.run("openssl x509 -text -noout -in rootCA.crt")
64
    subprocess.run("openssl rsa -in some_cert.key -check")
65

    
66

    
67
if __name__ == '__main__':
68
    os.chdir("cert")
69
    setup()
70
    cert()
71
    # test()
(4-4/5)