Как узнать версию OpenSSL, которую использует мой коллега?

У меня есть приложение C. Я хочу различать своих отправителей на основе версии openssl, которую они используют, от моего получателя. У меня есть один с openssl 1.0.2, а другой с openssl 3.0.5. Могу ли я узнать версию openssl, которую использует мой сверстник???

Переменная client_version в структуре SSL дает одинаковое значение для них обоих.

Добавление этого сюда из моего комментария.

Итак, на самом деле у моего старого кода есть некоторые проблемы (которые я не писал). Он делает SSL_free и SSL_CTX_free перед выполнением SSL_shutdown. Теперь это отлично работает в старой версии OpenSSL 1.0.2. Но после того, как я перенес свое приложение на 3.0.5, мне пришлось выполнить SSL_shutdown, чтобы связь работала правильно. Теперь, поскольку я делаю SSL_shutdown, я не могу связаться с отправителем, используя 1.0.2 ssl. Итак, я хочу узнать версию ssl отправителя, а затем выполнить SSL_shutdown, чтобы мой получатель правильно работал с отправителями, использующими любую версию SSL. «Я не могу изменить свой старый код».

Как вы думаете, почему они вообще используют OpenSSL? SSL — это общедоступный стандарт со многими существующими реализациями, OpenSSL — лишь одна из них. client_version — это версия протокола SSL, а не какой-либо библиотеки. И в любом случае это бессмысленно, см. github.com/openssl/openssl/issues/7079.

n. m. 10.04.2023 14:08

Я владею и отправителем, и получателем. Я знаю, что они используют OpenSSL. Я хочу реализовать обратную совместимость для новой версии моего приложения, которое будет использовать OpenSSL 3.0. Итак, я хочу знать версию OpenSSL, которую использует другая сторона (отправитель), и обрабатывать мой код на основе этого.

ben10 10.04.2023 14:11

Затем одна сторона должна явно сообщить другой, какую версию она использует.

dbush 10.04.2023 14:15

Почему вас интересует библиотечная версия? Вы говорите о конкретном протоколе, возможно, о нескольких версиях протокола. Все, что вам нужно знать, это то, реализует ли другая сторона протокол и, если применимо, его версию.

n. m. 10.04.2023 14:24

Итак, я хочу знать версию OpenSSL, которую использует другая сторона (отправитель), и обрабатывать мой код на основе этого. Как это будет работать? Вам нужно будет опубликовать информацию о версии после того, как вы выполните полное SSL-соединение, и к этому моменту различия версий не будут иметь никакого значения, потому что у вас будет безопасное соединение.

Andrew Henle 10.04.2023 14:25

Итак, на самом деле у моего старого кода есть некоторые проблемы (которые я не писал). Он делает SSL_free и SSL_CTX_free перед выполнением SSL_shutdown. Теперь это отлично работает в старой версии OpenSSL 1.0.2. Но после того, как я перенес свое приложение на 3.0.5, мне пришлось выполнить SSL_shutdown, чтобы связь работала правильно. Теперь, поскольку я делаю SSL_shutdown, я не могу связаться с отправителем, используя 1.0.2 ssl. Итак, я хочу узнать версию ssl отправителя, а затем выполнить SSL_shutdown, чтобы мой получатель правильно работал с отправителями, использующими любую версию SSL. «Я не могу изменить свой старый код».

ben10 10.04.2023 14:50

«Поскольку я использую SSL_shutdown, я не могу связаться с отправителем, используя 1.0.2 ssl». Это вообще не звучит разумно. Почему это так? Возможно, вам следует задать вопрос об этой проблеме.

n. m. 10.04.2023 15:46

Кстати, OpenSSL 1.0.2 больше не поддерживается с 1 января 2020 года и больше не получает обновлений.

n. m. 10.04.2023 15:50
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
8
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я владею и отправителем, и получателем. Я знаю, что они используют OpenSSL. Я хочу реализовать обратную совместимость для новой версии моего приложения, которое будет использовать OpenSSL 3.0.

Обнаружение версий одноранговой библиотеки TLS — это не то, как должна быть реализована обратная совместимость для уровня TLS. Вместо этого ваш сервер должен ожидать определенных поддерживаемых версий протокола TLS и шифров.

OpenSSL 1.0.2 поддерживает до TLS 1.2, который также поддерживается OpenSSL 3.0 (который также поддерживает TLS 1.3). Также существует много совпадений в поддерживаемых шифрах между OpenSSL 1.0.2 и OpenSSL 3.0 — см. здесь для 1.0.2 и здесь для 3.0. Обратите внимание, что фактические поддерживаемые версии шифров и протоколов также зависят от приложения и, возможно, от его конфигурации, но если вы контролируете и то, и другое, совпадение должно быть возможным.

(Из комментария) Итак, на самом деле в моем старом коде есть некоторые проблемы (которые я не писал). ... Итак, я хочу узнать версию ssl отправителя, а затем выполнить SSL_shutdown, чтобы мой получатель правильно работал с отправителями, использующими любую версию SSL.

Исходя из этого, ваше фактическое требование состоит не в том, чтобы получить точную версию библиотеки TLS, а только в том, чтобы различать клиента, использующего OpenSSL 1.0.2, и клиента, использующего OpenSSL 3.0, и только после выполнения рукопожатия TLS. Это требование намного проще, чем фактическое определение версии TLS: с правильно настроенным клиентом OpenSSL 3.0 вы сможете получить TLS 1.3, а с OpenSSL 1.0.2 вы сможете получить только TLS 1.2. Получить версию TLS установленного сеанса TLS можно, вызвав SSL_get_version.

Другие вопросы по теме