1# coding: utf-8 2 3from inspect import getsource 4from datetime import datetime 5 6from OpenSSL.crypto import FILETYPE_PEM, TYPE_RSA, X509, PKey, dump_privatekey, dump_certificate 7 8key = PKey() 9key.generate_key(TYPE_RSA, 2048) 10 11cert = X509() 12issuer = cert.get_issuer() 13subject = cert.get_subject() 14 15for dn in [issuer, subject]: 16 dn.C = b"TR" 17 dn.ST = b"Çorum" 18 dn.L = b"Başmakçı" 19 dn.CN = b"localhost" 20 dn.O = b"Twisted Matrix Labs" 21 dn.OU = b"Automated Testing Authority" 22 dn.emailAddress = b"security@twistedmatrix.com" 23 24cert.set_serial_number(datetime.now().toordinal()) 25cert.gmtime_adj_notBefore(0) 26cert.gmtime_adj_notAfter(60 * 60 * 24 * 365 * 100) 27 28cert.set_pubkey(key) 29cert.sign(key, b"sha1") 30 31import __main__ 32source = getsource(__main__) 33source = source.split(b"\n" + b"-" * 5)[0].rsplit(b"\n", 1)[0] 34with open(b"server.pem", "wb") as fObj: 35 fObj.write(source) 36 fObj.write(b"\n") 37 fObj.write(b"'''\n") 38 fObj.write(dump_privatekey(FILETYPE_PEM, key)) 39 fObj.write(dump_certificate(FILETYPE_PEM, cert)) 40 fObj.write(b"'''\n") 41with open(b"key.pem.no_trailing_newline", "wb") as fObj: 42 fObj.write(dump_privatekey(FILETYPE_PEM, key).rstrip('\n')) 43with open(b"cert.pem.no_trailing_newline", "wb") as fObj: 44 fObj.write(dump_certificate(FILETYPE_PEM, cert).rstrip('\n')) 45''' 46-----BEGIN PRIVATE KEY----- 47MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDwT6kbqtMUI0sM 48kx4hI+L780dA59KfksZCqJGmOsMD6hte9EguasfkZzvCF3dk3NhwCjFSOvKx6rCw 49iteoWtYkVfo+rSuVNmt7bEsOUDtuTcaxTzIFB+yHOYwAaoz3zQkyVW0c4pzioiLC 50GCmfFLdiDBQGGp74tb+7a0V6kC3vMLFoM3L6QWq5uYRB5+xLzlPJ734ltyvfZHL3 51Us6pcUbK+3WTWvb4ER0W2RqArAj6Bc/ERQKIAPFEiZi9bIYTwvBH27OKHRz+KoY/ 52G8zY+l+WZoJqDhupRAQAuh7O7V/y6bSP+KNxJRie9QkZvw1PSaGSXtGJI3WWdO12 53/UlgepJpAgMBAAECggEAFq3d7s+DVi4yggBMYqJJZK/D9LssJIUsktPn0wFOsEri 54xGZXfZH0RXj8qcefK/SvtHsxxmnrx6C3hiHEUo4oEYvPrySWrWFSaXaB6trlkPZk 55Hw2zUcg6qVRkAxILNcOy734iawxz8+uLTjgLjYjd+bHcHetbP2ufqadpCjUbMKx/ 567b7Zkqy7W2exiqxVtbEC6sdrIAr1BwtEDP9gdgwg4z4VQP39pxsaDoNIVLEkU+CH 572GrjW74xGwu9K1aboKrbbKsypCYTACiNSy4LWzM8640VJk31CyzSjEtPWLnH9bmK 580XSwWXRK5DXBHNvuDey5KNiiCOHC0YX1drVTq+O1JQKBgQD9nlElh/Nv9nifRPUz 59O8+Jz6rd9l485aAhZZ6bLyvwoC4lS9/EnF9gW66gbF8jIGxwr1/4EZbvRuxvSxbh 60JMbyF3qtngh8UDEPXnnIsGRmheAQB/bR9DeI440wvF1c3pZdvfKhzfEkKUivBJyW 61VBGlgumh+8ZHIZ96dJB/jXJkOwKBgQDykVqR7Q5ccEN2gHNj1qO/BI92sU9ekHUX 625r5dORkNLjJ+IwGQmap8t011UgkO3f4LZGqzL3K0vwm4XVvasDdiajeUFYYyZ+Cn 63G8QO84pBIlKuAsOqLtM1PfZvAJgDblQ6LaQVqiFGBPtPwD20CcweGeWQ1wGOLkWz 64YqqcKWXtqwKBgQDN4z82+6Xph6omieGQpQZ3dwncRUv9neAgHJHkoyfFoRO1HWJc 65ByH6ZJNgEnotVv4RgJ2lEgp41xfLxaaeQa/sCpmB5mA3Ixagxm6ROHlZLWdXPE/n 66451N2ITfQpt8cAqbsT8OkdQoKgeiZVkFRNxKg/tMj8tIJYiE7an8koSBzwKBgQCW 67E+CZkLXl83+J/gdmqhI9yTCKG0IkG/SWiSkWvJEHWqHa8QWy1aBp8W93Ov5nuGnJ 682qM5og2yTtBQxVJjh8t8lIM2l+qjnSmduswfBAdyLS5Cg2tUDAyZUHD8VL24wbZT 69GJIA5XYYwFRND4AduEIWDae/aYeI1JBDYLR2UhbCaQKBgQCISd/jZ8J4O5IcrU3Y 7087hY41KdS6lUxb6LOCptrt3IqkgrccvY4G1loafXCXRHwKDaAPgJK+YBkXlJlDiu 71gKtiRXHAHMFWKYISymgj6Eh42SmrpZiGwDR6Edpmhk3vz1Z+cVBh8Kb6eWO75xJq 72MaDwrJwYPyU8v28kikx924Ypiw== 73-----END PRIVATE KEY----- 74-----BEGIN CERTIFICATE----- 75MIID6DCCAtACAws9CjANBgkqhkiG9w0BAQUFADCBtzELMAkGA1UEBhMCVFIxDzAN 76BgNVBAgMBsOHb3J1bTEUMBIGA1UEBwwLQmHFn21ha8OnxLExEjAQBgNVBAMMCWxv 77Y2FsaG9zdDEcMBoGA1UECgwTVHdpc3RlZCBNYXRyaXggTGFiczEkMCIGA1UECwwb 78QXV0b21hdGVkIFRlc3RpbmcgQXV0aG9yaXR5MSkwJwYJKoZIhvcNAQkBFhpzZWN1 79cml0eUB0d2lzdGVkbWF0cml4LmNvbTAgFw0xNzA3MTIxNDAxNTNaGA8yMTE3MDYx 80ODE0MDE1M1owgbcxCzAJBgNVBAYTAlRSMQ8wDQYDVQQIDAbDh29ydW0xFDASBgNV 81BAcMC0JhxZ9tYWvDp8SxMRIwEAYDVQQDDAlsb2NhbGhvc3QxHDAaBgNVBAoME1R3 82aXN0ZWQgTWF0cml4IExhYnMxJDAiBgNVBAsMG0F1dG9tYXRlZCBUZXN0aW5nIEF1 83dGhvcml0eTEpMCcGCSqGSIb3DQEJARYac2VjdXJpdHlAdHdpc3RlZG1hdHJpeC5j 84b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDwT6kbqtMUI0sMkx4h 85I+L780dA59KfksZCqJGmOsMD6hte9EguasfkZzvCF3dk3NhwCjFSOvKx6rCwiteo 86WtYkVfo+rSuVNmt7bEsOUDtuTcaxTzIFB+yHOYwAaoz3zQkyVW0c4pzioiLCGCmf 87FLdiDBQGGp74tb+7a0V6kC3vMLFoM3L6QWq5uYRB5+xLzlPJ734ltyvfZHL3Us6p 88cUbK+3WTWvb4ER0W2RqArAj6Bc/ERQKIAPFEiZi9bIYTwvBH27OKHRz+KoY/G8zY 89+l+WZoJqDhupRAQAuh7O7V/y6bSP+KNxJRie9QkZvw1PSaGSXtGJI3WWdO12/Ulg 90epJpAgMBAAEwDQYJKoZIhvcNAQEFBQADggEBAJXEq5P9xwvP9aDkXIqzcD0L8sf8 91ewlhlxTQdeqt2Nace0Yk18lIo2oj1t86Y8jNbpAnZJeI813Rr5M7FbHCXoRc/SZG 92I8OtG1xGwcok53lyDuuUUDexnK4O5BkjKiVlNPg4HPim5Kuj2hRNFfNt/F2BVIlj 93iZupikC5MT1LQaRwidkSNxCku1TfAyueiBwhLnFwTmIGNnhuDCutEVAD9kFmcJN2 94SznugAcPk4doX2+rL+ila+ThqgPzIkwTUHtnmjI0TI6xsDUlXz5S3UyudrE2Qsfz 95s4niecZKPBizL6aucT59CsunNmmb5Glq8rlAcU+1ZTZZzGYqVYhF6axB9Qg= 96-----END CERTIFICATE----- 97''' 98