6262from  .backoff_policies  import  exponential_backoff 
6363from  .cache  import  SFDictCache , SFDictFileCache 
6464from  .telemetry  import  TelemetryField , generate_telemetry_data_dict 
65+ from  .url_util  import  url_encode_str 
6566
6667
6768class  OCSPResponseValidationResult (NamedTuple ):
@@ -436,8 +437,9 @@ def _download_ocsp_response_cache(ocsp, url, do_retry: bool = True) -> bool:
436437
437438    def  generate_get_url (self , ocsp_url , b64data ):
438439        parsed_url  =  urlsplit (ocsp_url )
440+         url_encoded_b64data  =  url_encode_str (b64data )
439441        if  self .OCSP_RETRY_URL  is  None :
440-             target_url  =  f"{ ocsp_url }  /{ b64data }  " 
442+             target_url  =  f"{ ocsp_url }  /{ url_encoded_b64data }  " 
441443        else :
442444            # values of parsed_url.netloc and parsed_url.path based on oscp_url are as follows: 
443445            # URL                                    NETLOC                         PATH 
@@ -447,7 +449,9 @@ def generate_get_url(self, ocsp_url, b64data):
447449            # "http://oneocsp.microsoft.com/ocsp"    "oneocsp.microsoft.com"        "/ocsp" 
448450            # The check below is to treat first two urls same 
449451            path  =  parsed_url .path  if  parsed_url .path  !=  "/"  else  "" 
450-             target_url  =  self .OCSP_RETRY_URL .format (parsed_url .netloc  +  path , b64data )
452+             target_url  =  self .OCSP_RETRY_URL .format (
453+                 parsed_url .netloc  +  path , url_encoded_b64data 
454+             )
451455
452456        logger .debug ("OCSP Retry URL is - %s" , target_url )
453457        return  target_url 
0 commit comments