當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python ssl.SSLSocket.getpeercert用法及代碼示例


用法:

SSLSocket.getpeercert(binary_form=False)

如果連接另一端的對等方沒有證書,則返回 None 。如果 SSL 握手尚未完成,請提高 ValueError

如果binary_form參數是False,並且從對等方接收到證書,此方法返回一個dict實例。如果證書未通過驗證,則字典為空。如果證書經過驗證,它會返回一個包含多個 key 的字典,其中包括subject(為其頒發證書的委托人)和issuer(頒發證書的校長)。如果證書包含Subject Alternative Name擴展名(見RFC 3280),也會有一個subjectAltName字典中的鍵。

subjectissuer 字段是包含證書數據結構中為各個字段提供的相對專有名稱 (RDN) 序列的元組,每個 RDN 是 name-value 對的序列。這是一個real-world 示例:

{'issuer': ((('countryName', 'IL'),),
            (('organizationName', 'StartCom Ltd.'),),
            (('organizationalUnitName',
              'Secure Digital Certificate Signing'),),
            (('commonName',
              'StartCom Class 2 Primary Intermediate Server CA'),)),
 'notAfter': 'Nov 22 08:15:19 2013 GMT',
 'notBefore': 'Nov 21 03:09:52 2011 GMT',
 'serialNumber': '95F0',
 'subject': ((('description', '571208-SLe257oHY9fVQ07Z'),),
             (('countryName', 'US'),),
             (('stateOrProvinceName', 'California'),),
             (('localityName', 'San Francisco'),),
             (('organizationName', 'Electronic Frontier Foundation, Inc.'),),
             (('commonName', '*.eff.org'),),
             (('emailAddress', 'hostmaster@eff.org'),)),
 'subjectAltName': (('DNS', '*.eff.org'), ('DNS', 'eff.org')),
 'version': 3}

注意

要驗證特定服務的證書,您可以使用match_hostname() 函數。

如果 binary_form 參數是 True 並且提供了證書,則此方法將整個證書的 DER-encoded 形式作為字節序列返回,如果對等方未提供證書,則返回 None。對等方是否提供證書取決於 SSL 套接字的角色:

  • 對於客戶端 SSL 套接字,服務器將始終提供證書,無論是否需要驗證;
  • 對於服務器 SSL 套接字,客戶端僅在服務器請求時提供證書;因此,如果您使用 CERT_NONE(而不是 CERT_OPTIONALCERT_REQUIRED),getpeercert() 將返回 None

在 3.2 版中更改:返回的字典包括其他項目,例如issuernotBefore.

在 3.4 版中更改:ValueError握手未完成時引發。返回的字典包括額外的 X509v3 擴展項,例如crlDistributionPoints,caIssuersOCSPURI。

在 3.9 版中更改:IPv6 地址字符串不再有尾隨新行。

相關用法


注:本文由純淨天空篩選整理自python.org大神的英文原創作品 ssl.SSLSocket.getpeercert。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。