Я не совсем знаком с сертификатами 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
Я ожидал, что результаты будут такими же.