Author: dsahlberg Date: Sat Jun 21 13:29:19 2025 New Revision: 1926623 URL: http://svn.apache.org/viewvc?rev=1926623&view=rev Log: Make script compatible with Py3.
* test/certs/create_certs.py (create_key): decode string when writing to file (create_pkcs12): write file in binary mode (create_crl): make sure arguments to crypto.Revoked().* are in ascii, write the exported file in binary (create_cert): crypto.X509Extension wants parameters in ascii, decode the dumped certificate as utf-8 befor writing to file (__main__): create_cert wants the passphrase as a byte array in ascii. Patch by: Graham Leggett <minfrin> Part of GitHub PR #7: https://github.com/apache/serf/pull/7 Modified: serf/trunk/test/certs/create_certs.py Modified: serf/trunk/test/certs/create_certs.py URL: http://svn.apache.org/viewvc/serf/trunk/test/certs/create_certs.py?rev=1926623&r1=1926622&r2=1926623&view=diff ============================================================================== --- serf/trunk/test/certs/create_certs.py (original) +++ serf/trunk/test/certs/create_certs.py Sat Jun 21 13:29:19 2025 @@ -49,10 +49,10 @@ def create_key(keyfile='', passphrase=No if passphrase: open(keyfile, "wt").write(crypto.dump_privatekey(crypto.FILETYPE_PEM, key, KEY_CIPHER, - passphrase)) + passphrase).decode('utf-8')) else: open(keyfile, "wt").write(crypto.dump_privatekey(crypto.FILETYPE_PEM, - key)) + key).decode('utf-8')) return key @@ -62,7 +62,7 @@ def create_pkcs12(clientkey, clientcert, pkcs12.set_certificate(clientcert) pkcs12.set_privatekey(clientkey) pkcs12.set_ca_certificates([issuer]) - open(pkcs12file, "wt").write(pkcs12.export(passphrase=passphrase, + open(pkcs12file, "wb").write(pkcs12.export(passphrase=passphrase, iter=2048, maciter=2048)) def create_crl(revokedcert, cakey, cacert, crlfile, next_crl_days=VALID_DAYS): @@ -73,9 +73,9 @@ def create_crl(revokedcert, cakey, cacer now = datetime.utcnow() now_str = now.strftime('%Y%m%d%H%M%SZ') - revoked.set_serial(serial_number) - revoked.set_reason('unspecified') - revoked.set_rev_date(now_str) # revoked as of now + revoked.set_serial(serial_number.encode('ascii')) + revoked.set_reason(b'unspecified') + revoked.set_rev_date(now_str.encode('ascii')) # revoked as of now crl.add_revoked(revoked) try: @@ -84,7 +84,7 @@ def create_crl(revokedcert, cakey, cacer # Some very old versions of pyopenssl (such as the one on macOS) # do not support the 'digest' keyword argument. exported = crl.export(cacert, cakey, days=next_crl_days) - open(crlfile, "wt").write(exported) + open(crlfile, "wb").write(exported) # subjectAltName def create_cert(subjectkey, certfile, issuer=None, issuerkey=None, country='', @@ -122,41 +122,41 @@ def create_cert(subjectkey, certfile, is if ca: cert.add_extensions([ - crypto.X509Extension("basicConstraints", False, - "CA:TRUE"), - crypto.X509Extension("subjectKeyIdentifier", False, "hash", + crypto.X509Extension(b"basicConstraints", False, + b"CA:TRUE"), + crypto.X509Extension(b"subjectKeyIdentifier", False, b"hash", subject=cert) ]) cert.add_extensions([ - crypto.X509Extension("authorityKeyIdentifier", False, - "keyid:always", issuer=issuer) + crypto.X509Extension(b"authorityKeyIdentifier", False, + b"keyid:always", issuer=issuer) ]) if subjectAltName: critical = True if not cn else False cert.add_extensions([ - crypto.X509Extension('subjectAltName', critical, ", ".join(subjectAltName))]) + crypto.X509Extension(b'subjectAltName', critical, ", ".join(subjectAltName).encode('ascii'))]) if ocsp_responder_url: cert.add_extensions([ - crypto.X509Extension('authorityInfoAccess', False, - 'OCSP;URI:' + ocsp_responder_url)]) + crypto.X509Extension(b'authorityInfoAccess', False, + ('OCSP;URI:' + ocsp_responder_url).encode('ascii'))]) if ocsp_signer: cert.add_extensions([ - crypto.X509Extension('extendedKeyUsage', True, 'OCSPSigning') + crypto.X509Extension(b'extendedKeyUsage', True, b'OCSPSigning') ]) cert.sign(issuerkey, SIGN_ALGO) open(certfile, "wt").write(crypto.dump_certificate(crypto.FILETYPE_PEM, - cert)) + cert).decode('utf-8')) return cert if __name__ == '__main__': # root CA key pair and certificate. # This key will be used to sign the intermediate CA certificate - rootcakey = create_key('private/serfrootcakey.pem', 'serftest') + rootcakey = create_key('private/serfrootcakey.pem', b'serftest') rootcacert = create_cert(subjectkey=rootcakey, certfile='serfrootcacert.pem', @@ -167,7 +167,7 @@ if __name__ == '__main__': # intermediate CA key pair and certificate # This key will be used to sign all server certificates - cakey = create_key('private/serfcakey.pem', 'serftest') + cakey = create_key('private/serfcakey.pem', b'serftest') cacert = create_cert(subjectkey=cakey, certfile='serfcacert.pem', issuer=rootcacert, issuerkey=rootcakey, @@ -178,7 +178,7 @@ if __name__ == '__main__': # server key pair # server certificate, no errors - serverkey = create_key('private/serfserverkey.pem', 'serftest') + serverkey = create_key('private/serfserverkey.pem', b'serftest') servercert = create_cert(subjectkey=serverkey, certfile='serfservercert.pem', @@ -243,7 +243,7 @@ if __name__ == '__main__': ocsp_signer=True) # client key pair and certificate - clientkey = create_key('private/serfclientkey.pem', 'serftest') + clientkey = create_key('private/serfclientkey.pem', b'serftest') clientcert = create_cert(subjectkey=clientkey, certfile='serfclientcert.pem', @@ -254,7 +254,7 @@ if __name__ == '__main__': email='serfcli...@example.com') clientpkcs12 = create_pkcs12(clientkey, clientcert, cacert, - 'serfclientcert.p12', 'serftest') + 'serfclientcert.p12', b'serftest') # Note that this creates a v1 CRL file without extensions set, and with # MD5 hash. Not ideal, but pyOpenSSL doesn't support more than this.