예제 #1
0
    def _generate_ca(self):
        # Generate key
        self.key = PKey()
        self.key.generate_key(TYPE_RSA, 2048)

        # Generate certificate
        self.cert = X509()
        self.cert.set_version(3)
        self.cert.set_serial_number(1)
        self.cert.get_subject().CN = 'Namecoin .bit proxy'
        self.cert.gmtime_adj_notBefore(0)
        self.cert.gmtime_adj_notAfter(315360000)
        self.cert.set_issuer(self.cert.get_subject())
        self.cert.set_pubkey(self.key)
        self.cert.add_extensions([
            X509Extension("basicConstraints", True, "CA:TRUE, pathlen:0"),
            X509Extension("keyUsage", True, "keyCertSign, cRLSign"),
            X509Extension("subjectKeyIdentifier",
                          False,
                          "hash",
                          subject=self.cert),
        ])
        self.cert.sign(self.key, "sha256")

        with open(self.ca_file, 'wb+') as f:
            f.write(dump_privatekey(self.filetype, self.key))
            f.write(dump_certificate(self.filetype, self.cert))

        # export for Windows
        with open("ca.crt", 'wb+') as f:
            f.write(dump_certificate(self.filetype, self.cert))
예제 #2
0
    def __getitem__(self, cn):
        cnp = os.path.sep.join([self.cache_dir, '.pymp_%s.pem' % cn])
        if not os.path.exists(cnp):
            # create certificate
            key = PKey()
            key.generate_key(TYPE_RSA, 2048)

            # Generate CSR
            req = X509Req()
            req.get_subject().CN = cn
            req.set_pubkey(key)
            req.sign(key, 'sha256')

            # Sign CSR
            cert = X509()
            cert.set_subject(req.get_subject())
            cert.set_serial_number(self.serial)
            cert.gmtime_adj_notBefore(0)
            cert.gmtime_adj_notAfter(31536000)
            cert.set_issuer(self.cert.get_subject())
            cert.set_pubkey(req.get_pubkey())
            cert.sign(self.key, 'sha256')

            with open(cnp, 'wb+') as f:
                f.write(dump_privatekey(self.filetype, key))
                f.write(dump_certificate(self.filetype, cert))

        return cnp
예제 #3
0
    def _sign_ca(self,cn,cnp):
        #使用合法的CA证书为代理程序生成服务器证书
        # create certificate
        try:

            key = PKey()
            key.generate_key(TYPE_RSA, 2048)

            # Generate CSR
            req = X509Req()
            req.get_subject().CN = cn
            req.set_pubkey(key)
            req.sign(key, 'sha256')

            # Sign CSR
            cert = X509()
            cert.set_version(2)
            cert.set_subject(req.get_subject())
            cert.set_serial_number(self.serial)
            cert.gmtime_adj_notBefore(0)
            cert.gmtime_adj_notAfter(31536000)
            cert.set_issuer(self.cert.get_subject())
            ss = ("DNS:%s" % cn).encode(encoding="utf-8")

            cert.add_extensions(
                [X509Extension(b"subjectAltName", False, ss)])

            cert.set_pubkey(req.get_pubkey())
            cert.sign(self.key, 'sha256')

            with open(cnp, 'wb+') as f:
                f.write(dump_privatekey(FILETYPE_PEM, key))
                f.write(dump_certificate(FILETYPE_PEM, cert))
        except Exception as e:
            raise Exception("generate CA fail:{}".format(str(e)))
예제 #4
0
    def __getitem__(self, cn):
        '''
        Gets the specified Certificate authority file if it already exists, else creates one!
        '''
        cnp = path.sep.join([self.cache_dir, '.pymp_%s.pem' % cn])
        if not path.exists(cnp):
            # create certificate
            key = PKey()
            key.generate_key(TYPE_RSA, 2048)

            # Generate CSR
            req = X509Req()
            req.get_subject().CN = cn
            req.set_pubkey(key)
            req.sign(key, 'sha1')

            # Sign CSR
            cert = X509()
            cert.set_subject(req.get_subject())
            cert.set_serial_number(self.serial)
            cert.gmtime_adj_notBefore(0)
            cert.gmtime_adj_notAfter(31536000)
            cert.set_issuer(self.cert.get_subject())
            cert.set_pubkey(req.get_pubkey())
            cert.sign(self.key, 'sha1')

            with open(cnp, 'wb+') as f:
                f.write(dump_privatekey(FILETYPE_PEM, key))
                f.write(dump_certificate(FILETYPE_PEM, cert))

        return cnp
예제 #5
0
    def test_set_passwd_cb(self):
        """
        L{Context.set_passwd_cb} accepts a callable which will be invoked when
        a private key is loaded from an encrypted PEM.
        """
        key = PKey()
        key.generate_key(TYPE_RSA, 128)
        pemFile = self.mktemp()
        fObj = file(pemFile, 'w')
        passphrase = "foobar"
        fObj.write(dump_privatekey(FILETYPE_PEM, key, "blowfish", passphrase))
        fObj.close()

        calledWith = []

        def passphraseCallback(maxlen, verify, extra):
            calledWith.append((maxlen, verify, extra))
            return passphrase

        context = Context(TLSv1_METHOD)
        context.set_passwd_cb(passphraseCallback)
        context.use_privatekey_file(pemFile)
        self.assertTrue(len(calledWith), 1)
        self.assertTrue(isinstance(calledWith[0][0], int))
        self.assertTrue(isinstance(calledWith[0][1], int))
        self.assertEqual(calledWith[0][2], None)
예제 #6
0
    def __getitem__(self, cn):
        cnp = path.sep.join([self.cache_dir, '.pymp_%s.pem' % cn])
        if not path.exists(cnp):
            # Crea Key
            key = PKey()
            key.generate_key(TYPE_RSA, 2048)

            # Crea CSR
            # revisar : http://stackoverflow.com/questions/24043226/generating-a-csr-with-python-crypto
            req = X509Req()
            req.get_subject().CN = cn
            req.set_pubkey(key)
            req.sign(key, 'sha1')

            # Firmar CSR
            cert = X509()
            cert.set_subject(req.get_subject())
            cert.set_serial_number(self.serial)
            cert.gmtime_adj_notBefore(0)
            cert.gmtime_adj_notAfter(31536000)
            cert.set_issuer(self.cert.get_subject())
            cert.set_pubkey(req.get_pubkey())
            cert.sign(self.key, 'sha1')

            with open(cnp, 'wb+') as f:
                f.write(dump_privatekey(FILETYPE_PEM, key))
                f.write(dump_certificate(FILETYPE_PEM, cert))

        return cnp
예제 #7
0
    def _generate_ca(self):
        '''
        This function generates the certificate authority file
        '''
        # Generate key
        self.key = PKey()
        self.key.generate_key(TYPE_RSA, 2048)

        # Generate certificate
        self.cert = X509()
        self.cert.set_version(3)
        self.cert.set_serial_number(1)
        self.cert.get_subject().CN = 'ca.mitm.com'
        self.cert.gmtime_adj_notBefore(0)
        self.cert.gmtime_adj_notAfter(315360000)
        self.cert.set_issuer(self.cert.get_subject())
        self.cert.set_pubkey(self.key)
        self.cert.add_extensions([
            X509Extension("basicConstraints", True, "CA:TRUE, pathlen:0"),
            X509Extension("keyUsage", True, "keyCertSign, cRLSign"),
            X509Extension("subjectKeyIdentifier",
                          False,
                          "hash",
                          subject=self.cert),
        ])
        self.cert.sign(self.key, "sha1")

        with open(self.ca_file, 'wb+') as f:
            f.write(dump_privatekey(FILETYPE_PEM, self.key))
            f.write(dump_certificate(FILETYPE_PEM, self.cert))
