hyb
2025-12-30 399ffc4d9829f70529d3b096fe4228f7496cc566
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
Ë
 
çúh¼,ãó
—ddlZddlZddlZddlmZmZddlZddlZddlm    Z    m
Z
ddl m Z ddl mZddlmZddlmZmZddlmZdd    lmZdd
lmZmZdd lmZmZdd lmZdd lm Z m!Z!d„Z"dd„Z#d„Z$d„Z%dd„Z&Gd„d«Z'y)éN)ÚurljoinÚurlparse)ÚhazmatÚx509)ÚInvalidSignature)Úbackends)Ú DSAPublicKey)ÚECDSAÚEllipticCurvePublicKey)ÚPKCS1v15)Ú RSAPublicKey)ÚSHA1ÚHash)ÚEncodingÚ PublicFormat)Úocsp)ÚAuthorizationErrorÚConnectionErrorcóR—|j«}    t|t«r;|j|j|j
t «|j«yt|t«r2|j|j|j
|j«yt|t«r;|j|j|j
t|j««y|j|j|j
«y#t$r td«‚wxYw)Nzfailed to valid ocsp response) Ú
public_keyÚ
isinstancer ÚverifyÚ    signatureÚtbs_response_bytesr Úsignature_hash_algorithmr    r r
rr)Ú issuer_certÚ ocsp_responseÚpubkeys   õ]H:\项目\archive\测试组\脚本\Change_password\venv_build\Lib\site-packages\redis/ocsp.pyÚ_verify_responser sî€Ø × #Ñ #Ó %€Fð?Ü fœlÔ +Ø M‰MØ×'Ñ'Ø×0Ñ0Ü“
Ø×6Ñ6õ     ô ˜¤ Ô -Ø M‰MØ×'Ñ'Ø×0Ñ0Ø×6Ñ6õ ô
˜Ô 6Ô 7Ø M‰MØ×'Ñ'Ø×0Ñ0ܐm×<Ñ<Ó=õ ð M‰M˜-×1Ñ1°=×3SÑ3SÕ TøÜ ò?ÜÐ=Ó>Ð>ð?ús ’A
DÁADÂA
DÃ*&DÄD&cóv—tj|«}|jtjjk(r t d«‚|jtjj k(r[|jtjjk7r?tdt|j«jd«d›d«‚td«‚|jtjj«k\r td«‚|j r6|j tjj«kr td«‚|j"}|j$}|j&}|}|||j(k(s||k(r|}nˆ|j*}t-||||«}        |    d    }
|
j0j3t4j6«} | 0t4j8j:j<| j>vr td «‚|
}|r tA||«y #t.$r td
«‚wxYw) z=A wrapper the return the validity of a known ocsp certificatez4you are not authorized to view this ocsp certificatez Received an ú.éz ocsp certificate statusz@failed to retrieve a successful response from the ocsp responderz)ocsp certificate was issued in the futurez1ocsp certificate has invalid update - in the pastrz'no certificates found for the responderz'delegate not autorized for ocsp signingT)!rÚload_der_ocsp_responseÚresponse_statusÚOCSPResponseStatusÚ UNAUTHORIZEDrÚ
SUCCESSFULÚcertificate_statusÚOCSPCertStatusÚGOODrÚstrÚsplitÚ this_updateÚdatetimeÚnowÚ next_updateÚresponder_nameÚissuer_key_hashÚresponder_key_hashÚsubjectÚ certificatesÚ_get_certificatesÚ
IndexErrorÚ
extensionsÚget_extension_for_classrÚExtendedKeyUsageÚoidÚExtendedKeyUsageOIDÚ OCSP_SIGNINGÚvaluer ) rÚ
ocsp_bytesÚvalidaterr2Ú issuer_hashÚresponder_hashÚcert_to_validateÚcertsÚresponder_certsÚresponder_certÚexts             rÚ_check_certificaterI2s€ô×/Ñ/°
Ó;€Mà×$Ñ$¬×(?Ñ(?×(LÑ(LÒLÜ Ð!WÓXÐXØ×$Ñ$¬×(?Ñ(?×(JÑ(JÒJØ × +Ñ +¬t×/BÑ/B×/GÑ/GÒ GÜ!Øœs =×#CÑ#CÓD×JÑJÈ3ÓOÐPQÑRÐSðT*ð*óð ô
Ø Nó
ð    
ð× Ñ ¤H×$5Ñ$5×$9Ñ$9Ó$;Ò;ÜÐIÓJÐJð    ×!Ò!Ø × %Ñ %¬×(9Ñ(9×(=Ñ(=Ó(?Ò ?äÐQÓRÐRà"×1Ñ1€NØ×/Ñ/€KØ"×5Ñ5€Nà"ÐàÐ"Ø ˜k×1Ñ1Ò 1Ø ˜[Ò (à&Ñà×*Ñ*ˆÜ+Ø ; °ó
ˆð    MØ,¨QÑ/ˆNð×'Ñ'×?Ñ?Ä×@UÑ@UÓVˆØ ˆ;œ$Ÿ(™(×6Ñ6×CÑCÈ3Ï9É9ÑTÜ!Ð"KÓLÐ LØ)ÐáÜÐ)¨=Ô9Ø øôò    MÜ!Ð"KÓLÐ Lð    Mús Æ'H#È#H8cóü—|€8|Dcgc]+}t|«|k(r|j|jk(r|‘Œ-}}|S|Dcgc],}|j|k(r|j|jk(r|‘Œ.}}|Scc}wcc}w©N)Ú_get_pubkey_hashÚissuerr5)rErr2rCÚcr6s      rr7r7ms›€ØÐðö
àÜ Ó" nÒ4¸¿¹À[×EXÑEXÒ9Xò ð
ˆ ð
ð Ðð    ö
àØy‰y˜NÒ*¨q¯x©x¸;×;NÑ;NÒ/Nò ð
ˆ ð
ð Ðùò
ùò 
s
‡0A4¿1A9có
—|j«}t|t«r/|jtj
t j«}nmt|t«r/|jtjt j«}n.|jtj
t j«}tt«tj«¬«}|j!|«|j#«S)N)Úbackend)rrr Ú public_bytesrÚDERrÚPKCS1r ÚX962ÚUncompressedPointÚSubjectPublicKeyInforrrÚdefault_backendÚupdateÚfinalize)Ú certificaterÚhÚsha1s    rrLrL~s©€Ø × #Ñ #Ó %€Fô&œ,Ô'Ø × Ñ ¤§ ¡ ¬l×.@Ñ.@Ó A‰Ü    FÔ2Ô    3Ø × Ñ ¤§ ¡ ¬|×/MÑ/MÓ N‰à × Ñ ¤§ ¡ ¬l×.OÑ.OÓ Pˆä ”“¤× 8Ñ 8Ó :Ô ;€D؇KK„NØ =‰=‹?Ðócód—|dvr td«‚d}|j«j«}|j«D]/}|j«}|j|j
k(sŒ-|}n|€ td«‚|%t j|«}||k7r td«‚t||«S)zÌAn implementation of a function for set_ocsp_client_callback in PyOpenSSL.
 
    This function validates that the provide ocsp_bytes response is valid,
    and matches the expected, stapled responses.
    )r]Nzno ocsp response presentNz2no matching issuer cert found in certificate chainz/received and expected certificates do not match)    rÚget_peer_certificateÚto_cryptographyÚget_peer_cert_chainr5rMrÚload_pem_x509_certificaterI)Úconr@ÚexpectedrÚ    peer_certrNÚcertÚes        rÚocsp_staple_verifierrhŽs¾€ð [Ñ ÜÐ8Ó9Ð9à€KØ×(Ñ(Ó*×:Ñ:Ó<€IØ × $Ñ $Ó &òˆØ× Ñ Ó"ˆØ <‰<˜9×+Ñ+Ó +؈KÙ ð    ð ÐÜÐRÓSÐSàÐÜ × *Ñ *¨8Ó 4ˆØ ˜Š>Ü!Ð"SÓTÐ Tä ˜k¨:Ó 6Ð6r]cóB—eZdZdZd d„Zd„Zd„Zd„Zd„Zd„Z    d    „Z
d
„Z y) Ú OCSPVerifieraA class to verify ssl sockets for RFC6960/RFC6961. This can be used
    when using direct validation of OCSP responses and certificate revocations.
 
    @see https://datatracker.ietf.org/doc/html/rfc6960
    @see https://datatracker.ietf.org/doc/html/rfc6961
    Ncó<—||_||_||_||_yrK)ÚSOCKÚHOSTÚPORTÚCA_CERTS)ÚselfÚsockÚhostÚportÚca_certss     rÚ__init__zOCSPVerifier.__init__²s€ØˆŒ    ØˆŒ    ØˆŒ    Ø ˆ r]cóœ—tj|«}tj|j    «t j ««}|S)z?Convert SSL certificates in a binary (DER) format to ASCII PEM.)ÚsslÚDER_cert_to_PEM_certrrbÚencoderrW)rpÚderÚpemrfs    rÚ
