Primeiro, você tem certeza de que socat está usando o OpenSSL 1.1.0? Upstream (de socat.org) 1.7.2.4 source (lançado em 2014) não é compatível com o OpenSSL 1.1.0 (lançado em 2016) que fez mudanças significativas na API. Verifique ldd $(which socat)
. São (ambos) seu socat e OpenSSL de repositórios padrão, outros construtores / empacotadores ou construídos a partir do código-fonte?
De qualquer forma, embora "o que há de novo" não diga e assumindo seja qual for o patch "sig" não o altera, a fonte 1.7.2.4 (upstream) é padronizada para os parâmetros DH de 512 bits. Isso é realmente muito pequeno - era conhecido como breakable mesmo antes de Logjam, e inaceitável para qualquer cliente libssl de 1.0.1n ou 1.0.2b (ambos lançados em 2015-06) (e qualquer 1.1.0 , lançado pela primeira vez em 2016-08).
AFAICS suas alternativas são:
-
atualize o socat para pelo menos 1.7.3.0 (que no upstream tem 1024 bits); 3.1+ com 2048 bits é ainda melhor
-
gera ou obtém de algum lugar parâmetros DH de pelo menos 1024 bits (2048 é melhor para a maioria dos clientes, incluindo o seu, embora alguns clientes possam ter problemas como versões obsoletas do Java) e adicionar -los para o arquivo
cert
do seu servidor.Você pode gerar parâmetros DH com
openssl dhparam $n >file
, em que$n
é 1024 ou 2048. Se isso for muito lento você pode adicionar-dsaparam
. -
idem, mas coloque os parâmetros em um arquivo separado configurado no servidor. A página de manual diz que esta opção é
dhparams=<file>
, mas o código diz que édh=
e o teste confirma o último. -
configure o servidor ou o cliente, ou ambos em alguma combinação, para que eles não concordem em um ciphersuite que use o DHE; desde que o seu servidor é o único culpado aqui, pessoalmente eu iria configurar apenas o servidor. Novamente, a manpage diz
cipher
, mas a realidade éciphers
. Como o 1.7.2.4 não define os parâmetros 'tmp_ecdh' e (AFAICT) ele não pode usar o 1.1.0, ele não suportará o ECDHE, o que significa que sem o DHE suas conexões não terão o Perfect Forward Secrecy. Se você puder aceitar essa limitação, usar,ciphers='DEFAULT:!DHE'
no servidor é uma correção simples.(1.7.3.0 configuram 'tmp_ecdh' e suportam ECDHE, o que evitaria o problema aqui mesmo se eles não tivessem o DH-1024 padrão ou melhor, porque os pacotes ECDHE são preferidos em relação ao DHE, então o ECDHE seria selecionado e então os parâmetros DHE não são usados e não importam.)