以下哪个SSL证书版本是正确的?

问题描述 投票:0回答:1

我不太熟悉SSL证书。我尝试使用两个不同的函数检索SSL证书版本。一个使用OpenSSL库,另一个使用内置方法。它们为同一域名返回不同的版本号。哪一个是正确的?

这是Python 3的代码。

# -*- coding: utf-8 -*-
import socket
import OpenSSL
import ssl

def get_ssl_cert1(host, port=443):
    conn = ssl.create_connection((host, port))
    context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
    sock = context.wrap_socket(conn, server_hostname=host)
    certificate = ssl.DER_cert_to_PEM_cert(sock.getpeercert(True))
    x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, certificate)
    print("Certificate version from method 1: ", x509.get_version())

def get_ssl_cert2(host, port=443):
    ctx = ssl.create_default_context()
    s = ctx.wrap_socket(socket.socket(), server_hostname=host)
    s.connect((host, port))
    cert = s.getpeercert()
    print("Certificate version from method 2: ", cert['version'])

if __name__ == "__main__":
    host = 'www.google.com'
    get_ssl_cert1(host)
    get_ssl_cert2(host)

结果:

Certificate version from method 1:  2
Certificate version from method 2:  3

我期望结果是一样的。

python ssl ssl-certificate
1个回答
2
投票

方法2显示实际的x509版本,而方法1显示基于零的x509版本,其中0 = v1,1 = v2,2 = v3 ..因此在实践中,它们都显示使用版本3。你可以自己尝试使用openssl x509 -text -in YOURCERT.pem,你会得到类似的东西

Certificate:
    Data:
        Version: 3 (0x2)

你可以看到,版本3已经给出,但在括号中也是一个十六进制值(2),它基于从零开始的版本控制。这只是你的哪个库使用哪种方法的问题

© www.soinside.com 2019 - 2024. All rights reserved.