aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mitmproxy/net/tcp.py9
-rw-r--r--test/mitmproxy/net/test_tcp.py12
2 files changed, 20 insertions, 1 deletions
diff --git a/mitmproxy/net/tcp.py b/mitmproxy/net/tcp.py
index 117fda6d..ac78e70d 100644
--- a/mitmproxy/net/tcp.py
+++ b/mitmproxy/net/tcp.py
@@ -551,7 +551,14 @@ class _Connection:
context.set_verify(verify_options, verify_cert)
if ca_path is None and ca_pemfile is None:
ca_pemfile = certifi.where()
- context.load_verify_locations(ca_pemfile, ca_path)
+ try:
+ context.load_verify_locations(ca_pemfile, ca_path)
+ except SSL.Error:
+ raise exceptions.TlsException(
+ "Cannot load trusted certificates ({}, {}).".format(
+ ca_pemfile, ca_path
+ )
+ )
# Workaround for
# https://github.com/pyca/pyopenssl/issues/190
diff --git a/test/mitmproxy/net/test_tcp.py b/test/mitmproxy/net/test_tcp.py
index c5b026ef..cf3d30f7 100644
--- a/test/mitmproxy/net/test_tcp.py
+++ b/test/mitmproxy/net/test_tcp.py
@@ -199,6 +199,18 @@ class TestSSLv3Only(tservers.ServerTestBase):
tutils.raises(exceptions.TlsException, c.convert_to_ssl, sni="foo.com")
+class TestInvalidTrustFile(tservers.ServerTestBase):
+ def test_invalid_trust_file_should_fail(self):
+ c = tcp.TCPClient(("127.0.0.1", self.port))
+ with c.connect():
+ with tutils.raises(exceptions.TlsException):
+ c.convert_to_ssl(
+ sni="example.mitmproxy.org",
+ verify_options=SSL.VERIFY_PEER,
+ ca_pemfile=tutils.test_data.path("mitmproxy/net/data/verificationcerts/generate.py")
+ )
+
+
class TestSSLUpstreamCertVerificationWBadServerCert(tservers.ServerTestBase):
handler = EchoHandler