예제 #8
0
def create_csr(csr_file_path):
    private_key_path = re.sub(r".(pem|crt)$",
                              ".key",
                              cert_file_path,
                              flags=re.IGNORECASE)

    # create public/private key
    key = PKey()
    key.generate_key(TYPE_RSA, 2048)

    # Generate CSR
    req = X509Req()
    req.get_subject().CN = 'localhost'
    req.get_subject().O = 'XYZ Widgets Inc'
    req.get_subject().OU = 'IT Department'
    req.get_subject().L = 'Seattle'
    req.get_subject().ST = 'Washington'
    req.get_subject().C = 'US'
    req.get_subject().emailAddress = '*****@*****.**'
    req.set_pubkey(key)
    req.sign(key, 'sha256')

    with open(csr_file_path, 'wb+') as f:
        f.write(dump_certificate_request(FILETYPE_PEM, req))
    with open(private_key_path, 'wb+') as f:
        f.write(dump_privatekey(FILETYPE_PEM, key))
예제 #9
0
def create_dummy_certificate(certname,keyname,_dir, force=False) -> bool:
    if certname and keyname and _dir:
        if path.exists(_dir+keyname) and path.exists(_dir+certname) and not force:
            return True
        else:
            if path.exists(_dir+certname):
                remove(_dir+certname)
            if path.exists(_dir+keyname):
                remove(_dir+keyname)

        key = PKey()
        key.generate_key(TYPE_RSA, 4096)
        cert = X509()
        cert.set_serial_number(uuid4().int)
        cert.set_version(2)
        cert.get_subject().C = "US"
        cert.get_subject().ST = "WA"
        cert.get_subject().L = "127.0.0.1"
        cert.get_subject().O = "github.com/qeeqbox/analyzer"
        cert.get_subject().OU = "github.com/qeeqbox/analyzer"
        cert.get_subject().CN = "auto generated self signed certificate by qeeqbox/analyzer"
        cert.gmtime_adj_notBefore(-60 * 60 * 24 * 365 * 2)
        cert.gmtime_adj_notAfter(60 * 60 * 24 * 365 * 2)
        cert.set_issuer(cert.get_subject())
        cert.set_pubkey(key)
        cert.add_extensions([X509Extension(b"basicConstraints", True, b"CA:TRUE, pathlen:0"),
                             X509Extension(b"keyUsage", True, b"keyCertSign, cRLSign"),
                             X509Extension(b"subjectKeyIdentifier", False, b"hash", subject=cert),])
        cert.sign(key, 'sha256')
        with open(_dir+certname, 'wb') as f:
            f.write(dump_certificate(FILETYPE_PEM, cert))
        with open(_dir+keyname, 'wb') as f:
            f.write(dump_privatekey(FILETYPE_PEM, key))
        return True
    return False
예제 #10
0
    def _gen_ca(self, again=False):
        # Generate key
        if os.path.exists(self.ca_file_path) and os.path.exists(
                self.cert_file_path) and not again:
            self._read_ca(self.ca_file_path)
            return
        self.key = PKey()
        self.key.generate_key(TYPE_RSA, 2048)
        # Generate certificate
        self.cert = X509()
        self.cert.set_version(2)
        self.cert.set_serial_number(1)
        self.cert.get_subject().CN = 'CachingProxy'
        self.cert.gmtime_adj_notBefore(0)
        self.cert.gmtime_adj_notAfter(315360000)
        self.cert.set_issuer(self.cert.get_subject())
        self.cert.set_pubkey(self.key)
        self.cert.add_extensions([
            X509Extension(b"basicConstraints", True, b"CA:TRUE, pathlen:0"),
            X509Extension(b"keyUsage", True, b"keyCertSign, cRLSign"),
            X509Extension(b"subjectKeyIdentifier",
                          False,
                          b"hash",
                          subject=self.cert),
        ])
        self.cert.sign(self.key, "sha256")
        with open(self.ca_file_path, 'wb+') as f:
            f.write(dump_privatekey(FILETYPE_PEM, self.key))
            f.write(dump_certificate(FILETYPE_PEM, self.cert))

        with open(self.cert_file_path, 'wb+') as f:
            f.write(dump_certificate(FILETYPE_PEM, self.cert))
예제 #11
0
파일: s.py 프로젝트: lite/MyTestBox
    def __getitem__(self, cn):
        cnp = path.sep.join([self.cache_dir, '.pymp_%s.pem' % cn])
        if not path.exists(cnp):
            # create certificate
            key = PKey()
            key.generate_key(TYPE_RSA, 2048)

            # Generate CSR
            req = X509Req()
            req.get_subject().CN = cn
            req.set_pubkey(key)
            req.sign(key, 'sha1')

            # Sign CSR
            cert = X509()
            cert.set_subject(req.get_subject())
            cert.set_serial_number(self.serial)
            cert.gmtime_adj_notBefore(0)
            cert.gmtime_adj_notAfter(31536000)
            cert.set_issuer(self.cert.get_subject())
            cert.set_pubkey(req.get_pubkey())
            cert.sign(self.key, 'sha1')

            with open(cnp, 'wb+') as f:
                f.write(dump_privatekey(FILETYPE_PEM, key))
                f.write(dump_certificate(FILETYPE_PEM, cert))

        return cnp
예제 #12
0
def make_cert(filename, cacert=None, cakey=None):
    key = PKey()
    key.generate_key(TYPE_RSA, 2048)

    cert = X509()
    subject = cert.get_subject()

    subject.C = b"TR"
    subject.ST = b"Çorum"
    subject.L = b"Başmakçı"
    subject.CN = b"localhost"
    subject.O = b"Mozilla Test"
    subject.OU = b"Autopush Test %s" % filename
    subject.emailAddress = b"*****@*****.**"
    subjectAltName = X509Extension(b'subjectAltName', False, b'DNS:localhost')
    cert.add_extensions([subjectAltName])

    cert.set_serial_number(uuid.uuid4().int)
    cert.gmtime_adj_notBefore(0)
    cert.gmtime_adj_notAfter(60 * 60 * 24 * 365 * 100)

    cert.set_pubkey(key)

    if not cacert:
        # self sign
        cacert = cert
        cakey = key
    cert.set_issuer(cacert.get_subject())
    cert.sign(cakey, 'sha1')

    with open(filename, 'wb') as fp:
        fp.write(dump_privatekey(FILETYPE_PEM, key))
        fp.write(dump_certificate(FILETYPE_PEM, cert))
    return cert, key
예제 #13
0
    def get_cert_path(self, cn):
        cnp = os.path.sep.join(
            [self.cache_dir,
             '%s-%s.pem' % (self.CERT_PREFIX, cn)])
        if os.path.exists(cnp):
            print("Cert already exists common_name=%s" % cn)
        else:
            print("Creating and signing cert common_name=%s" % cn)
            key = PKey()
            key.generate_key(TYPE_RSA, 2048)

            # Generate CSR
            req = X509Req()
            req.get_subject().CN = cn
            req.set_pubkey(key)
            req.sign(key, 'sha1')

            # Sign CSR
            cert = X509()
            cert.set_subject(req.get_subject())
            cert.set_serial_number(123)
            cert.gmtime_adj_notBefore(0)
            cert.gmtime_adj_notAfter(31536000)
            cert.set_issuer(self.cert.get_subject())
            cert.set_pubkey(req.get_pubkey())
            cert.sign(self.key, 'sha256')

            with open(cnp, 'wb+') as f:
                f.write(dump_privatekey(FILETYPE_PEM, key))
                f.write(dump_certificate(FILETYPE_PEM, cert))

            print("Created cert common_name=%s location=%s" % (cn, cnp))

        return cnp
예제 #14
0
class RSA:
    def __init__(self):
        self.pk = PKey()
        self.pk.generate_key(TYPE_RSA, 1024)
        self.private_key = self.strip_pri(
            dump_privatekey(FILETYPE_PEM, self.pk))
        self.public_key = self.strip_pub(dump_publickey(FILETYPE_PEM, self.pk))

    def strip_pub(self, content):
        content = content.replace(b'-----BEGIN PUBLIC KEY-----\n', b'')
        content = content.replace(b'\n-----END PUBLIC KEY-----\n', b'')
        content = content.replace(b'\n', b'')
        return content

    def strip_pri(self, content):
        content = content.replace(b'-----BEGIN PRIVATE KEY-----\n', b'')
        content = content.replace(b'\n-----END PRIVATE KEY-----\n', b'')
        content = content.replace(b'\n', b'')
        return content

    def get_public_key(self):
        return self.public_key.decode('utf8')

    def get_private_key(self):
        return self.private_key.decode('utf8')
