【问题标题】:How to get the certificate's signature key length using python ssl module如何使用 python ssl 模块获取证书的签名密钥长度
【发布时间】:2019-07-29 18:54:06
【问题描述】:

在 python ssl 模块中,我可以使用以下代码 sn-p 创建 TLS 连接:

import socket, ssl

context = ssl.SSLContext()
context.verify_mode = ssl.CERT_REQUIRED
context.check_hostname = True
context.load_default_certs()

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = context.wrap_socket(s, server_hostname='www.verisign.com')
ssl_sock.connect(('www.verisign.com', 443))

我还可以使用 getpeercert 函数获取 perr 的证书,该函数返回一个带有证书信息的对象,如下所示:

{'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}

我需要提取证书的公钥类型和长度(例如 RSA 2048 位)。我怎样才能得到这些信息?

【问题讨论】:

    标签: python python-3.x ssl openssl tls1.2


    【解决方案1】:

    运行getpeercert(True)获取完整证书的二进制DER格式,然后使用OpenSSL加密库,您可以通过这种方式获取密钥类型和长度(假设der是二进制DER):

    import OpenSSL
    
    certificate = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_ASN1, der)
    public_key = certificate.get_pubkey()
    key_type = 'RSA' if public_key().type() == OpenSSL.crypto.TYPE_RSA else 'DSA'
    key_length = public_key.bits()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 2013-11-10
      • 2021-12-18
      • 2013-07-07
      • 1970-01-01
      • 1970-01-01
      • 2017-05-07
      相关资源
      最近更新 更多