60 lines
1.7 KiB
Python
60 lines
1.7 KiB
Python
|
"""Make the custom certificate and private key files used by test_ssl
|
||
|
and friends."""
|
||
|
|
||
|
import os
|
||
|
import sys
|
||
|
import tempfile
|
||
|
from subprocess import *
|
||
|
|
||
|
req_template = """
|
||
|
[req]
|
||
|
distinguished_name = req_distinguished_name
|
||
|
x509_extensions = req_x509_extensions
|
||
|
prompt = no
|
||
|
|
||
|
[req_distinguished_name]
|
||
|
C = XY
|
||
|
L = Castle Anthrax
|
||
|
O = Python Software Foundation
|
||
|
CN = {hostname}
|
||
|
|
||
|
[req_x509_extensions]
|
||
|
subjectAltName = DNS:{hostname}
|
||
|
"""
|
||
|
|
||
|
here = os.path.abspath(os.path.dirname(__file__))
|
||
|
|
||
|
def make_cert_key(hostname):
|
||
|
tempnames = []
|
||
|
for i in range(3):
|
||
|
with tempfile.NamedTemporaryFile(delete=False) as f:
|
||
|
tempnames.append(f.name)
|
||
|
req_file, cert_file, key_file = tempnames
|
||
|
try:
|
||
|
with open(req_file, 'w') as f:
|
||
|
f.write(req_template.format(hostname=hostname))
|
||
|
args = ['req', '-new', '-days', '3650', '-nodes', '-x509',
|
||
|
'-newkey', 'rsa:1024', '-keyout', key_file,
|
||
|
'-out', cert_file, '-config', req_file]
|
||
|
check_call(['openssl'] + args)
|
||
|
with open(cert_file, 'r') as f:
|
||
|
cert = f.read()
|
||
|
with open(key_file, 'r') as f:
|
||
|
key = f.read()
|
||
|
return cert, key
|
||
|
finally:
|
||
|
for name in tempnames:
|
||
|
os.remove(name)
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
os.chdir(here)
|
||
|
cert, key = make_cert_key('localhost')
|
||
|
with open('ssl_cert.pem', 'w') as f:
|
||
|
f.write(cert)
|
||
|
with open('ssl_key.pem', 'w') as f:
|
||
|
f.write(key)
|
||
|
with open('keycert.pem', 'w') as f:
|
||
|
f.write(key)
|
||
|
f.write(cert)
|