예제 #15
0
    def _sign_ca(self, cn, cnp):
        # 使用合法的CA证书为代理程序生成服务器证书
        # create certificate
        try:

            key = PKey()
            key.generate_key(TYPE_RSA, 2048)

            # Generate CSR
            req = X509Req()
            req.get_subject().CN = cn
            req.set_pubkey(key)
            req.sign(key, 'sha256')

            # Sign CSR
            cert = X509()
            cert.set_version(2)
            cert.set_subject(req.get_subject())
            cert.set_serial_number(self.serial)
            cert.gmtime_adj_notBefore(0)
            cert.gmtime_adj_notAfter(31536000)
            cert.set_issuer(self.cert.get_subject())
            ss = ("DNS:%s" % cn).encode(encoding="utf-8")

            cert.add_extensions([X509Extension(b"subjectAltName", False, ss)])

            cert.set_pubkey(req.get_pubkey())
            cert.sign(self.key, 'sha256')

            with open(cnp, 'wb+') as f:
                f.write(dump_privatekey(FILETYPE_PEM, key))
                f.write(dump_certificate(FILETYPE_PEM, cert))
        except Exception as e:
            raise Exception("generate CA fail:{}".format(str(e)))
예제 #16
0
    def _generate_ca(self):
        # Crea KEY de tipo RSA
        self.key = PKey()
        self.key.generate_key(TYPE_RSA, 2048)
        # Crea Certificado X509
        self.cert = X509()
        self.cert.set_version(3)
        # Le puse 10000 no se por que
        self.cert.set_serial_number(1)
        self.cert.get_subject().CN = 'ca.proxymitm.com'
        self.cert.gmtime_adj_notBefore(0)
        #Tiempo de duracion del certificado
        self.cert.gmtime_adj_notAfter(315360000)
        self.cert.set_issuer(self.cert.get_subject())
        self.cert.set_pubkey(self.key)
        #Atributos del ceriticado
        self.cert.add_extensions([
            X509Extension("basicConstraints", True, "CA:TRUE, pathlen:0"),
            X509Extension("keyUsage", True, "keyCertSign, cRLSign"),
            X509Extension("subjectKeyIdentifier",
                          False,
                          "hash",
                          subject=self.cert),
        ])
        self.cert.sign(self.key, "sha256")

        with open(self.ca_file, 'wb+') as f:
            f.write(dump_privatekey(FILETYPE_PEM, self.key))
            f.write(dump_certificate(FILETYPE_PEM, self.cert))
예제 #17
0
 def test_pregeneration(self):
     """
     L{PKeyType.bits} and L{PKeyType.type} return C{0} before the key is
     generated.
     """
     key = PKey()
     self.assertEqual(key.type(), 0)
     self.assertEqual(key.bits(), 0)
예제 #18
0
 def test_use_privatekey(self):
     """
     L{Context.use_privatekey} takes an L{OpenSSL.crypto.PKey} instance.
     """
     key = PKey()
     key.generate_key(TYPE_RSA, 128)
     ctx = Context(TLSv1_METHOD)
     ctx.use_privatekey(key)
     self.assertRaises(TypeError, ctx.use_privatekey, "")
예제 #19
0
파일: tls.py 프로젝트: chojar/GlobaLeaks
def gen_rsa_key(bits):
    """
    Generate an RSA key and returns it in PEM format.
    :rtype: An RSA key as an `pyopenssl.OpenSSL.crypto.PKey`
    """
    key = PKey()
    key.generate_key(TYPE_RSA, bits)

    return crypto.dump_privatekey(SSL.FILETYPE_PEM, key)
예제 #20
0
def generatePrivate(cert_name,password, _size = 2048):
	pk = PKey()
	pk.generate_key(TYPE_RSA, _size)
	pk_gen = pk.to_cryptography_key()
	_PEM = Encoding.PEM
	_TraditionalOpenSSL = PrivateFormat.TraditionalOpenSSL
	_encryption = BestAvailableEncryption(password)
	pvt = pk_gen.private_bytes(_PEM, _TraditionalOpenSSL, _encryption)
	return pk,pvt
예제 #21
0
def gen_rsa_key(bits):
    """
    Generate an RSA key and returns it in PEM format.
    :rtype: An RSA key as an `pyopenssl.OpenSSL.crypto.PKey`
    """
    key = PKey()
    key.generate_key(TYPE_RSA, bits)

    return crypto.dump_privatekey(SSL.FILETYPE_PEM, key)
예제 #22
0
파일: test_ssl.py 프로젝트: dreamwave/rad
 def test_use_privatekey(self):
     """
     L{Context.use_privatekey} takes an L{OpenSSL.crypto.PKey} instance.
     """
     key = PKey()
     key.generate_key(TYPE_RSA, 128)
     ctx = Context(TLSv1_METHOD)
     ctx.use_privatekey(key)
     self.assertRaises(TypeError, ctx.use_privatekey, "")
예제 #23
0
 def generateKey(self,directory = "D:\\test",bits=1024):
     pk = PKey()
     pk.generate_key(TYPE_RSA, bits)
     with open (directory+'\pubkey.pem', mode='wb') as f:
         f.write(dump_publickey(FILETYPE_PEM, pk))
         f.close()
     with open (directory+'\prikey.pem', mode='wb') as f:
         f.write(dump_privatekey(FILETYPE_PEM, pk))
         f.close()
예제 #24
0
 def test_rsaGeneration(self):
     """
     L{PKeyType.generate_key} generates an RSA key when passed
     L{TYPE_RSA} as a type and a reasonable number of bits.
     """
     bits = 128
     key = PKey()
     key.generate_key(TYPE_RSA, bits)
     self.assertEqual(key.type(), TYPE_RSA)
     self.assertEqual(key.bits(), bits)
예제 #25
0
 def test_regeneration(self):
     """
     L{PKeyType.generate_key} can be called multiple times on the same
     key to generate new keys.
     """
     key = PKey()
     for type, bits in [(TYPE_RSA, 512), (TYPE_DSA, 576)]:
          key.generate_key(type, bits)
          self.assertEqual(key.type(), type)
          self.assertEqual(key.bits(), bits)
예제 #26
0
 def test_signWithPublicKey(self):
     """
     L{X509Req.sign} raises L{ValueError} when pass a L{PKey} with no
     private part as the signing key.
     """
     request = self.signable()
     key = PKey()
     key.generate_key(TYPE_RSA, 512)
     request.set_pubkey(key)
     pub = request.get_pubkey()
     self.assertRaises(ValueError, request.sign, pub, 'MD5')
예제 #27
0
def createDGPairs(username):
    private_path = 'private/'
    public_path = 'public/'
    private_path += username
    public_path += username
    P = PKey()
    P.generate_key(TYPE_RSA, 1024)
    #写入
    with open(public_path,'w') as f:
        f.write(dump_publickey(FILETYPE_PEM, P).decode('utf-8'))
    with open(private_path,'w') as f:
        f.write(dump_privatekey(FILETYPE_PEM, P).decode('utf-8'))
예제 #28
0
파일: yy.py 프로젝트: TinBacon/ChatRoom
def createDGPairs(username):
    private_path = 'private/'
    public_path = 'public/'
    private_path += username
    public_path += username
    P = PKey()
    P.generate_key(TYPE_RSA, 1024)
    #写入
    with open(public_path, 'w') as f:
        f.write(dump_publickey(FILETYPE_PEM, P).decode('utf-8'))
    with open(private_path, 'w') as f:
        f.write(dump_privatekey(FILETYPE_PEM, P).decode('utf-8'))
예제 #29
0
파일: crypto.py 프로젝트: smurfix/pyopenssl
 def check_success(self):
     """
     Call the method repeatedly such that it will return a PKey object.
     """
     small = xrange(3)
     for i in xrange(self.iterations):
         key = PKey()
         key.generate_key(TYPE_DSA, 256)
         for i in small:
             cert = X509()
             cert.set_pubkey(key)
             for i in small:
                 cert.get_pubkey()
