@@ -1027,6 +1027,9 @@ class HTTP_Server(Automaton):
10271027
10281028 :param ssp: the SSP to serve. If None, unauthenticated (or basic).
10291029 :param mech: the HTTP_AUTH_MECHS to use (default: NONE)
1030+ :param require_cbt: require Channel Bindings to be valid (default: False)
1031+ :param cbt_cert: the path to the certificate used for channel bindings.
1032+ Useful if behind a reverse proxy. (default: None)
10301033
10311034 Other parameters:
10321035
@@ -1042,6 +1045,8 @@ def __init__(
10421045 mech = HTTP_AUTH_MECHS .NONE ,
10431046 verb = True ,
10441047 ssp = None ,
1048+ require_cbt : bool = False ,
1049+ cbt_cert : str = None ,
10451050 * args ,
10461051 ** kwargs ,
10471052 ):
@@ -1053,8 +1058,20 @@ def __init__(
10531058 self .ssp = ssp
10541059 self .authmethod = mech .value
10551060 self .sspcontext = None
1061+
1062+ # CBT settings
10561063 self .ssp_req_flags = GSS_S_FLAGS .GSS_S_ALLOW_MISSING_BINDINGS
1057- self .chan_bindings = GSS_C_NO_CHANNEL_BINDINGS
1064+ if require_cbt :
1065+ self .ssp_req_flags &= ~ GSS_S_FLAGS .GSS_S_ALLOW_MISSING_BINDINGS
1066+ if cbt_cert :
1067+ self .chan_bindings = GssChannelBindings .fromssl (
1068+ ChannelBindingType .TLS_SERVER_END_POINT ,
1069+ certfile = cbt_cert ,
1070+ )
1071+ else :
1072+ self .chan_bindings = GSS_C_NO_CHANNEL_BINDINGS
1073+
1074+ # Auth settings
10581075 self .basic = False
10591076 self .BASIC_IDENTITIES = kwargs .pop ("BASIC_IDENTITIES" , {})
10601077 self .BASIC_REALM = kwargs .pop ("BASIC_REALM" , "default" )
@@ -1311,16 +1328,8 @@ def __init__(
13111328 mech = mech ,
13121329 verb = verb ,
13131330 ssp = ssp ,
1331+ cbt_cert = cert ,
1332+ require_cbt = require_cbt ,
13141333 * args ,
13151334 ** kwargs ,
13161335 )
1317-
1318- # Set channel binding
1319- if cert :
1320- self .chan_bindings = GssChannelBindings .fromssl (
1321- ChannelBindingType .TLS_SERVER_END_POINT ,
1322- certfile = cert ,
1323- )
1324- if require_cbt :
1325- # We require CBT by removing GSS_S_ALLOW_MISSING_BINDINGS
1326- self .ssp_req_flags &= ~ GSS_S_FLAGS .GSS_S_ALLOW_MISSING_BINDINGS
0 commit comments