@@ -765,6 +765,8 @@ def __init__(
765765 SnowflakeOCSP .SSD .check_ssd_support ()
766766 self .OCSP_CACHE_SERVER = OCSPServer ()
767767
768+ self .debug_ocsp_failure_url = None
769+
768770 if SnowflakeOCSP .SSD .ACTIVATE_SSD :
769771 SnowflakeOCSP .OCSP_CACHE .set_ssd_status (SnowflakeOCSP .SSD .ACTIVATE_SSD )
770772 SnowflakeOCSP .SSD .clear_ssd_cache ()
@@ -900,6 +902,8 @@ def validate_by_direct_connection(self, issuer, subject, hostname=None, do_retry
900902 logger .debug ("getting OCSP response from CA's OCSP server" )
901903 ocsp_response = self ._fetch_ocsp_response (req , subject , cert_id , hostname )
902904 else :
905+ ocsp_url = self .extract_ocsp_url (subject )
906+ self .debug_ocsp_failure_url = SnowflakeOCSP .create_ocsp_debug_info (self , req , ocsp_url )
903907 logger .debug ("using OCSP response cache" )
904908
905909 if not ocsp_response :
@@ -1056,6 +1060,12 @@ def cache_size():
10561060 def delete_cache_file ():
10571061 SnowflakeOCSP .OCSP_CACHE .delete_cache_file ()
10581062
1063+ @staticmethod
1064+ def create_ocsp_debug_info (ocsp , ocsp_request , ocsp_url ):
1065+ b64data = ocsp .decode_ocsp_request_b64 (ocsp_request )
1066+ target_url = "{0}/{1}" .format (ocsp_url , b64data )
1067+ return target_url
1068+
10591069 def _fetch_ocsp_response (self , ocsp_request , subject , cert_id , hostname = None , do_retry = True ):
10601070 """
10611071 Fetch OCSP response using OCSPRequest
@@ -1092,31 +1102,42 @@ def _fetch_ocsp_response(self, ocsp_request, subject, cert_id, hostname=None, do
10921102 'ocsp_responder_url' : ocsp_url })
10931103 headers = {'Content-Type' : 'application/json' }
10941104
1105+ self .debug_ocsp_failure_url = SnowflakeOCSP .create_ocsp_debug_info (self , ocsp_request , ocsp_url )
1106+
10951107 ret = None
10961108 logger .debug ('url: %s' , target_url )
10971109 with generic_requests .Session () as session :
10981110 max_retry = 30 if do_retry else 1
10991111 sleep_time = 1
11001112 backoff = DecorrelateJitterBackoff (sleep_time , 16 )
11011113 for attempt in range (max_retry ):
1102- response = session .request (
1103- headers = headers ,
1104- method = actual_method ,
1105- url = target_url ,
1106- timeout = 30 ,
1107- data = payload ,
1108- )
1109- if response .status_code == OK :
1110- logger .debug (
1111- "OCSP response was successfully returned from OCSP "
1112- "server." )
1113- ret = response .content
1114- break
1115- elif max_retry > 1 :
1116- sleep_time = backoff .next_sleep (1 , sleep_time )
1117- logger .debug ("OCSP server returned %s. Retrying in %s(s)" ,
1118- response .status_code , sleep_time )
1119- time .sleep (sleep_time )
1114+ try :
1115+ response = session .request (
1116+ headers = headers ,
1117+ method = actual_method ,
1118+ url = target_url ,
1119+ timeout = 30 ,
1120+ data = payload ,
1121+ )
1122+ if response .status_code == OK :
1123+ logger .debug (
1124+ "OCSP response was successfully returned from OCSP "
1125+ "server." )
1126+ ret = response .content
1127+ break
1128+ elif max_retry > 1 :
1129+ sleep_time = backoff .next_sleep (1 , sleep_time )
1130+ logger .debug ("OCSP server returned %s. Retrying in %s(s)" ,
1131+ response .status_code , sleep_time )
1132+ time .sleep (sleep_time )
1133+ except Exception as ex :
1134+ if max_retry > 1 :
1135+ sleep_time = backoff .next_sleep (1 , sleep_time )
1136+ logger .debug ("Could not fetch OCSP Response from server"
1137+ "Retrying in %s(s)" , sleep_time )
1138+ time .sleep (sleep_time )
1139+ else :
1140+ raise ex
11201141 else :
11211142 logger .error (
11221143 "Failed to get OCSP response after %s attempt." , max_retry )
0 commit comments