_bin2asciizOCSPVerifier._bin2ascii¸s:€ô×&Ñ& sÓ+ˆÜ×-Ñ-¨c¯j©j«l¼H×<TÑ<TÓ<VÓWˆØˆ r]cóš—|jjd«}|dur td«‚|j|«}|j    |«S)z“This function returns the certificate, primary issuer, and primary ocsp
        server in the chain for a socket already wrapped with ssl.
        TFz!no certificate found for ssl peer)rlÚ getpeercertrr|Ú_certificate_components)rprzrfs   rÚcomponents_from_socketz#OCSPVerifier.components_from_socket¿sJ€ð i‰i×#Ñ# DÓ)ˆØ %‰<Ü!Ð"EÓFÐ F؏‰˜sÓ#ˆØ×+Ñ+¨DÓ1Ð1r]cóÖ—    |jjtjjj
«j }|Dcgc]5}|jtjjjk(r|‘Œ7}}    |djj }|Dcgc]5}|jtjjjk(r|‘Œ7}}    |djj }|||fS#tjjj$r td«‚wxYwcc}w#t$rd}YŒ§wxYwcc}w#t$r td«‚wxYw)zÌGiven an SSL certificate, retract the useful components for
        validating the certificate status with an OCSP server.
 
        Args:
            cert ([bytes]): A PEM encoded ssl certificate
        z-No AIA information present in ssl certificaterNzno ocsp servers in certificate)r9Úget_extension_for_oidrr<Ú ExtensionOIDÚAUTHORITY_INFORMATION_ACCESSr?Ú cryptographyÚExtensionNotFoundrÚ access_methodÚAuthorityInformationAccessOIDÚ
