2009-07-31 6 views
0

Mein kleiner Code-Schnipsel führt den folgenden Traceback:m2crypto wirft "Typeerror: in der Methode 'x509_req_set_pubkey'"

Traceback (most recent call last): 
    File "csr.py", line 48, in <module> 
    csr.create_cert_signing_request(pubkey, cert_name) 
    File "csr.py", line 17, in create_cert_signing_request 
    cert_request.set_pubkey(EVP.PKey(keypair)) 
    File "/usr/lib64/python2.6/site-packages/M2Crypto/X509.py", line 926, in set_pubkey 
    return m2.x509_req_set_pubkey(self.req, pkey.pkey) 
TypeError: in method 'x509_req_set_pubkey', argument 2 of type 'EVP_PKEY *' 

Hier sind meine zwei Python-Modulen:

from config import * 
from keypair import * 
from M2Crypto import X509 

class CSR(object): 
    def __init__(self): 
     pass 

    def create_cert_signing_request(keypair, cert_name, cert_extension_stack=None): 
     # create a certificate signing request object 
     cert_request = X509.Request() 

     # set certificate version to 3 
     cert_request.set_version(3) 

     # which rsa public key should be used? 
     cert_request.set_pubkey(EVP.PKey(keypair)) 

     # create an subject for the certificate request 
     cert_request.set_subject_name(cert_name) 

     if cert_extension_stack != None: 
      # add the extensions to the request 
      cert_request.add_extensions(cert_extension_stack) 

     # sign the request using the RSA key pair 
     cert_request.sign(keypair, 'sha1') 

     return cert_request 

if __name__ == "__main__": 
    csr = CSR() 
    cert_name = X509.X509_Name() 
    keyp = Keypair() 

    keyp.create_keypair() 
    keyp.save_keypair("host.key") 
    pubkey = keyp.get_keypair() 

    cert_name.C = "GB" 
    cert_name.ST = "Greater Manchester" 
    cert_name.L = "Salford" 
    cert_name.O = "COMODO CA Limited" 
    cert_name.CN = "COMODO Certification Authority" 
    cert_name.OU = "Information Technology" 
    cert_name.Email = "[email protected]" 

    csr.create_cert_signing_request(pubkey, cert_name) 


from M2Crypto import X509, m2, RSA, EVP 
from config import * 

class Keypair(object): 
    def __init__(self): 
     self.config = Config() 
     self.keypair = EVP.PKey() 

    def create_keypair(self): 
     # generate an RSA key pair 
     # OpenSSL book page 232 
     # second argument should be a constant RSA_F4 or RSA_3 
     rsa_key_pair = RSA.gen_key(int(self.config.get_attribute('CA','key_size')), m2.RSA_F4) 

     # check if RSA key pair is usable 
     # OpenSSL book page 232 
     if rsa_key_pair.check_key() != 1: 
      print 'error while generating key!' 
      sys.exit() 

     # EVP object which can hold either a DSA or an RSA object 
     # OpenSSL book page 236 
     evp_key_container = EVP.PKey() 
     evp_key_container.assign_rsa(rsa_key_pair) 

     self.keypair = evp_key_container 

    def save_keypair(self, filename): 
     self.keypair.save_key(filename, None) 

    def load_keypair(self, filename): 
     self.keypair = EVP.load_key(filename) 

    def get_keypair(self): 
     return self.keypair 

    def get_public_key(self): 
     return self.keypair.pkey 

    def print_keypair(self): 
     print self.keypair.as_pem(None) 

if __name__ == "__main__": 
    key = Keypair() 
    key.create_keypair() 
    key.save_keypair("test.key") 

    print key.get_keypair() 
    print key.get_public_key() 

Warum bin ich diesen TypeError bekommen ?

+0

Wenn i "cert_request.set_pubkey (EVP.PKey (Keypair))" cert_request.set_pubkey (Keypair) ändern, die ich erhalten statt: Traceback (jüngste Aufforderung zuletzt) : File "csr.py", Zeile 48, in csr.create_cert_signing_request (pubkey, cert_name) File "csr.py", Zeile 17, in create_cert_signing_request cert_request.set_pubkey (Keypair) Datei „/ usr/lib64 /python2.6/site-packages/M2Crypto/X509.py ", Zeile 926, in set_pubkey Rückgabe m2.x509_req_set_pubkey (self.req, pkey.pkey) AttributE rror: 'CSR' Objekt hat kein Attribut 'pkey' Das verwirrt mich noch mehr ... –

Antwort

0

Wenn ich "cert_request.set_pubkey (EVP.PKey (Keypair))" zu "cert_request.set_pubkey (Keypair)" ändern erhalte ich folgenden Traceback statt. Das verwirrt mich noch mehr ...

Traceback (most recent call last): 
    File "csr.py", line 48, in <module> 
    csr.create_cert_signing_request(pubkey, cert_name) 
    File "csr.py", line 17, in create_cert_signing_request 
    cert_request.set_pubkey(keypair) 
    File "/usr/lib64/python2.6/site-packages/M2Crypto/X509.py", line 926, in set_pubkey 
    return m2.x509_req_set_pubkey(self.req, pkey.pkey) 
AttributeError: 'CSR' object has no attribute 'pkey' 
Verwandte Themen