예제 #30
0
파일: cert.py 프로젝트: andrewcooke/n3
def create_session_cert(cacert, cakey, cn='localhost', serial=1):
    LOG.debug('Creating session certificate')
    key = PKey()
    key.generate_key(TYPE_RSA, 1024)
    cert = X509()
    cert.get_subject().CN = cn
    cert.set_serial_number(serial)
    cert.gmtime_adj_notBefore(0)
    cert.gmtime_adj_notAfter(365*24*60*60)
    cert.set_issuer(cacert.get_subject())
    cert.set_pubkey(key)
    cert.sign(cakey, 'sha1')
    return cert, key
예제 #31
0
 def test_dsaGeneration(self):
     """
     L{PKeyType.generate_key} generates a DSA key when passed
     L{TYPE_DSA} as a type and a reasonable number of bits.
     """
     # 512 is a magic number.  The DSS (Digital Signature Standard)
     # allows a minimum of 512 bits for DSA.  DSA_generate_parameters
     # will silently promote any value below 512 to 512.
     bits = 512
     key = PKey()
     key.generate_key(TYPE_DSA, bits)
     self.assertEqual(key.type(), TYPE_DSA)
     self.assertEqual(key.bits(), bits)
예제 #32
0
 def check_success(self):
     """
     Call the method repeatedly such that it will return a PKey object.
     """
     small = xrange(3)
     for i in xrange(self.iterations):
         key = PKey()
         key.generate_key(TYPE_DSA, 256)
         for i in small:
             cert = X509()
             cert.set_pubkey(key)
             for i in small:
                 cert.get_pubkey()
예제 #33
0
def make_certificate(
    ca_crt_path = 'ca.crt',
    ca_key_path = 'ca.key',
    server_crt_path = 'server.crt',
    server_key_path  = 'server.key',
    vars=None):

    # make the certificat of CA
    # need passphrase ?
    ca_key = PKey()
    ca_key.generate_key(TYPE_RSA, 1024)
    dump_write(dump_privatekey(FILETYPE_PEM, ca_key),
               ca_key_path)

    # MAKE THE CA SELF-SIGNED CERTIFICATE
    cert =  X509()
    sub = cert.get_subject()
    set_x509_ca(sub, vars=vars)

    #FORMAT : YYYYMMDDhhmmssZ
    after =  '20200101000000Z'
    before = '20090101000000Z'
    cert.set_notAfter(after)
    cert.set_notBefore(before)

    cert.set_serial_number(1)
    cert.set_pubkey(ca_key)
    cert.set_issuer(cert.get_subject())

    cert.sign(ca_key,"MD5")
    dump_write(dump_certificate(FILETYPE_PEM, cert),
               ca_crt_path)
    print "Generated CA certificate in %s" % ca_crt_path

    # MAKE THE SERVER CERTIFICATE
    s_key = PKey()
    s_key.generate_key(TYPE_RSA, 1024)
    dump_write(dump_privatekey(FILETYPE_PEM, s_key),
               server_key_path)
    s_cert = X509()
    s_sub = s_cert.get_subject()
    set_x509_serv(s_sub, vars=vars)

    #FORMAT : YYYYMMDDhhmmssZ
    after =  '20200101000000Z'
    before = '20090101000000Z'
    s_cert.set_notAfter(after)
    s_cert.set_notBefore(before)

    s_cert.set_serial_number(2)
    s_cert.set_pubkey(s_key)
    s_cert.set_issuer(cert.get_subject())

    s_cert.sign(ca_key,"MD5")
    dump_write(dump_certificate(FILETYPE_PEM, s_cert),
               server_crt_path)
    print "Generated Server certificate in %s" % server_crt_path
    for p in [ca_key_path, server_key_path]:
        os.chmod(p, 0600)
예제 #34
0
def make_certs_and_key(device_public_key: bytes):
    priv_key = PKey()
    priv_key.generate_key(TYPE_RSA, 2048)

    req = make_req(priv_key)
    cert = make_cert(req, priv_key)

    dev_key = load_publickey(PEM,
                             convert_PKCS1_to_PKCS8_pubkey(device_public_key))
    dev_key._only_public = False
    dev_req = make_req(dev_key, 'Device')
    dev_cert = make_cert(dev_req, priv_key)

    return dump_certificate(PEM, cert), dump_privatekey(
        PEM, priv_key), dump_certificate(PEM, dev_cert)
예제 #35
0
def test(request):
    pk = PKey()

    pk.generate_key(TYPE_RSA, 512)

    pri_key = dump_privatekey(FILETYPE_PEM, pk)  # 生成私钥

    pub_key = dump_publickey(FILETYPE_PEM, pk)  # 生成公钥

    dic = {}
    dic["pri_key"] = pri_key.decode()
    dic["pub_key"] = pub_key.decode()
    print(type(pri_key))
    print(dic)
    return HttpResponse(json.dumps(dic, ensure_ascii=False), content_type="application/json")  # 返回公私钥
예제 #36
0
def generate_key():
    pk = PKey()
    pk.generate_key(TYPE_RSA, 2048)
    # 生成公钥文件
    public_key = dump_publickey(FILETYPE_PEM, pk)
    public_key_path = os.path.join(os.path.dirname(__file__), 'public_key.pem')
    file_public_key = open(public_key_path, 'wb')
    file_public_key.write(public_key)
    file_public_key.close()
    # 生成私钥文件
    private_key = dump_privatekey(FILETYPE_PEM, pk)
    private_key_path = os.path.join(os.path.dirname(__file__),
                                    'private_key.pem')
    file_private_key = open(private_key_path, 'wb')
    file_private_key.write(private_key)
    file_private_key.close()
예제 #37
0
    def _generate_ca(self):
        # Generate key
        self.key = PKey()
        self.key.generate_key(TYPE_RSA, 2048)

        # Generate certificate
        self.cert = X509()
        self.cert.set_version(3)
        self.cert.set_serial_number(1)
        self.cert.get_subject().CN = 'Namecoin .bit proxy'
        self.cert.gmtime_adj_notBefore(0)
        self.cert.gmtime_adj_notAfter(315360000)
        self.cert.set_issuer(self.cert.get_subject())
        self.cert.set_pubkey(self.key)
        self.cert.add_extensions([
            X509Extension("basicConstraints", True, "CA:TRUE, pathlen:0"),
            X509Extension("keyUsage", True, "keyCertSign, cRLSign"),
            X509Extension("subjectKeyIdentifier", False, "hash", subject=self.cert),
            ])
        self.cert.sign(self.key, "sha256")

        with open(self.ca_file, 'wb+') as f:
            f.write(dump_privatekey(self.filetype, self.key))
            f.write(dump_certificate(self.filetype, self.cert))

        # export for Windows
        with open("ca.crt", 'wb+') as f:
            f.write(dump_certificate(self.filetype, self.cert))
예제 #38
0
    def _gen_ca(self,again=False):
        # Generate key
        #如果证书存在而且不是强制生成,直接返回证书信息
        if os.path.exists(self.ca_file_path) and os.path.exists(self.cert_file_path) and not again:
            self._read_ca(self.ca_file_path) #读取证书信息
            return
        self.key = PKey()
        self.key.generate_key(TYPE_RSA, 2048)
        # Generate certificate
        self.cert = X509()
        self.cert.set_version(2)
        self.cert.set_serial_number(1)
        self.cert.get_subject().CN = 'baseproxy'
        self.cert.gmtime_adj_notBefore(0)
        self.cert.gmtime_adj_notAfter(315360000)
        self.cert.set_issuer(self.cert.get_subject())
        self.cert.set_pubkey(self.key)
        self.cert.add_extensions([
            X509Extension(b"basicConstraints", True, b"CA:TRUE, pathlen:0"),
            X509Extension(b"keyUsage", True, b"keyCertSign, cRLSign"),
            X509Extension(b"subjectKeyIdentifier", False, b"hash", subject=self.cert),
        ])
        self.cert.sign(self.key, "sha256")
        with open(self.ca_file_path, 'wb+') as f:
            f.write(dump_privatekey(FILETYPE_PEM, self.key))
            f.write(dump_certificate(FILETYPE_PEM, self.cert))

        with open(self.cert_file_path, 'wb+') as f:
            f.write(dump_certificate(FILETYPE_PEM, self.cert))
