Почему сертификат, который я получаю, меняется при подключении к хосту на общем хостинге?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему сертификат, который я получаю, меняется при подключении к хосту на общем хостинге?

Сообщение Anonymous »

У меня есть сценарий Python 3.11.9, использующий Zeep (который использует запросы внутри себя) для подключения к конечной точке SOAP, которая находится в Azure. Нет ничего необычного в том, что мне пришлось предоставить файл .crt базовому объекту Session(), поскольку у моего работодателя есть какое-то устройство, которое перехватывает SSL/TLS и предоставляет хостам интрасети самозаверяющий сертификат.
Все работало нормально, поскольку я тестировал около недели, но вчера соединение TLS начало давать сбой, как будто .crt не проверял сертификат, полученный в результате попытки подключения, и действительно, запуск тестового сценария показал Я получал обратно сертификат, касающийся к домену Azure, а не к домену, к которому я подключался, и без каких-либо признаков самоподписанного устройства.
Затем (после исследования, описанного ниже), как это ни странно, это снова начал работать; то есть возврат сертификата снова оказался таким, как я ожидал, и все это подтверждается.
Я создал тестовый сценарий (ниже) на основе некоторых поисков и примеров из SO, чтобы установить соединение и получить сертификат, чтобы я мог видеть, что происходит. Я обнаружил, что, по-видимому, получаю сертификат для «стороны» Azure (не уверен, что это правильный термин), а не для домена поставщика.
Это привело к исследованию TLS, имени сервера. Индикация и другие вещи, а также попытка выяснить, поддерживается ли SNI в моей версии Python (3.11, поэтому я считаю, что да в стандартной библиотеке и «это зависит» в библиотеках.)
К сожалению, я делаю это по работе поэтому я не могу предоставить реальный код или имя хоста, поэтому надеюсь, что объяснения будет достаточно.

Код: Выделить всё

import socket
from OpenSSL import SSL
import certifi

port = 443
hostname = 'some site'
context = SSL.Context(method=SSL.TLS_CLIENT_METHOD)
context.load_verify_locations(cafile=certifi.where())

conn = SSL.Connection(context, socket=socket.socket(socket.AF_INET, socket.SOCK_STREAM))
conn.settimeout(5)
#Comment out set_tlsext_host_name() to break
conn.set_tlsext_host_name(hostname.encode())
conn.connect((hostname, port))
conn.setblocking(1)
conn.do_handshake()
print('\n')
for (idx, cert) in enumerate(conn.get_peer_cert_chain()):

subject = cert.get_subject()
issued_to = subject.CN    # the Common Name field
issuer = cert.get_issuer()
issued_by = issuer.CN
issued_org = issuer.O
issued_ou = issuer.OU

print('')
print(f'Cert {idx}')
print('Raw subject')
print(subject)
print('Raw issuer')
print(issuer)

conn.close()
Я думаю, что понимаю следующее:
  • Чего достигает SNI
  • Поддержка SSL-модуля Python 3.11.
  • Эта поддержка не обязательно означает, что она реализована в какой-либо конкретной библиотеке.
  • Отсутствие SNI. расширение, в TLS hello хост может вернуть сертификат для любого конкретного домена, который он держится
Что не соответствует моим ожиданиям, исходя из всего этого, так это то, почему, по-видимому, зависит от того, какой сертификат возвращается, а не является каким-то произвольным значением по умолчанию. Другими словами, если SNI не реализован в этой библиотеке, я ожидаю, что он всегда будет давать сбой, а если он есть, я ожидаю, что он всегда будет работать.
Кроме того, хотя я ожидаю, что на этот вопрос невозможно ответить, не зная больше об инфраструктуре моего работодателя, почему в случае с сертификатом Azure он не был перехвачен и подписан самим сетевое устройство.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ost-on-sha
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • ОШИБКА HTTP 500 на Laravel Vite 11 при развертывании на общем хостинге
    Anonymous » » в форуме Php
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Как включить расширение=fileinfo.so на моем общем хостинге?
    Гость » » в форуме Php
    0 Ответы
    30 Просмотры
    Последнее сообщение Гость
  • Файл .pl выдает ошибку 405 на общем хостинге
    Anonymous » » в форуме Linux
    0 Ответы
    39 Просмотры
    Последнее сообщение Anonymous
  • Где разместить REST API Java Spring Boot на общем хостинге [закрыто]
    Anonymous » » в форуме JAVA
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Проблема MySQL max_prepared_stmt_count на общем хостинге (Hostinger) [дубликат]
    Anonymous » » в форуме Php
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»