def get_context(self): context = SSL.Context(SSL.TLSv1_2_METHOD) context.set_options(SSL.OP_NO_TLSv1_2) context.set_verify(SSL.VERIFY_PEER|SSL.VERIFY_FAIL_IF_NO_PEER_CERT, self.ssl_verify_cb) context.set_ocsp_server_callback(self.ocsp_server_callback) try: context.use_privatekey_file(CertificateManager.get_cert_path(self.private_key)) context.use_certificate_file(CertificateManager.get_cert_path(self.certificate)) context.load_verify_locations(CertificateManager.get_cert_path(self.ca_certificate)) except SSL.Error: print("Error: Could not load key and certificate files. Please make sure that you have run the setup.py" "script before starting Server_old.py.") return context
def __init__(self): self.revoked_file_path = os.path.join(CertificateManager.get_cert_path(), "revoked.txt") # Create the file if it does not exist try: if not os.path.exists(self.revoked_file_path): revoked_file = open(self.revoked_file_path, "w") revoked_file.close() except IOError: self.revoked_file_path = None print("Error: OCSP responder could not be initiated.")
def setup(self, peer=None, epg=None): # Load config self.name = CONFIG["endpoints"]["server-name"] self.address = CONFIG["endpoints"]["server-addr"] self.port = CONFIG["endpoints"]["server-port"] self.verbose = CONFIG["verbose"] self.epg = epg self.peer = peer # Create Client peer self.peer = EP(name=CONFIG["endpoints"]["client-name"], address=CONFIG["endpoints"]["client-addr"], port=CONFIG["endpoints"]["client-port"], epg=CONFIG["endpoints"]["client-epg"]) # Load key material to create or request connection-specific certificate server_pkey_name = CONFIG["pki"]["server-pkey-name"] server_cert_name = CONFIG["pki"]["server-cert-name"] if not CM.cert_file_exists( server_pkey_name) or not CM.cert_file_exists(server_cert_name): # Request certificate from RA keys = CM.create_key_pair() csr = CM.create_csr(keys) request = CertificateRequest(self, self.peer, csr) cert = self.ra.request_certificate(request) if cert is None: raise ConnectionError( "Could not retrieve certificate needed to establish TLS connection." ) # Save keys and certificate CM.save_pkey(keys, server_pkey_name) CM.save_cert(cert, server_cert_name) self.cert = cert self.keys = keys else: self.keys = CM.load_pkey(server_pkey_name) self.cert = CM.load_cert(server_cert_name) # Create context self.context = SSL.Context(SSL.TLSv1_2_METHOD) self.context.set_options(SSL.OP_NO_TLSv1_2) self.context.set_verify( SSL.VERIFY_PEER | SSL.VERIFY_FAIL_IF_NO_PEER_CERT, self.ssl_verify_cb) self.context.set_ocsp_server_callback(self.ocsp_server_cb, data=self.name) self.context.use_privatekey(self.keys) self.context.use_certificate(self.cert) self.context.load_verify_locations( CM.get_cert_path(CONFIG["pki"]["ca-cert-name"]))
def __init__(self, ca, psa): # Arguments self.ca = ca self.ocsp_responder = ca.ocsp_responder self.psa = psa(self) self.cert = None self.verbose = CONFIG["verbose"] # Config self.cert_dir = CertificateManager.get_cert_path() self.default_key_type = crypto.TYPE_RSA self.default_key_size = 2048 self.organisation = "Corporation Ltd" self.setup()
def setup(self, peer, epg=None): # Load config self.name = CONFIG["endpoints"]["client-name"] self.address = CONFIG["endpoints"]["client-addr"] self.port = CONFIG["endpoints"]["client-port"] self.verbose = CONFIG["verbose"] self.epg = epg self.peer = peer # Load or request keys and certificate client_pkey_name = CONFIG["pki"]["client-pkey-name"] client_cert_name = CONFIG["pki"]["client-cert-name"] self.ca_cert_name = CONFIG["pki"]["ca-cert-name"] if not CM.cert_file_exists( client_pkey_name) or not CM.cert_file_exists(client_cert_name): # Request certificate from RA keys = CM.create_key_pair() csr = CM.create_csr(keys) request = CertificateRequest(self, self.peer, csr) cert = self.ra.request_certificate(request) if cert is None: raise ConnectionError( "Could not retrieve certificate needed to establish TLS connection. " "RA returned None.") # Save keys and certificate CM.save_pkey(keys, client_pkey_name) CM.save_cert(cert, client_cert_name) self.keys = keys self.cert = cert else: self.keys = CM.load_pkey(client_pkey_name) self.cert = CM.load_cert(client_cert_name) # Define context ctx = SSL.Context(SSL.TLSv1_2_METHOD) ctx.set_verify(SSL.VERIFY_PEER | SSL.VERIFY_FAIL_IF_NO_PEER_CERT, self.ssl_verify_cb) ctx.set_verify_depth(2) ctx.use_privatekey(self.keys) ctx.use_certificate(self.cert) ctx.load_verify_locations( CM.get_cert_path(CONFIG["pki"]["ca-cert-name"])) ctx.set_ocsp_client_callback(self.ocsp_client_callback, data=self.name) self.context = ctx
from OpenSSL import crypto from acpki.pki import CertificateManager import os """ This file creates the basic certificates needed to use the AC-PKI system. The program should be called from the general config script. If files already exist, this script WILL NOT replace them by default. Note that certificate files ARE NOT shared via Git and will therefore need to be created on each individual system. """ print("Setting up certificates...") # Create certs directory if it does not already exist if not os.path.exists(CertificateManager.get_cert_path()): os.makedirs(CertificateManager.get_cert_path()) print("Created certs directory") # Create CA certificate if CertificateManager.cert_file_exists( "ca.cert") and CertificateManager.cert_file_exists("ca.pkey"): # Load existing print("Loading existing CA certificate from file") ca_cert = CertificateManager.load_cert("ca.cert") ca_key_pair = CertificateManager.load_pkey("ca.pkey") else: # Generate new print("Generating CA certificate") ca_key_pair = CertificateManager.create_key_pair(crypto.TYPE_RSA, 2048) csr = CertificateManager.create_csr(ca_key_pair, C="NO", ST="Oslo", O="Corp",