예제 #39
0
def makeCertificate(**kw):
    keypair = PKey()
    keypair.generate_key(TYPE_RSA, 1024)

    certificate = X509()
    certificate.gmtime_adj_notBefore(0)
    certificate.gmtime_adj_notAfter(60 * 60 * 24 * 365)  # One year
    for xname in certificate.get_issuer(), certificate.get_subject():
        for (k, v) in kw.items():
            setattr(xname, k, v)

    certificate.set_serial_number(counter())
    certificate.set_pubkey(keypair)
    certificate.sign(keypair, "md5")

    return keypair, certificate
예제 #40
0
def makeCertificate(**kw):
    keypair = PKey()
    keypair.generate_key(TYPE_RSA, 512)

    certificate = X509()
    certificate.gmtime_adj_notBefore(0)
    certificate.gmtime_adj_notAfter(60 * 60 * 24 * 365) # One year
    for xname in certificate.get_issuer(), certificate.get_subject():
        for (k, v) in kw.items():
            setattr(xname, k, v)

    certificate.set_serial_number(counter())
    certificate.set_pubkey(keypair)
    certificate.sign(keypair, "md5")

    return keypair, certificate
    def _generate_ca(self):
        '''
        This function generates the certificate authority file
        '''
        # Generate key
        self.key = PKey()
        self.key.generate_key(TYPE_RSA, 2048)

        # Generate certificate
        self.cert = X509()
        self.cert.set_version(3)
        self.cert.set_serial_number(1)
        self.cert.get_subject().CN = 'ca.mitm.com'
        self.cert.gmtime_adj_notBefore(0)
        self.cert.gmtime_adj_notAfter(315360000)
        self.cert.set_issuer(self.cert.get_subject())
        self.cert.set_pubkey(self.key)
        self.cert.add_extensions([
            X509Extension("basicConstraints", True, "CA:TRUE, pathlen:0"),
            X509Extension("keyUsage", True, "keyCertSign, cRLSign"),
            X509Extension("subjectKeyIdentifier", False, "hash", subject=self.cert),
            ])
        self.cert.sign(self.key, "sha1")

        with open(self.ca_file, 'wb+') as f:
            f.write(dump_privatekey(FILETYPE_PEM, self.key))
            f.write(dump_certificate(FILETYPE_PEM, self.cert))
예제 #42
0
파일: cert.py 프로젝트: andrewcooke/n3
def create_self_signed_cacert():
    LOG.debug('Creating CA certificate')
    cakey = PKey()
    cakey.generate_key(TYPE_RSA, 1024)
    cacert = X509()
    cacert.get_subject().CN = 'n3'
    cacert.set_serial_number(1)
    cacert.gmtime_adj_notBefore(0)
    cacert.gmtime_adj_notAfter(365*24*60*60)
    cacert.set_issuer(cacert.get_subject())
    cacert.set_pubkey(cakey)
    cacert.add_extensions([
            X509Extension(b'basicConstraints', True, b'CA:TRUE, pathlen:0'),
            X509Extension(b'keyUsage', True, b'keyCertSign, cRLSign'),
            X509Extension(b'subjectKeyIdentifier', False, b'hash', subject=cacert)])
    cacert.sign(cakey, 'sha1')
    return cacert, cakey
예제 #43
0
    def _create_self_signed_cert(self):
        key = None
        cert = None

        if exists(self._key_path):
            try:
                with open(self._key_path, 'r') as key_file:
                    key = load_privatekey(FILETYPE_PEM, key_file.read())
            except crypto_error:
                pass

        if exists(self._cert_path):
            try:
                with open(self._cert_path, 'r') as cert_file:
                    cert = load_certificate(FILETYPE_PEM, cert_file.read())
            except crypto_error:
                pass

        if key is None:
            key = PKey()
            key.generate_key(TYPE_RSA, 2048)
            if not exists(dirname(self._key_path)):
                makedirs(dirname(self._key_path))
            with open(self._key_path, "w") as key_file:
                key_file.write(
                    dump_privatekey(FILETYPE_PEM, key))

        if cert is None:
            cert = X509()
            cert.get_subject().C = "US"
            cert.get_subject().ST = "California"
            cert.get_subject().L = "Palo Alto"
            cert.get_subject().O = "Juniper Networks"
            cert.get_subject().OU = "Contrail"
            cert.get_subject().CN = "Contrail's IF-MAP v2"
            cert.set_serial_number(1)
            cert.gmtime_adj_notBefore(0)
            cert.gmtime_adj_notAfter(10*365*24*60*60)  # Ten years
            cert.set_issuer(cert.get_subject())
            cert.set_pubkey(key)
            cert.sign(key, 'sha1')

            if not exists(dirname(self._cert_path)):
                makedirs(dirname(self._cert_path))
            with open(self._cert_path, 'w') as cert_file:
                cert_file.write(dump_certificate(FILETYPE_PEM, cert))
예제 #44
0
파일: CS.py 프로젝트: sfayer/cert_sorcerer
 def create_csr(store,
                dn_cn,
                hostcert,
                sans = None,
                dn_ou = CS_DEF_RA_OU,
                dn_l = CS_DEF_RA_L,
                dn_o = CS_DEF_CA_O,
                dn_c = CS_DEF_CA_C,
                email = CS_DEF_EMAIL,
                keybits = CS_DEF_KEYBITS,
                ):
   """ Create a CSR PEM string for the given parameters. """
   if not store.get_state() == CS_Const.Nothing:
     raise Exception("Certificate in wrong state to create new CSR.")
   # Generate a key
   key = PKey()
   key.generate_key(crypto.TYPE_RSA, keybits)
   # Generate a CSR
   csr = X509Req()
   csr.set_pubkey(key)
   dn = csr.get_subject()
   dn.CN = dn_cn
   dn.OU = dn_ou
   dn.L = dn_l
   dn.O = dn_o
   dn.C = dn_c
   # Create the relevant extension
   if hostcert:
     ext_details = ["DNS:%s" % dn_cn]
   else:
     ext_details = ["email:%s" % email]
   if sans:
     ext_details.extend(sans)
   ext = X509Extension("subjectAltName", False, ','.join(ext_details))
   csr.add_extensions([ext])
   csr.sign(key, "md5")
   # Convert the CSR & KEY to PEM files
   key_pem = crypto.dump_privatekey(crypto.FILETYPE_PEM, key)
   csr_pem = crypto.dump_certificate_request(crypto.FILETYPE_PEM, csr)
   # Write them out to the store
   store.write(CS_Const.KEY_FILE, key_pem, CS_DEF_KEYPERMS)
   store.write(CS_Const.CSR_FILE, csr_pem, CS_DEF_CSRPERMS)
   # Just to be 100% sure everything is compabile...
   # ... Ensure the key is in PKCS#1 format
   CS_CertTools.pkcs8_to_pkcs1(store.get_path(CS_Const.KEY_FILE))
예제 #45
0
    def _create_self_signed_cert(self):
        key = None
        cert = None

        if exists(self._key_path):
            try:
                with open(self._key_path, "r") as key_file:
                    key = load_privatekey(FILETYPE_PEM, key_file.read())
            except crypto_error:
                pass

        if exists(self._cert_path):
            try:
                with open(self._cert_path, "r") as cert_file:
                    cert = load_certificate(FILETYPE_PEM, cert_file.read())
            except crypto_error:
                pass

        if key is None:
            key = PKey()
            key.generate_key(TYPE_RSA, 2048)
            if not exists(dirname(self._key_path)):
                makedirs(dirname(self._key_path))
            with open(self._key_path, "w") as key_file:
                key_file.write(dump_privatekey(FILETYPE_PEM, key))

        if cert is None:
            cert = X509()
            cert.get_subject().C = "US"
            cert.get_subject().ST = "California"
            cert.get_subject().L = "Palo Alto"
            cert.get_subject().O = "Juniper Networks"
            cert.get_subject().OU = "Contrail"
            cert.get_subject().CN = "Contrail's IF-MAP v2"
            cert.set_serial_number(1)
            cert.gmtime_adj_notBefore(0)
            cert.gmtime_adj_notAfter(10 * 365 * 24 * 60 * 60)  # Ten years
            cert.set_issuer(cert.get_subject())
            cert.set_pubkey(key)
            cert.sign(key, "sha1")

            if not exists(dirname(self._cert_path)):
                makedirs(dirname(self._cert_path))
            with open(self._cert_path, "w") as cert_file:
                cert_file.write(dump_certificate(FILETYPE_PEM, cert))
