OpenSSL: SessionTicket TLS Extension Problem
-
28-09-2019 - |
Pergunta
Estou usando um aplicativo que usa o OpenSSL para o lado do cliente TLS. Atualizamos a versão OpenSSL de 0.9.8e para 0.9.8k. E então o TLS não funciona ...
O Wireshark mostra que a nova versão (com o OpenSSL 0.9.8K) envia o pacote Hello Client Hello com uma extensão da sessão - e o lado do servidor responde com um erro interno fatal.
A versão anterior envia um pacote de hello quase idêntico, mas sem o sessionTicket Ext.
Quando substituí o TLSV1_CLIENT_METHOD por SSLV23_CLIENT_METHOD, tudo funcionou bem - o cliente enviado Hello Packet era um SSLV2 (no sniffer) sem qualquer extensão (como não era TLS, mas SSL?)
Existe uma maneira melhor de desativar essa extensão ou resolver o problema de outra maneira?
Obrigado antecipadamente, rursw1
Solução
Citação da RFC 5077: “Observe que a codificação de uma extensão de sessão vazia foi ambígua na RFC 4507. Uma implementação RFC 4507 pode ter codificado como:
00 23 Extension type 35
00 02 Length of extension contents
00 00 Length of ticket
Ou pode ter codificado da mesma maneira que esta atualização:
00 23 Extension type 35
00 00 Length of extension contents
Um servidor que deseja oferecer suporte aos clientes da RFC 4507 deve responder a uma extensão de sessão vazia codificada da mesma maneira que a recebeu. “Portanto, o servidor com quem trabalhei suporta RFC 4507 e não o 5077 mais recente.
Removendo -o 'normalmente' usando SSL_CTX_SET_Options com SSL_OP_NO_TICKET resolveu o problema.
Espero que isso ajude alguém ...
EDIT: Bem, isso também pode ser feito com o sinalizador de configuração -no -tlsext. (Ao executar o script de configuração PERL). Porém, preste atenção que no OpenSSL 0.9.8N e OpenSSL 1.0.0, você precisará comentar algumas partes do código -fonte ou não será compilado - como a renegociação segura (que é considerada insegura por si só) requer isto.