Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获得证书';使用python ssl模块设置签名密钥长度_Python_Python 3.x_Ssl_Openssl_Tls1.2 - Fatal编程技术网

如何获得证书';使用python ssl模块设置签名密钥长度

如何获得证书';使用python ssl模块设置签名密钥长度,python,python-3.x,ssl,openssl,tls1.2,Python,Python 3.x,Ssl,Openssl,Tls1.2,在python ssl模块中,我可以使用以下代码段创建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 = cont

在python ssl模块中,我可以使用以下代码段创建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位)。如何获取此信息?

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

导入OpenSSL
certificate=OpenSSL.crypto.load\u证书(OpenSSL.crypto.FILETYPE\u ASN1,der)
公钥=证书。获取公钥()
密钥类型='RSA'如果公钥().type()==OpenSSL.crypto.type\u RSA否则为'DSA'
密钥长度=公共密钥位()