当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。