Что именно означает основная ошибка Indy 14094416: подпрограммы SSL: ssl3_read_bytes: сертификат предупреждения sslv3 неизвестен

Что именно происходит в Indy, когда простой HTTPS-запрос из браузера приводит к тому, что отладчик ломается с этой ошибкой:

Проект PMS_COM.exe вызвал класс исключения EIdOSSLUnderlyingCryptoError с сообщением «Ошибка принятия соединения с SSL.

ошибка: 14094416: подпрограммы SSL: ssl3_read_bytes: сертификат оповещения sslv3 неизвестен».

Некоторые в интернете говорят, что это ошибка сертификата клиента, а сертификата клиента нет! Есть только серверный сертификат.

Но если я неправильно понял и это ошибка на стороне клиента, то почему это вызывает исключение на стороне сервера?

Кроме того, я не понимаю, как перехватывать такие ошибки. EIdOSSLUnderlyingCryptoError кажется, происходит где-то в Indy, и у меня нет возможности поймать это в моем коде.

Как включить TLS в gRPC-клиенте и сервере : 2
Как включить TLS в gRPC-клиенте и сервере : 2
Здравствуйте! 🙏🏻 Надеюсь, у вас все хорошо и добро пожаловать в мой блог.
Обновление драйверов Microsoft ODBC (с 17 до 18) для PHP
Обновление драйверов Microsoft ODBC (с 17 до 18) для PHP
Все знают, что PHP v7.4 потерял поддержку, и наши недавние старые приложения должны обновиться до PHP v8.x. ...
0
0
911
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

EIdOSSLUnderlyingCryptoError — это исключение Indy, обертывающее сообщение об ошибке OpenSSL.

Согласно Сертификат оповещения SSLv3 неизвестен (4279556):

Библиотека SSL отправляет в систему предупреждение о том, что цепочка сертификатов недействительна.

Раздел сообщения, в котором говорится, что «сертификат предупреждения sslv3 неизвестен», обычно относится к промежуточному сертификату в цепочке сертификатов. Срок действия этого сертификата истек, он недействителен или ему не доверяют одна или несколько систем, участвующих в соединении SSL/TLS.

В этом случае клиент (браузер) отправляет на ваш сервер предупреждение о прекращении рукопожатия TLS, поскольку сертификат вашего сервера недействителен. Это предупреждение вызывает исключение EIdOSSLUnderlyingCryptoError в коде сервера. Сервер обработает ошибку за вас, закрыв свой конец TCP-соединения, в котором не удалось выполнить рукопожатие, и завершит/перезапустит рабочий поток, которому принадлежит этот TCP-сокет.

Если вы хотите отловить ошибку, вы можете использовать серверное событие OnException, которое запускается в том же потоке, которому принадлежит TCP-соединение, в котором не удалось выполнить рукопожатие TLS.

Спасибо за объяснение внутренних процессов!

Paul 27.09.2022 20:46

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