CA_ISSUERSÚaccess_locationr8ÚOCSP)rprfÚaiaÚiÚissuersrMÚocspsrs        rrz$OCSPVerifier._certificate_componentsËs_€ð    SØ—/‘/×7Ñ7Ü—‘×%Ñ%×BÑBóç‰eð ðö
àØ‰¤$§(¡(×"HÑ"H×"SÑ"SÒSò ð
ˆð
ð
    Ø˜Q‘Z×/Ñ/×5Ñ5ˆFðö
àØ‰¤$§(¡(×"HÑ"H×"MÑ"MÒMò ð
ˆð
ð     Dؘ‘8×+Ñ+×1Ñ1ˆDðV˜TÐ!Ð!øô5× Ñ ×+Ñ+×=Ñ=ò    SÜ!Ð"QÓRÐ Rð    Süò
øôò    ØŠFð    üò
øôò    DÜ!Ð"BÓCÐ Cð    Dús6‚ADÁ :D8Â
D=Â':EÃ$EÄ3D5Ä= E Å
E ÅE(cóþ—tj|j|jf|j¬«}t j |j«tj««}|j|«S)zÎReturn the certificate, primary issuer, and primary ocsp server
        from the host defined by the socket. This is useful in cases where
        different certificates are occasionally presented.
        )rt) rwÚget_server_certificatermrnrorrbryrrWr)rpr{rfs   rÚ!components_from_direct_connectionz.OCSPVerifier.components_from_direct_connectionósY€ô ×(Ñ(¨$¯)©)°T·Y±YÐ)?È$Ï-É-ÔXˆÜ×-Ñ-¨c¯j©j«l¼H×<TÑ<TÓ<VÓWˆØ×+Ñ+¨DÓ1Ð1r]cóª—tj«}|j||tjj
