Exemplo n.º 1
0
 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
Exemplo n.º 2
0
    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.")
Exemplo n.º 3
0
    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"]))
Exemplo n.º 4
0
    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()
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
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",