예제 #46
0
def get_user_id(private_key, cert_path):
    if os.path.exists(private_key):
        with open(private_key) as fd:
            key = load_privatekey(FILETYPE_PEM, fd.read())
        if key.bits() != 1024:
            os.unlink(private_key)
        else:
            user_id = get_service_id(private_key)
    if not os.path.exists(private_key):
        if os.path.exists(cert_path):
            os.unlink(cert_path)
        folder = os.path.dirname(private_key)
        if not os.path.exists(folder):
            os.makedirs(folder)
            os.chmod(folder, 0o700)
        key = PKey()
        key.generate_key(TYPE_RSA, 1024)
        with open(private_key, 'wb') as fd:
            os.chmod(private_key, 0o600)
            fd.write(dump_privatekey(FILETYPE_PEM, key))
            os.chmod(private_key, 0o400)
        user_id = get_service_id(private_key)
    if not os.path.exists(cert_path):
        ca = X509()
        ca.set_version(2)
        ca.set_serial_number(1)
        ca.get_subject().CN = user_id
        ca.gmtime_adj_notBefore(0)
        ca.gmtime_adj_notAfter(24 * 60 * 60)
        ca.set_issuer(ca.get_subject())
        ca.set_pubkey(key)
        ca.add_extensions([
            X509Extension(b"basicConstraints", True, b"CA:TRUE, pathlen:0"),
            X509Extension(b"nsCertType", True, b"sslCA"),
            X509Extension(
                b"extendedKeyUsage", True,
                b"serverAuth,clientAuth,emailProtection,timeStamping,msCodeInd,msCodeCom,msCTLSign,msSGC,msEFS,nsSGC"
            ),
            X509Extension(b"keyUsage", False, b"keyCertSign, cRLSign"),
            X509Extension(b"subjectKeyIdentifier", False, b"hash", subject=ca),
        ])
        ca.sign(key, "sha256")
        with open(cert_path, 'wb') as fd:
            fd.write(dump_certificate(FILETYPE_PEM, ca))
    return user_id
def create_csr_key(subject):
    key = PKey()
    key.generate_key(TYPE_RSA, 2048)

    req = X509Req()
    req.get_subject().CN = subject['CN']
    req.get_subject().O = subject['O']  # noqa: E741
    req.get_subject().OU = subject['OU']
    req.get_subject().L = subject['L']
    req.get_subject().ST = subject['ST']
    req.get_subject().C = subject['C']
    req.set_pubkey(key)
    req.sign(key, 'sha256')

    csr = dump_certificate_request(FILETYPE_PEM, req)
    privatekey = dump_privatekey(FILETYPE_PEM, key).decode('utf-8')

    return csr, privatekey
예제 #48
0
def get_user_id(private_key, cert_path):
    if os.path.exists(private_key):
        with open(private_key) as fd:
            key = load_privatekey(FILETYPE_PEM, fd.read())
        if key.bits() != 1024:
            os.unlink(private_key)
        else:
            user_id = get_service_id(private_key)
    if not os.path.exists(private_key):
        if os.path.exists(cert_path):
            os.unlink(cert_path)
        folder = os.path.dirname(private_key)
        if not os.path.exists(folder):
            os.makedirs(folder)
            os.chmod(folder, 0o700)
        key = PKey()
        key.generate_key(TYPE_RSA, 1024)
        with open(private_key, 'wb') as fd:
            os.chmod(private_key, 0o600)
            fd.write(dump_privatekey(FILETYPE_PEM, key))
            os.chmod(private_key, 0o400)
        user_id = get_service_id(private_key)
    if not os.path.exists(cert_path):
        ca = X509()
        ca.set_version(2)
        ca.set_serial_number(1)
        ca.get_subject().CN = user_id
        ca.gmtime_adj_notBefore(0)
        ca.gmtime_adj_notAfter(24 * 60 * 60)
        ca.set_issuer(ca.get_subject())
        ca.set_pubkey(key)
        ca.add_extensions([
          X509Extension(b"basicConstraints", True, b"CA:TRUE, pathlen:0"),
          X509Extension(b"nsCertType", True, b"sslCA"),
          X509Extension(b"extendedKeyUsage", True,
            b"serverAuth,clientAuth,emailProtection,timeStamping,msCodeInd,msCodeCom,msCTLSign,msSGC,msEFS,nsSGC"),
          X509Extension(b"keyUsage", False, b"keyCertSign, cRLSign"),
          X509Extension(b"subjectKeyIdentifier", False, b"hash", subject=ca),
        ])
        ca.sign(key, "sha256")
        with open(cert_path, 'wb') as fd:
            fd.write(dump_certificate(FILETYPE_PEM, ca))
    return user_id
예제 #49
0
    def setup_class(cls):
        cls.intermediate_cert = load_certificate(FILETYPE_PEM, cls.intermediate_certificate_pem)
        cls.pub_cert = load_certificate(FILETYPE_PEM, cls.apple_root_cert_pem)
        cls.priv_key = load_privatekey(FILETYPE_PEM, cls._root_key_pem)

        cls.priv_key_spoof = PKey()
        cls.priv_key_spoof.generate_key(TYPE_RSA, 1024)

        cls.pub_cert_spoof = X509()
        cls.pub_cert_spoof.set_pubkey(cls.priv_key_spoof)
예제 #50
0
def create_self_signed_cert(cert_file_path):
    private_key_path = re.sub(r".(pem|crt)$",
                              ".key",
                              cert_file_path,
                              flags=re.IGNORECASE)

    # create public/private key
    key = PKey()
    key.generate_key(TYPE_RSA, 2048)

    # Self-signed cert
    cert = X509()

    #subject = X509Name(cert.get_subject())
    subject = cert.get_subject()
    subject.CN = 'localhost'
    subject.O = 'XYZ Widgets Inc'
    subject.OU = 'IT Department'
    subject.L = 'Seattle'
    subject.ST = 'Washington'
    subject.C = 'US'
    subject.emailAddress = '*****@*****.**'

    cert.set_version(2)
    cert.set_issuer(subject)
    cert.set_subject(subject)
    #cert.set_serial_number(int(os.urandom(16).encode('hex'),16))
    cert.set_serial_number(int(rand.bytes(16).encode('hex'), 16))
    cert.gmtime_adj_notBefore(0)
    cert.gmtime_adj_notAfter(31536000)
    cert.set_pubkey(key)
    cert.add_extensions([
        X509Extension("basicConstraints", True, "CA:TRUE, pathlen:0"),
        X509Extension("keyUsage", True, "keyCertSign, cRLSign"),
        X509Extension("subjectKeyIdentifier", False, "hash", subject=cert),
    ])
    cert.sign(key, 'sha256')

    with open(cert_file_path, 'wb+') as f:
        f.write(dump_certificate(FILETYPE_PEM, cert))
    with open(private_key_path, 'wb+') as f:
        f.write(dump_privatekey(FILETYPE_PEM, key))
def otherMakeCertificate(**kw):
    keypair = PKey()
    keypair.generate_key(TYPE_RSA, 1024)

    req = X509Req()
    subj = req.get_subject()
    for (k, v) in kw.items():
        setattr(subj, k, v)

    req.set_pubkey(keypair)
    req.sign(keypair, "md5")

    cert = X509()
    cert.set_serial_number(counter())
    cert.gmtime_adj_notBefore(0)
    cert.gmtime_adj_notAfter(60 * 60 * 24 * 365) # One year

    cert.set_issuer(req.get_subject())
    cert.set_subject(req.get_subject())
    cert.set_pubkey(req.get_pubkey())
    cert.sign(keypair, "md5")

    return keypair, cert