j j««}|j«}tj|jtj
jjj««}t||j!d««}|S)z#Return the complete url to the ocspÚascii)rÚOCSPRequestBuilderÚadd_certificater…rÚ
primitivesÚhashesÚSHA256ÚbuildÚbase64Ú    b64encoderQÚ serializationrrRrÚdecode)rpÚserverrfrÚorbÚrequestÚpathÚurls        rÚbuild_certificate_urlz"OCSPVerifier.build_certificate_urlýs£€ä×%Ñ%Ó'ˆð×!Ñ!Ø +œ|×2Ñ2×=Ñ=×DÑD×KÑKÓMó
ˆð—)‘)“+ˆä×ÑØ ×  Ñ  ¤×!2Ñ!2×!@Ñ!@×!IÑ!I×!MÑ!MÓ Nó
ˆôf˜dŸk™k¨'Ó2Ó3ˆØˆ
r]cót—tj|«}|js td«‚|j}|j |«}|j |||«}t|«jddœ}tj||¬«}|js td«‚t||jd«S)z3Checks the validity of an ocsp server for an issuerz"failed to fetch issuer certificatezapplication/ocsp-request)ÚHostz Content-Type)Úheadersz failed to fetch ocsp certificateT)
ÚrequestsÚgetÚokrÚcontentr|r¤rÚnetlocrI)    rprŸrfÚ
issuer_urlÚrrzrÚocsp_urlÚheaders             rÚcheck_certificatezOCSPVerifier.check_certificate s¢€ô L‰L˜Ó $ˆØtŠtÜ!Ð"FÓGÐ G؏i‰iˆØ—o‘o cÓ*ˆ à×-Ñ-¨f°d¸KÓHˆô˜XÓ&×-Ñ-Ø6ñ
ˆô L‰L˜¨6Ô 2ˆØtŠtÜ!Ð"DÓEÐ EÜ! +¨q¯y©y¸$Ó?Ð?r]cóò—    |j«\}}}|€ td«‚|j|||«S#t$r7|j    «\}}}|€ td«‚|j|||«cYSwxYw)aDReturns the validity of the certificate wrapping our socket.
        This first retrieves for validate the certificate, issuer_url,
        and ocsp_server for certificate validate. Then retrieves the
        issuer certificate from the issuer_url, and finally checks
        the validity of OCSP revocation status.
        z%no issuers found in certificate chain)r€rr±rr’)rprfr­Ú ocsp_servers    rÚis_validzOCSPVerifier.is_valid"s‘€ð        IØ,0×,GÑ,GÓ,IÑ )ˆD*˜kØÐ!Ü%Ð&MÓNÐNØ×)Ñ)¨+°t¸ZÓHÐ HøÜ!ò    IØ,0×,RÑ,RÓ,TÑ )ˆD*˜kØÐ!Ü%Ð&MÓNÐNØ×)Ñ)¨+°t¸ZÓHÒ Hð        Iús‚36¶=A6Á5A6rK) Ú__name__Ú
__module__Ú __qualname__Ú__doc__rur|r€rr’r¤r±r´©r]rrjrjªs2„ñó!ò ò
2ò&"òP2òò @ó*Ir]rj)TrK)(r›r/rwÚ urllib.parserrÚ%cryptography.hazmat.primitives.hashesr…r¨rrÚcryptography.exceptionsrÚcryptography.hazmatrÚ-cryptography.hazmat.primitives.asymmetric.dsar    Ú,cryptography.hazmat.primitives.asymmetric.ecr
r Ú1cryptography.hazmat.primitives.asymmetric.paddingr Ú-cryptography.hazmat.primitives.asymmetric.rsar rrÚ,cryptography.hazmat.primitives.serializationrrÚcryptography.x509rÚredis.exceptionsrrr rIr7rLrhrjr¹r]rú<module>rÅs`ðÛ ÛÛ
ß*ã,Ûß%Ý4Ý(ÝFßVÝFÝFß<ßOÝ"ç@ò?ó88òvò" ó 7÷8JIòJIr]