@@ -77,16 +77,16 @@ def close(self):
7777 self .sock .close ()
7878 except :
7979 pass
80-
80+
8181 def set_wire_version_range (self , min_wire_version , max_wire_version ):
8282 self ._min_wire_version = min_wire_version
8383 self ._max_wire_version = max_wire_version
84-
84+
8585 @property
8686 def min_wire_version (self ):
8787 assert self ._min_wire_version is not None
8888 return self ._min_wire_version
89-
89+
9090 @property
9191 def max_wire_version (self ):
9292 assert self ._max_wire_version is not None
@@ -118,7 +118,7 @@ def __init__(self, pair, max_size, net_timeout, conn_timeout, use_ssl,
118118 use_greenlets , ssl_keyfile = None , ssl_certfile = None ,
119119 ssl_cert_reqs = None , ssl_ca_certs = None ,
120120 wait_queue_timeout = None , wait_queue_multiple = None ,
121- socket_keepalive = False ):
121+ socket_keepalive = False , ssl_match_hostname = True ):
122122 """
123123 :Parameters:
124124 - `pair`: a (hostname, port) tuple
@@ -157,6 +157,12 @@ def __init__(self, pair, max_size, net_timeout, conn_timeout, use_ssl,
157157 - `socket_keepalive`: (boolean) Whether to send periodic keep-alive
158158 packets on connected sockets. Defaults to ``False`` (do not send
159159 keep-alive packets).
160+ - `ssl_match_hostname`: If ``True`` (the default), and
161+ `ssl_cert_reqs` is not ``ssl.CERT_NONE``, enables hostname
162+ verification using the :func:`~ssl.match_hostname` function from
163+ python's :mod:`~ssl` module. Think very carefully before setting
164+ this to ``False`` as that could make your application vulnerable to
165+ man-in-the-middle attacks.
160166 """
161167 # Only check a socket's health with _closed() every once in a while.
162168 # Can override for testing: 0 to always check, None to never check.
@@ -181,6 +187,7 @@ def __init__(self, pair, max_size, net_timeout, conn_timeout, use_ssl,
181187 self .ssl_certfile = ssl_certfile
182188 self .ssl_cert_reqs = ssl_cert_reqs
183189 self .ssl_ca_certs = ssl_ca_certs
190+ self .ssl_match_hostname = ssl_match_hostname
184191
185192 if HAS_SSL and use_ssl and not ssl_cert_reqs :
186193 self .ssl_cert_reqs = ssl .CERT_NONE
@@ -295,7 +302,7 @@ def connect(self):
295302 keyfile = self .ssl_keyfile ,
296303 ca_certs = self .ssl_ca_certs ,
297304 cert_reqs = self .ssl_cert_reqs )
298- if self .ssl_cert_reqs :
305+ if self .ssl_cert_reqs and self . ssl_match_hostname :
299306 match_hostname (sock .getpeercert (), hostname )
300307
301308 except ssl .SSLError :
0 commit comments