예제 #52
0
파일: test_ssl.py 프로젝트: dreamwave/rad
    def test_set_passwd_cb(self):
        """
        L{Context.set_passwd_cb} accepts a callable which will be invoked when
        a private key is loaded from an encrypted PEM.
        """
        key = PKey()
        key.generate_key(TYPE_RSA, 128)
        pemFile = self.mktemp()
        fObj = file(pemFile, 'w')
        passphrase = "foobar"
        fObj.write(dump_privatekey(FILETYPE_PEM, key, "blowfish", passphrase))
        fObj.close()

        calledWith = []
        def passphraseCallback(maxlen, verify, extra):
            calledWith.append((maxlen, verify, extra))
            return passphrase
        context = Context(TLSv1_METHOD)
        context.set_passwd_cb(passphraseCallback)
        context.use_privatekey_file(pemFile)
        self.assertTrue(len(calledWith), 1)
        self.assertTrue(isinstance(calledWith[0][0], int))
        self.assertTrue(isinstance(calledWith[0][1], int))
        self.assertEqual(calledWith[0][2], None)
예제 #53
0
def create_ssl_context(cert_byes, pk_bytes, password=None,
                       encoding=Encoding.PEM):
    """Create an SSL Context with the supplied cert/password.

    :param cert_bytes array of bytes containing the cert encoded
           using the method supplied in the ``encoding`` parameter
    :param pk_bytes array of bytes containing the private key encoded
           using the method supplied in the ``encoding`` parameter
    :param password array of bytes containing the passphrase to be used
           with the supplied private key. None if unencrypted.
           Defaults to None.
    :param encoding ``cryptography.hazmat.primitives.serialization.Encoding``
            details the encoding method used on the ``cert_bytes``  and
            ``pk_bytes`` parameters. Can be either PEM or DER.
            Defaults to PEM.
    """
    backend = default_backend()

    cert = None
    key = None
    if encoding == Encoding.PEM:
        cert = x509.load_pem_x509_certificate(cert_byes, backend)
        key = load_pem_private_key(pk_bytes, password, backend)
    elif encoding == Encoding.DER:
        cert = x509.load_der_x509_certificate(cert_byes, backend)
        key = load_der_private_key(pk_bytes, password, backend)
    else:
        raise ValueError('Invalid encoding provided: Must be PEM or DER')

    if not (cert and key):
        raise ValueError('Cert and key could not be parsed from '
                         'provided data')
    check_cert_dates(cert)
    ssl_context = PyOpenSSLContext(PROTOCOL)
    ssl_context._ctx.use_certificate(X509.from_cryptography(cert))
    ssl_context._ctx.use_privatekey(PKey.from_cryptography_key(key))
    return ssl_context
예제 #54
0
def generate_rsa():
    keys = []
    for i in range(100):
        key = PKey()
        key.generate_key(TYPE_RSA, 1024)
        keys.append(key)
예제 #55
0
파일: child.py 프로젝트: jameshilliard/treq
def _certificates_for_authority_and_server(service_identity, key_size=1024):
    """
    Create a self-signed CA certificate and server certificate signed
    by the CA.

    :param service_identity: The identity (hostname) of the server.
    :type service_identity: :py:class:`unicode`

    :param key_size: (optional) The size of CA's and server's private
        RSA keys.  Defaults to 1024 bits, which is the minimum allowed
        by OpenSSL Contexts at the default security level as of 1.1.
    :type key_size: :py:class:`int`

    :return: a 3-tuple of ``(certificate_authority_certificate,
             server_private_key, server_certificate)``.
    :rtype: :py:class:`tuple` of (:py:class:`sslverify.Certificate`,
            :py:class:`OpenSSL.crypto.PKey`,
            :py:class:`OpenSSL.crypto.X509`)
    """
    common_name_for_ca = x509.Name(
        [x509.NameAttribute(NameOID.COMMON_NAME, u'Testing Example CA')]
    )
    common_name_for_server = x509.Name(
        [x509.NameAttribute(NameOID.COMMON_NAME, u'Testing Example Server')]
    )
    one_day = datetime.timedelta(1, 0, 0)
    private_key_for_ca = rsa.generate_private_key(
        public_exponent=65537,
        key_size=key_size,
        backend=default_backend()
    )
    public_key_for_ca = private_key_for_ca.public_key()
    ca_certificate = (
        x509.CertificateBuilder()
        .subject_name(common_name_for_ca)
        .issuer_name(common_name_for_ca)
        .not_valid_before(datetime.datetime.today() - one_day)
        .not_valid_after(datetime.datetime.today() + one_day)
        .serial_number(x509.random_serial_number())
        .public_key(public_key_for_ca)
        .add_extension(
            x509.BasicConstraints(ca=True, path_length=9), critical=True,
        )
        .sign(
            private_key=private_key_for_ca, algorithm=hashes.SHA256(),
            backend=default_backend()
        )
    )
    private_key_for_server = rsa.generate_private_key(
        public_exponent=65537,
        key_size=key_size,
        backend=default_backend()
    )
    public_key_for_server = private_key_for_server.public_key()
    server_certificate = (
        x509.CertificateBuilder()
        .subject_name(common_name_for_server)
        .issuer_name(common_name_for_ca)
        .not_valid_before(datetime.datetime.today() - one_day)
        .not_valid_after(datetime.datetime.today() + one_day)
        .serial_number(x509.random_serial_number())
        .public_key(public_key_for_server)
        .add_extension(
            x509.BasicConstraints(ca=False, path_length=None), critical=True,
        )
        .add_extension(
            x509.SubjectAlternativeName(
                [x509.DNSName(service_identity)]
            ),
            critical=True,
        )
        .sign(
            private_key=private_key_for_ca, algorithm=hashes.SHA256(),
            backend=default_backend()
        )
    )

    ca_self_cert = Certificate.loadPEM(
        ca_certificate.public_bytes(Encoding.PEM)
    )

    pkey = PKey.from_cryptography_key(private_key_for_server)
    x509_server_certificate = X509.from_cryptography(server_certificate)

    return ca_self_cert, pkey, x509_server_certificate
예제 #56
0
class CAAuth(object):
    '''
    用于CA证书的生成以及代理证书的自签名

    '''
    def __init__(self,ca_file = "ca.pem", cert_file = 'ca.crt'):
        self.ca_file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),ca_file)
        self.cert_file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), cert_file)
        self._gen_ca()#生成CA证书,需要添加到浏览器的合法证书机构中

    def _gen_ca(self,again=False):
        # Generate key
        #如果证书存在而且不是强制生成,直接返回证书信息
        if os.path.exists(self.ca_file_path) and os.path.exists(self.cert_file_path) and not again:
            self._read_ca(self.ca_file_path) #读取证书信息
            return
        self.key = PKey()
        self.key.generate_key(TYPE_RSA, 2048)
        # Generate certificate
        self.cert = X509()
        self.cert.set_version(2)
        self.cert.set_serial_number(1)
        self.cert.get_subject().CN = 'baseproxy'
        self.cert.gmtime_adj_notBefore(0)
        self.cert.gmtime_adj_notAfter(315360000)
        self.cert.set_issuer(self.cert.get_subject())
        self.cert.set_pubkey(self.key)
        self.cert.add_extensions([
            X509Extension(b"basicConstraints", True, b"CA:TRUE, pathlen:0"),
            X509Extension(b"keyUsage", True, b"keyCertSign, cRLSign"),
            X509Extension(b"subjectKeyIdentifier", False, b"hash", subject=self.cert),
        ])
        self.cert.sign(self.key, "sha256")
        with open(self.ca_file_path, 'wb+') as f:
            f.write(dump_privatekey(FILETYPE_PEM, self.key))
            f.write(dump_certificate(FILETYPE_PEM, self.cert))

        with open(self.cert_file_path, 'wb+') as f:
            f.write(dump_certificate(FILETYPE_PEM, self.cert))

    def _read_ca(self, file):
        self.cert = load_certificate(FILETYPE_PEM, open(file,'rb').read())
        self.key = load_privatekey(FILETYPE_PEM, open(file,'rb').read())

    def __getitem__(self, cn):
        #将为每个域名生成的服务器证书,放到临时目录中
        cache_dir  =gettempdir()
        root_dir = os.path.join(cache_dir,'baseproxy')
        if not os.path.exists(root_dir):
            os.makedirs(root_dir)

        cnp = os.path.join(root_dir,"baseproxy_{}.pem".format(cn))

        if not os.path.exists(cnp):
            self._sign_ca(cn,cnp)
        return cnp


    def _sign_ca(self,cn,cnp):
        #使用合法的CA证书为代理程序生成服务器证书
        # create certificate
        try:

            key = PKey()
            key.generate_key(TYPE_RSA, 2048)

            # Generate CSR
            req = X509Req()
            req.get_subject().CN = cn
            req.set_pubkey(key)
            req.sign(key, 'sha256')

            # Sign CSR
            cert = X509()
            cert.set_version(2)
            cert.set_subject(req.get_subject())
            cert.set_serial_number(self.serial)
            cert.gmtime_adj_notBefore(0)
            cert.gmtime_adj_notAfter(31536000)
            cert.set_issuer(self.cert.get_subject())
            ss = ("DNS:%s" % cn).encode(encoding="utf-8")

            cert.add_extensions(
                [X509Extension(b"subjectAltName", False, ss)])

            cert.set_pubkey(req.get_pubkey())
            cert.sign(self.key, 'sha256')

            with open(cnp, 'wb+') as f:
                f.write(dump_privatekey(FILETYPE_PEM, key))
                f.write(dump_certificate(FILETYPE_PEM, cert))
        except Exception as e:
            raise Exception("generate CA fail:{}".format(str(e)))


    @property
    def serial(self):
        return int("%d" % (time.time() * 1000))
