So ein neues CA-Zertifikat mit diesem Code Ich versuche, das OpenSSL Crypto-Modul zu verwenden, erzeugen:OpenSSL.crypto.X509.sign() throws „‚Bytes‘Objekt kein Attribut‚kodieren‘hat“
#warning: this block is background information, probably not
#where my real problem is
#generate the key pair
key=OpenSSL.crypto.PKey()
key.generate_key(OpenSSL.crypto.TYPE_RSA,2048)
#print the private and public keys as PEMs
print(codecs.decode(OpenSSL.crypto.dump_publickey(OpenSSL.crypto.FILETYPE_PEM,key),'utf8'))
print(codecs.decode(OpenSSL.crypto.dump_privatekey(OpenSSL.crypto.FILETYPE_PEM,key),'utf8'))
#generate a new x509 certificate
ca=OpenSSL.crypto.X509()
#fill it with goodies
ca.set_version(3)
ca.set_serial_number(1)
ca.get_subject().CN = "CA.test.com"
ca.gmtime_adj_notBefore(0)
ca.gmtime_adj_notAfter(60 * 60 * 24 * 365 * 10)
ca.set_issuer(ca.get_subject())
ca.set_pubkey(key)
#print the new certificate as a PEM
print(codecs.decode(OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM,ca),'utf8'))
Das Zertifikat, das ausdruckt, dekodiert OK bei der SSLShopper certificate decoder, so dass ich ziemlich zuversichtlich bin über diesen Teil. Das Problem wirklich beginnt, wenn ich versuche, das Zertifikat zu signieren mit
ca.sign(key, 'sha1')
, weil ich eine bekommen „erwarteten Typ‚Bytes‘erwartet,‚str‘anstelle“ von der IDE. Überprüfen Sie die OpenSSL.crypto.X509.sign() Dokumentation und bestätigen Sie es wirklich ein Byte Objekt erwartet, wechseln Sie in
digestname='sha1'.encode('utf-8')
ca.sign(key, digestname)
und ich erhalte eine „Attribute:‚Bytes‘Objekt hat kein Attribut‚kodieren‘“ Ausnahme. Schreiten durch den Code finde ich die Ausnahme in OpenSSL._util.byte_string geworfen wird(), weil
if PY3:
def byte_string(s):
return s.encode("charmap")
else:
def byte_string(s):
return s
wo PY3 = True und s = {} Bytes b'sha1' , was natürlich keine .encode Methode hat.
So begann meine demoralisierende 'Bytes' vs 'str' Kampf. Ich möchte denken, dass ich nicht der Einzige bin, der dieses Problem hat, aber mein allerbester Google-Fu hat mich anders überzeugt. An diesem Punkt weiß ich nicht einmal, was ich sagen soll, um dieses herauszufinden.