summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Paul Calderone <exarkun@twistedmatrix.com>2014-01-18 10:30:55 -0500
committerJean-Paul Calderone <exarkun@twistedmatrix.com>2014-01-18 10:30:55 -0500
commitd86079859904fdbe70f1af496300b900d5458a6c (patch)
treee8ea1daed3e31e0d4096e395a6b753156f94e627
parent11ed8e87c3223d445c69921fbdd157062465f84b (diff)
downloadpyopenssl-d86079859904fdbe70f1af496300b900d5458a6c.tar.gz
make use_certificate_chain_file can accept unicode too
-rw-r--r--OpenSSL/SSL.py6
-rw-r--r--OpenSSL/test/test_ssl.py8
2 files changed, 9 insertions, 5 deletions
diff --git a/OpenSSL/SSL.py b/OpenSSL/SSL.py
index 325d47c..fe13c4f 100644
--- a/OpenSSL/SSL.py
+++ b/OpenSSL/SSL.py
@@ -359,8 +359,12 @@ class Context(object):
:param certfile: The name of the certificate chain file
:return: None
"""
+ if isinstance(certfile, _text_type):
+ # Perhaps sys.getfilesystemencoding() could be better?
+ certfile = certfile.encode("utf-8")
+
if not isinstance(certfile, bytes):
- raise TypeError("certfile must be a byte string")
+ raise TypeError("certfile must be bytes or unicode")
result = _lib.SSL_CTX_use_certificate_chain_file(self._context, certfile)
if not result:
diff --git a/OpenSSL/test/test_ssl.py b/OpenSSL/test/test_ssl.py
index 132cdff..572b963 100644
--- a/OpenSSL/test/test_ssl.py
+++ b/OpenSSL/test/test_ssl.py
@@ -960,11 +960,11 @@ class ContextTests(TestCase, _LoopbackMixin):
# Write out the chain file.
chainFile = self.mktemp()
- fObj = open(chainFile, 'w')
+ fObj = open(chainFile, 'wb')
# Most specific to least general.
- fObj.write(dump_certificate(FILETYPE_PEM, scert).decode('ascii'))
- fObj.write(dump_certificate(FILETYPE_PEM, icert).decode('ascii'))
- fObj.write(dump_certificate(FILETYPE_PEM, cacert).decode('ascii'))
+ fObj.write(dump_certificate(FILETYPE_PEM, scert))
+ fObj.write(dump_certificate(FILETYPE_PEM, icert))
+ fObj.write(dump_certificate(FILETYPE_PEM, cacert))
fObj.close()
serverContext = Context(TLSv1_METHOD)