Привет, я хочу поддержать несколько версий TLS, используя метод SSLV23 на стороне клиента. Но я не могу подключиться, получая ошибку:
SSL23_GET_SERVER_HELLO: сбой квитирования оповещения sslv3
Может кто-нибудь, пожалуйста, скажите мне, как я буду поддерживать несколько версий TLS, используя openssl?
Фрагмент кода для SSLV23 (не работает)
cctx = SSL_CTX_new(SSLv23_client_method());
if(cctx) {
SSL_CTX_set_options(cctx, SSL_OP_NO_SSLv3);
}
Только для TLS V1 (рабочий)
cctx = SSL_CTX_new(TLSv1_client_method());
Исходя из ваших тегов и комментариев, я предполагаю, что вы хотите только TLS-соединения. Клиенты должны инициировать только соединения TLS. Если так, то почему вы настаиваете на SSLv23_client_method
? Но в моем тесте следующее отослало клиента TLS 1.0:
ctx = SSL_CTX_new(SSLv23_client_method());
SSL_CTX_set_options(ctx,SSL_OP_NO_SSLv3);
Чтобы предотвратить атаку POODLE, лучше всего было бы полностью отключить поддержку SSL3 на клиенте и серверах. В вашем случае вы упомянули, что серверы поддерживают только TLS. Следовательно, нет необходимости в обратной совместимости с клиентами по SSL3
В случае, если сервер использует SSL3, для предотвращения атаки POODLE клиент и сервер должны реализовать аварийную сигнализацию TLS. https://tools.ietf.org/html/draft-ietf-tls-downgrade-scsv-05
Примеры настройки TLS на стороне клиента:
/* Exclude SSLv2 and SSLv3 */
ctx = SSL_CTX_new(TLSv1_client_method());
SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2);
SSL_CTX_set_options(ctx,SSL_OP_NO_SSLv3);
/* Exclude SSLv2, SSLv3 and TLS 1.0 */
ctx = SSL_CTX_new(TLSv1_1_client_method());
SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2);
SSL_CTX_set_options(ctx,SSL_OP_NO_SSLv3);
SSL_CTX_set_options(ctx,SSL_OP_NO_TLSv1);
/* Exclude SSLv2, SSLv3 ,TLS 1.0 and TLS 1.1 */
ctx = SSL_CTX_new(TLSv1_2_client_method());
SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2);
SSL_CTX_set_options(ctx,SSL_OP_NO_SSLv3);
SSL_CTX_set_options(ctx,SSL_OP_NO_TLSv1);
SSL_CTX_set_options(ctx,SSL_OP_NO_TLSv1_1);
Вы также можете ИЛИ варианты и перейти к SSL_CTX_set_options
на одном дыхании.