openvpn, opção tls-cipher não funciona, nenhuma cifra compartilhada

openvpn, opção tls-cipher não funciona, nenhuma cifra compartilhada

enquanto experimentava configurar o openvpn, me deparei comessa dica em um site. diz que você pode limitar a lista de cifras, para evitar ataques de downgrade. eu testei em uma lan com 2 computadores, ambos rodando um kubuntu 14.04 com OpenVPN 2.3.2.

no server.conf no servidor openvpn, inseri esta linha

tls-cipher TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256

executando openvpn --show-tlse comparando a saída, certifiquei-me de que cada uma das cifras da linha acima é conhecida pela minha versão do openvpn (tanto no servidor quanto no cliente).

mas quando eu inicio o openvpnserver e o cliente depois, o servidor está me dando a seguinte saída

Fri Sep 25 12:31:59 2015 "THECLIENTSIP":38749 TLS: Initial packet from [AF_INET]"THECLIENTSIP":38749, sid=d9c33d37 653b2f0e Fri Sep 25 12:32:00 2015 "THECLIENTSIP":38749 TLS_ERROR: BIO read tls_read_plaintext error: error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher Fri Sep 25 12:32:00 2015 "THECLIENTSIP":38749 TLS Error: TLS object -> incoming plaintext read error Fri Sep 25 12:32:00 2015 "THECLIENTSIP":38749 TLS Error: TLS handshake failed Fri Sep 25 12:32:00 2015 "THECLIENTSIP":38749 SIGUSR1[soft,tls-error] received, client-instance restarting sem essa opção tls-cipher funciona bem.

não entendo por que diz "sem cifra compartilhada". é errado listar as cifras separadas por dois pontos? ou qual é o problema aqui?

obrigado por ler. espero que alguém possa me ajudar.

editar substituí a linha no server.conf por tls-cipher TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256 para ver o que acontece. e a saída do servidor openvpn é a mesma.

editar 2

estava pesquisando mais e encontrei esse sitehttps://community.openvpn.net/openvpn/wiki/Hardening e agora entendi que o OpenVpn 2.3.2 só tem suporte para conjuntos de criptografia SSLv3/TLSv1.0. mas openvpn --show-tlstambém mostra conjuntos de criptografia TLSv1.2

Limitar as opções TLSv1.0 DHE + RSA produz a lista a seguir, adequada para pares <=2.3.2. É melhor evitar as escolhas de DES, especialmente DES único (conhecido como muito fraco).

TLS-DHE-RSA-COM-AES-256-CBC-SHA

TLS-DHE-RSA-COM-CAMÉLIA-256-CBC-SHA

TLS-DHE-RSA-COM-3DES-EDE-CBC-SHA

TLS-DHE-RSA-COM-AES-128-CBC-SHA

TLS-DHE-RSA-COM-SEMENTE-CBC-SHA

TLS-DHE-RSA-COM-CAMÉLIA-128-CBC-SHA

TLS-DHE-RSA-COM-DES-CBC-SHA

Evite todos os conjuntos de cifras DES: DES é conhecido por ser muito fraco (3DES-EDE ainda está bom) Evite todos os conjuntos de cifras RC4: RC4 é conhecido por ser fraco Evite todos os conjuntos de cifras EXPORT: EXPORT foi especificado como fraco há muitos anos

e funciona quando eu uso uma dessas cifras no server.conf, por exemplo tls-cipher TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA

infelizmente naquela página não está escrito exatamente como posso conseguir isso sozinho... alguém sabe?

como TLSv1.0 é SSLv3 e openvpn diz que usa OpenSSL, tentei obter essas informações via OpenSSL, filtrando com grep, openssl ciphers -v | grep SSLv3 | grep Kx=DH mas a saída é diferente (por exemplo, a palavra COM não aparece nessa lista)

assumindo que talvez haja apenas uma diferença na notação, tentei substituir algum texto por openssl ciphers -v | grep SSLv3 | grep Kx=DH | grep DHE-RSA | sed 's/DHE-RSA/TLS-DHE-RSA-WITH/g' | awk '{print $1}' impressões sed:

TLS-DHE-RSA-WITH-AES256-SHA TLS-DHE-RSA-WITH-CAMELLIA256-SHA TLS-DHE-RSA-WITH-AES128-SHA TLS-DHE-RSA-WITH-SEED-SHA TLS-DHE-RSA-WITH-CAMELLIA128-SHA

mas ainda não é a mesma lista do "artigo Hardening openvpn" e não tenho certeza, se esse é o caminho certo de qualquer maneira ...

nesse siteo uso de DHE-RSA-AES256-SHA é recomendado. então, presumo que a cifra tls mais segura que posso usar com openvpn 2.3.2 é TLS-DHE-RSA-WITH-AES-256-CBC-SHA. mas essa resposta é de novembro de 2013. essa ainda é a melhor escolha? de alguma forma, esta é uma questão diferente agora. mas trata-se de encontrar a opção de cifra tls mais segura.

editar 3 ok, eu poderia enviar esse comando openssl-grep-sed

openssl ciphers -v | grep SSLv3 | grep Kx=DH | grep DHE-RSA | sed 's/DHE-RSA/TLS-DHE-RSA-WITH/g' | sed 's/SHA/CBC-SHA/g'| awk '{print $1}'

impressões:

TLS-DHE-RSA-WITH-AES256-CBC-SHA TLS-DHE-RSA-WITH-CAMELLIA256-CBC-SHA TLS-DHE-RSA-WITH-AES128-CBC-SHA TLS-DHE-RSA-WITH-SEED-CBC-SHA TLS-DHE-RSA-WITH-CAMELLIA128-CBC-SHA

agora é a mesma lista daquele artigo sem a entrada DES e 3DES.

então este é agora o resultado certo? porque esta solução é baseada apenas na suposição de que há apenas uma diferença na notação entre a saída do comando openssl -v e o comando openvpn --show-tls.

editar 4 não, desculpe, não era a mesma lista daquele artigo sem aquela entrada DES e 3DES.. agora é:

openssl ciphers -v | grep SSLv3 | grep Kx=DH | grep DHE-RSA | sed 's/DHE-RSA/TLS-DHE-RSA-WITH/g' | sed 's/SHA/CBC-SHA/g'| sed 's/AES/AES-/g' | sed 's/CAMELLIA/CAMELLIA-/g' | awk '{print $1}' impressões:

TLS-DHE-RSA-WITH-AES-256-CBC-SHA TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA TLS-DHE-RSA-WITH-AES-128-CBC-SHA TLS-DHE-RSA-WITH-SEED-CBC-SHA TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA

mas isso é uma bagunça, não é? e só funciona assim, se a lista de nomes das cifras não crescer.

desculpe, se a "pergunta" pode ser confusa... por favor, comente, muito obrigado se você pelo menos tirou um tempo para ler isso!

Responder1

Eu não acho que o OpenVPN ainda suporta ECDHE - eu tentei o OpenVPN 2.3.4 no Debian 8.3 (estável) e 2.3.10 no teste Debian como servidor, e nenhum deles funciona quando o tls-cipher é especificado com um ciphersuite ECDHE, conectando-se a partir de um Cliente Windows executando 2.3.10. Até agora apenas os DHE funcionam.

informação relacionada