예제 #57
0
def generate_dsa():
    keys = []
    for i in range(100):
        key = PKey()
        key.generate_key(TYPE_DSA, 512)
        keys.append(key)
class CertificateAuthority(object):

    def __init__(self, ca_file='ca.pem', cache_dir=gettempdir()):
        '''
        The constructor for making a certificate authority file
        '''
        self.ca_file = ca_file
        self.cache_dir = cache_dir
        self._serial = self._get_serial()
        if not path.exists(ca_file):
            self._generate_ca()
        else:
            self.readCertificateAuthorityFile(ca_file)

    def _get_serial(self):
        '''
        Makes sure that every certificate is associated with an unique serial number
        '''
        s = 1
        for c in filter(lambda x: x.startswith('.pymp_'), listdir(self.cache_dir)):
            c = load_certificate(FILETYPE_PEM, open(path.sep.join([self.cache_dir, c])).read())
            sc = c.get_serial_number()
            if sc > s:
                s = sc
            del c
        return s

    def _generate_ca(self):
        '''
        This function generates the certificate authority file
        '''
        # Generate key
        self.key = PKey()
        self.key.generate_key(TYPE_RSA, 2048)

        # Generate certificate
        self.cert = X509()
        self.cert.set_version(3)
        self.cert.set_serial_number(1)
        self.cert.get_subject().CN = 'ca.mitm.com'
        self.cert.gmtime_adj_notBefore(0)
        self.cert.gmtime_adj_notAfter(315360000)
        self.cert.set_issuer(self.cert.get_subject())
        self.cert.set_pubkey(self.key)
        self.cert.add_extensions([
            X509Extension("basicConstraints", True, "CA:TRUE, pathlen:0"),
            X509Extension("keyUsage", True, "keyCertSign, cRLSign"),
            X509Extension("subjectKeyIdentifier", False, "hash", subject=self.cert),
            ])
        self.cert.sign(self.key, "sha1")

        with open(self.ca_file, 'wb+') as f:
            f.write(dump_privatekey(FILETYPE_PEM, self.key))
            f.write(dump_certificate(FILETYPE_PEM, self.cert))

    def readCertificateAuthorityFile(self, file):
        '''
        Reads a CA file assuming it is already present and configured
        '''
        self.cert = load_certificate(FILETYPE_PEM, open(file).read())
        self.key = load_privatekey(FILETYPE_PEM, open(file).read())

    def __getitem__(self, cn):
        '''
        Gets the specified Certificate authority file if it already exists, else creates one!
        '''
        cnp = path.sep.join([self.cache_dir, '.pymp_%s.pem' % cn])
        if not path.exists(cnp):
            # create certificate
            key = PKey()
            key.generate_key(TYPE_RSA, 2048)

            # Generate CSR
            req = X509Req()
            req.get_subject().CN = cn
            req.set_pubkey(key)
            req.sign(key, 'sha1')

            # Sign CSR
            cert = X509()
            cert.set_subject(req.get_subject())
            cert.set_serial_number(self.serial)
            cert.gmtime_adj_notBefore(0)
            cert.gmtime_adj_notAfter(31536000)
            cert.set_issuer(self.cert.get_subject())
            cert.set_pubkey(req.get_pubkey())
            cert.sign(self.key, 'sha1')

            with open(cnp, 'wb+') as f:
                f.write(dump_privatekey(FILETYPE_PEM, key))
                f.write(dump_certificate(FILETYPE_PEM, cert))

        return cnp

    @property
    def serial(self):
        '''
        A static function which generates a unique serial number for every certificate
        '''
        self._serial += 1
        return self._serial
예제 #59
0
파일: s.py 프로젝트: lite/MyTestBox
class CertificateAuthority(object):

    def __init__(self, ca_file='ca.pem', cache_dir=gettempdir()):
        self.ca_file = ca_file
        self.cache_dir = cache_dir
        self._serial = self._get_serial()
        if not path.exists(ca_file):
            self._generate_ca()
        else:
            self._read_ca(ca_file)

    def _get_serial(self):
        s = 1
        for c in filter(lambda x: x.startswith('.pymp_'), listdir(self.cache_dir)):
            c = load_certificate(FILETYPE_PEM, open(path.sep.join([self.cache_dir, c])).read())
            sc = c.get_serial_number()
            if sc > s:
                s = sc
            del c
        return s

    def _generate_ca(self):
        # Generate key
        self.key = PKey()
        self.key.generate_key(TYPE_RSA, 2048)

        # Generate certificate
        self.cert = X509()
        self.cert.set_version(3)
        self.cert.set_serial_number(1)
        self.cert.get_subject().CN = 'ca.mitm.com'
        self.cert.gmtime_adj_notBefore(0)
        self.cert.gmtime_adj_notAfter(315360000)
        self.cert.set_issuer(self.cert.get_subject())
        self.cert.set_pubkey(self.key)
        self.cert.add_extensions([
            X509Extension("basicConstraints", True, "CA:TRUE, pathlen:0"),
            X509Extension("keyUsage", True, "keyCertSign, cRLSign"),
            X509Extension("subjectKeyIdentifier", False, "hash", subject=self.cert),
            ])
        self.cert.sign(self.key, "sha1")

        with open(self.ca_file, 'wb+') as f:
            f.write(dump_privatekey(FILETYPE_PEM, self.key))
            f.write(dump_certificate(FILETYPE_PEM, self.cert))

    def _read_ca(self, file):
        self.cert = load_certificate(FILETYPE_PEM, open(file).read())
        self.key = load_privatekey(FILETYPE_PEM, open(file).read())

    def __getitem__(self, cn):
        cnp = path.sep.join([self.cache_dir, '.pymp_%s.pem' % cn])
        if not path.exists(cnp):
            # create certificate
            key = PKey()
            key.generate_key(TYPE_RSA, 2048)

            # Generate CSR
            req = X509Req()
            req.get_subject().CN = cn
            req.set_pubkey(key)
            req.sign(key, 'sha1')

            # Sign CSR
            cert = X509()
            cert.set_subject(req.get_subject())
            cert.set_serial_number(self.serial)
            cert.gmtime_adj_notBefore(0)
            cert.gmtime_adj_notAfter(31536000)
            cert.set_issuer(self.cert.get_subject())
            cert.set_pubkey(req.get_pubkey())
            cert.sign(self.key, 'sha1')

            with open(cnp, 'wb+') as f:
                f.write(dump_privatekey(FILETYPE_PEM, key))
                f.write(dump_certificate(FILETYPE_PEM, cert))

        return cnp

    @property
    def serial(self):
        self._serial += 1
        return self._serial