I have been writing some integration tests lately between Ubuntu One and proxies which use SSL certificates. The idea behind this tests was to be able to test that we deal correctly with those certificates that are not correct (notify the user, remember exceptions, etc..) For that I wrote this small function that I used to generate the certificates.
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 | import os from socket import gethostname from OpenSSL import crypto def generate_self_signed_cert(cert_dir, is_valid=True): """Generate a SSL certificate. If the cert_path and the key_path are present they will be overwritten. """ if not os.path.exists(cert_dir): os.makedirs(cert_dir) cert_path = os.path.join(cert_dir, 'squid.crt') key_path = os.path.join(cert_dir, 'squid.key') if os.path.exists(cert_path): os.unlink(cert_path) if os.path.exists(key_path): os.unlink(key_path) # create a key pair key = crypto.PKey() key.generate_key(crypto.TYPE_RSA, 1024) # create a self-signed cert cert = crypto.X509() cert.get_subject().C = 'UK' cert.get_subject().ST = 'London' cert.get_subject().L = 'London' cert.get_subject().O = 'Canonical' cert.get_subject().OU = 'Ubuntu One' cert.get_subject().CN = gethostname() if is_valid else gethostname()[::-1] cert.set_serial_number(1000) cert.gmtime_adj_notBefore(0) cert.gmtime_adj_notAfter(10 * 365 * 24 * 60 * 60) cert.set_issuer(cert.get_subject()) cert.set_pubkey(key) cert.sign(key, 'sha1') with open(cert_path, 'wt') as fd: fd.write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert)) with open(key_path, 'wt') as fd: fd.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, key)) return cert_path, key_path |
I leave to the reader to modify the function to match their needs.
Read more
Latest Official Posts