@@ -155,33 +155,29 @@ def generate_request_header(self, response, host, is_preemptive=False):
155
155
gss_cb = None
156
156
if self .channel_bindings == "tls-server-end-point" :
157
157
if is_preemptive :
158
- log .warning ("channel_bindings were requested, but are unavailable for opportunistic authentication" )
158
+ raise SPNEGOExchangeError (
159
+ "channel_bindings were requested, but are unavailable for opportunistic authentication"
160
+ )
159
161
# The 'connection' attribute on raw is a public urllib3 API
160
162
# and can be None if the connection has been released.
161
163
elif getattr (response .raw , "connection" , None ) and getattr (response .raw .connection , "sock" , None ):
162
- try :
163
- # Defer import so it's not a hard dependency.
164
- from cryptography import x509
165
-
166
- sock = response .raw .connection .sock
167
-
168
- der_cert = sock .getpeercert (binary_form = True )
169
- cert = x509 .load_der_x509_certificate (der_cert )
170
- hash = cert .signature_hash_algorithm
171
- cert_hash = cert .fingerprint (hash )
172
-
173
- app_data = b"tls-server-end-point:" + cert_hash
174
- gss_cb = gssapi .raw .ChannelBindings (application_data = app_data )
175
- log .debug ("generate_request_header(): Successfully retrieved channel bindings" )
176
- except ImportError :
177
- log .warning ("Could not import cryptography, python-cryptography is required for this feature." )
178
- except Exception :
179
- log .warning (
180
- "Failed to get channel bindings from socket" ,
181
- exc_info = True ,
182
- )
164
+ # Defer import so it's not a hard dependency.
165
+ from cryptography import x509
166
+
167
+ sock = response .raw .connection .sock
168
+
169
+ der_cert = sock .getpeercert (binary_form = True )
170
+ cert = x509 .load_der_x509_certificate (der_cert )
171
+ hash = cert .signature_hash_algorithm
172
+ cert_hash = cert .fingerprint (hash )
173
+
174
+ app_data = b"tls-server-end-point:" + cert_hash
175
+ gss_cb = gssapi .raw .ChannelBindings (application_data = app_data )
176
+ log .debug ("generate_request_header(): Successfully retrieved channel bindings" )
183
177
else :
184
- log .warning ("channel_bindings were requested, but a socket could not be retrieved from the response" )
178
+ raise SPNEGOExchangeError (
179
+ "channel_bindings were requested, but a socket could not be retrieved from the response"
180
+ )
185
181
186
182
try :
187
183
gss_stage = "initiating context"
0 commit comments