Как обрабатывать SSL_ERROR_SSL на SSL_accept

Я использую OpenSSL (библиотеку разработки, <openssl/ssl.h>) для программирования небольшого простого сервера на C.

Поскольку я тестирую его только локально, я использую самозаверяющий сертификат. При первом подключении, поскольку мой браузер не доверяет сертификату, SSL_accept() возвращает SSL_ERROR_SSL, и это нормально, так и должно произойти.

Мне интересно, как мне справиться с ошибкой SSL_ERROR_SSL, поскольку в документации SSL_get_error() говорится:

SSL_ERROR_SSL
Произошла неустранимая фатальная ошибка в библиотеке SSL, обычно это ошибка протокола. Очередь ошибок OpenSSL содержит дополнительную информацию об ошибке. Если возникает эта ошибка, то дальнейшие операции ввода-вывода не должны выполняться в соединении и не следует вызывать SSL_shutdown().

Если я не могу SSL_shutdown(), что мне делать с SSL-соединением? Как мне повторно использовать объект SSL*? И почему я не могу вызвать SSL_shutdown()?

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

SSL-соединения нет. Существует принятый сокет открытого текста, который необходимо закрыть.

user207421 11.05.2024 00:57
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
152
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В случае обнаружения ненадежного сертификата функция SSL_accept(), возвращающая SSL_ERROR_SSL, сигнализирует о необратимой, катастрофической проблеме в библиотеке SSL, обычно об ошибке протокола.

В этом сценарии не следует вызывать SSL_shutdown(), а также выполнять какие-либо действия ввода-вывода в соединении.

Чтобы решить эту проблему и продолжить использование объекта SSL*, вы можете предпринять следующие действия:

Чтобы привести в порядок объект SSL, выполните SSL_free(ssl), чтобы освободить выделенные ресурсы, связанные с объектом SSL. В результате сеанс SSL и все связанные структуры данных будут освобождены.

Закройте базовый сокет. Чтобы освободить системные ресурсы, закройте дескриптор сокета, подключенный к SSL-соединению. Для этого вы можете использовать функции Shutdown() или Close().

Отвечайте на ошибку вежливо.

Этот ответ читается так, как будто его сгенерировал ИИ, что запрещено в StackOverflow: stackoverflow.com/help/gen-ai-policy

Remy Lebeau 10.05.2024 22:49
Ответ принят как подходящий

Если я не могу SSL_shutdown(), что мне делать с SSL-соединением? Как мне повторно использовать объект SSL*? И почему я не могу вызвать SSL_shutdown()?

В этом случае вы не можете использовать SSL_shutdown(), поскольку это неустранимая фатальная ошибка. Сеанс SSL не удалось установить, состояние сокета неизвестно. Так что нет ничего, что можно было бы надежно отключить. И объект SSL нельзя использовать повторно.

Итак, единственное, что вы можете сделать, это уничтожить объект SSL, закрыть сокет и двигаться дальше.

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