Revize 87fd5afc
Přidáno uživatelem Stanislav Král před asi 4 roky(ů)
proj/services/cryptography.py | ||
---|---|---|
121 | 121 | |
122 | 122 |
return self.__run_for_output(args, proc_input=bytes(key, encoding="utf-8")).decode() |
123 | 123 | |
124 |
def __create_csr(self, subject, subject_key, subject_key_pass=""):
|
|
124 |
def __create_csr(self, subject, key, key_pass=""):
|
|
125 | 125 |
""" |
126 | 126 |
Creates a CSR (Certificate Signing Request) |
127 | 127 | |
128 | 128 |
:param subject: an instance of <Subject> representing the subject to be added to the CSR |
129 |
:param subject_key: the private key of the subject to be used to generate the CSR
|
|
130 |
:param subject_key_pass: passphrase of the subject's private key
|
|
129 |
:param key: the private key of the subject to be used to generate the CSR |
|
130 |
:param key_pass: passphrase of the subject's private key |
|
131 | 131 |
:return: string containing the generated certificate signing request in PEM format |
132 | 132 |
""" |
133 | 133 | |
... | ... | |
137 | 137 | |
138 | 138 |
# add the passphrase even when None is passed. Otherwise when running tests with pytest some tests freeze |
139 | 139 |
# waiting for the passphrase to be typed in |
140 |
args.extend(["-passin", f"pass:{subject_key_pass}"])
|
|
140 |
args.extend(["-passin", f"pass:{key_pass}"]) |
|
141 | 141 | |
142 |
return self.__run_for_output(args, proc_input=bytes(subject_key, encoding="utf-8")).decode()
|
|
142 |
return self.__run_for_output(args, proc_input=bytes(key, encoding="utf-8")).decode() |
|
143 | 143 | |
144 | 144 |
def __sign_csr(self, csr, issuer_pem, issuer_key, issuer_key_pass=None, extensions="", days=30): |
145 | 145 |
""" |
... | ... | |
193 | 193 |
:param days: number of days for which the certificate will be valid |
194 | 194 |
:return: string containing the generated certificate in PEM format |
195 | 195 |
""" |
196 |
csr = self.__create_csr(subject, subject_key, subject_key_pass=subject_key_pass)
|
|
196 |
csr = self.__create_csr(subject, subject_key, key_pass=subject_key_pass) |
|
197 | 197 |
return self.__sign_csr(csr, issuer_pem, issuer_key, issuer_key_pass=issuer_key_pass, extensions=extensions, |
198 | 198 |
days=days) |
199 | 199 |
proj/tests/services/cryptography/create_csr_test.py | ||
---|---|---|
1 |
import subprocess |
|
2 | ||
3 |
from proj.model.subject import Subject |
|
4 | ||
5 | ||
6 |
def get_csr_pem(csr): |
|
7 |
return subprocess.check_output(["openssl", "req", "-noout", "-text", "-verify", "-in", "-"], |
|
8 |
input=bytes(csr, encoding="utf-8"), stderr=subprocess.STDOUT).decode() |
|
9 | ||
10 | ||
11 |
def test_make_csr(service): |
|
12 |
private_key = service.create_private_key() |
|
13 | ||
14 |
subject = Subject(common_name="foo", country="CZ") |
|
15 |
csr = service._CryptographyService__create_csr(subject, private_key) |
|
16 | ||
17 |
assert "Subject: CN = foo, C = CZ" in get_csr_pem(csr) |
|
18 | ||
19 | ||
20 |
def test_make_csr_pkey_passphrase(service): |
|
21 |
private_key = service.create_private_key(passphrase="foobar") |
|
22 | ||
23 |
subject = Subject(common_name="foo", country="CZ", organization_unit="Mysterious Unit") |
|
24 |
csr = service._CryptographyService__create_csr(subject, private_key, key_pass="foobar") |
|
25 | ||
26 |
assert "Subject: CN = foo, C = CZ, OU = Mysterious Unit" in get_csr_pem(csr) |
proj/tests/services/cryptography/make_csr_test.py | ||
---|---|---|
1 |
import subprocess |
|
2 | ||
3 |
from proj.model.subject import Subject |
|
4 | ||
5 | ||
6 |
def get_csr_pem(csr): |
|
7 |
return subprocess.check_output(["openssl", "req", "-noout", "-text", "-verify", "-in", "-"], |
|
8 |
input=bytes(csr, encoding="utf-8"), stderr=subprocess.STDOUT).decode() |
|
9 | ||
10 | ||
11 |
def test_make_csr(service): |
|
12 |
private_key = service.create_private_key() |
|
13 | ||
14 |
subject = Subject(common_name="foo", country="CZ") |
|
15 |
csr = service._CryptographyService__create_csr(subject, private_key) |
|
16 | ||
17 |
assert "Subject: CN = foo, C = CZ" in get_csr_pem(csr) |
|
18 | ||
19 | ||
20 |
def test_make_csr_pkey_passphrase(service): |
|
21 |
private_key = service.create_private_key(passphrase="foobar") |
|
22 | ||
23 |
subject = Subject(common_name="foo", country="CZ", organization_unit="Mysterious Unit") |
|
24 |
csr = service._CryptographyService__create_csr(subject, private_key, subject_key_pass="foobar") |
|
25 | ||
26 |
assert "Subject: CN = foo, C = CZ, OU = Mysterious Unit" in get_csr_pem(csr) |
Také k dispozici: Unified diff
Re #8472 - Changed some parameter names in create_csr method and renamed make_csr_test.py to create_csr_test.py