Como remover a cifra RC4 do servidor https node.js em execução no Windows 2012 R2

6

O uso da verificação do ssllabs.com indica que o RC4 está em uso. Eu li que RC4 deve ser desativado por padrão no Windows 2012 R2. Estou executando um servidor node.js usando https.createServer e não especificando cifras (permitindo o padrão)

ssllabs.com diz:

This server accepts the RC4 cipher, which is weak

TLS_RSA_WITH_RC4_128_SHA (0x5)   WEAK
TLS_ECDHE_RSA_WITH_RC4_128_SHA (0xc011)   WEAK

Desativei o RC4 no registro por estas instruções: link

Eu também tentei especificar as cifras no nó createHttpsServer assim:

        ciphers:            
        [   "ECDHE-RSA-AES128-GCM-SHA256",
            "ECDHE-ECDSA-AES128-GCM-SHA256",
            "ECDHE-RSA-AES256-GCM-SHA384",
            "ECDHE-ECDSA-AES256-GCM-SHA384",
            "DHE-RSA-AES128-GCM-SHA256",
            "ECDHE-RSA-AES128-SHA256",
            "DHE-RSA-AES128-SHA256",
            "ECDHE-RSA-AES256-SHA384",
            "DHE-RSA-AES256-SHA384",
            "ECDHE-RSA-AES256-SHA256",
            "DHE-RSA-AES256-SHA256",
            "HIGH",
            "!aNULL",
            "!eNULL",
            "!EXPORT",
            "!DES",
            "!RC4",
            "!MD5",
            "!PSK",
            "!SRP",
            "!CAMELLIA"
        ].join(':'),
        honorCipherOrder:   true

Ainda recebo a mesma mensagem dizendo que RC4 está em uso e minha nota caiu de B para C, então a configuração da lista de códigos node.js tem um impacto.

Usar o IIS Crypto para desabilitar as cifras RC4 depois de clicar na opção de melhores práticas resultou em nenhuma diferença em meus resultados de verificação do ssllabs.

Eu suspeito que tenha algo a ver com a configuração do nó, mas até mesmo especificar a lista de cifras como mencionado acima ainda resulta na varredura dizendo que o RC4 está em uso.

Como faço para diagnosticar isso para desabilitar o RC4 ou descobrir onde ele está sendo usado para que eu possa desativá-lo?

    
por esnm 30.07.2015 / 20:20

3 respostas

2

Eu descobri a resposta.

As cifras padrão para o TLS são:

ECDHE-RSA-AES128-SHA256: DHE-RSA-AES128-SHA256: AES128-GCM-SHA256: RC4: ALTA:! MD5:! aNULL

Eu encontrei isso verificando a propriedade tls.DEFAULT_CIPHERS.

O aviso RC4 está incluído.

Assim, as cifras padrão para https eram boas, no entanto o tls tem seu próprio padrão de cifra.

    
por 10.08.2015 / 21:07
5

Desativar qualquer coisa no registro afeta apenas o que usa os componentes do Windows para RC4 (IIS / IE). O IIS Crypto também não está relacionado - já que você não está usando o IIS.

Mas você está usando o node.js criado em https.createServer . Todas as configurações relacionadas ao RC4 ocorrerão dentro do node.js (já que node.js não se importa com o registro).

Novos cifras melhores foram adicionadas ao node.js, que virão automaticamente com a próxima versão do node.js

Se você estiver usando node.js 0.12, atualize sua lista de códigos do fonte atual.

Parece que você especificou as cifras corretamente. Mas tem certeza de que esse é o código que você está executando? Se você estiver usando node.js 0.12 ou posterior, o RC4 estará desabilitado por padrão! Verifique se tudo está devidamente atualizado e as bibliotecas estão em ordem.

Quando você cria a instância do servidor incorporada, ela se parece com algo assim:

var server = https.createServer({
    key: privateKey,
    cert: certificate,
    ca: certificateAuthority,
    // default node 0.12 ciphers with RC4 disabled!!!
    ciphers: [
        "ECDHE-RSA-AES256-SHA384",
        "DHE-RSA-AES256-SHA384",
        "ECDHE-RSA-AES256-SHA256",
        "DHE-RSA-AES256-SHA256",
        "ECDHE-RSA-AES128-SHA256",
        "DHE-RSA-AES128-SHA256",
        "HIGH",
        "!aNULL",
        "!eNULL",
        "!EXPORT",
        "!DES",
        "!RC4",
        "!MD5",
        "!PSK",
        "!SRP",
        "!CAMELLIA"
    ].join(':'),
    honorCipherOrder: true
}, app);

Se você estiver usando um node.js recente, não deverá especificar cifras, mas apenas usar os padrões. No entanto, pode ser prático listá-los para fins de depuração.

Para depuração simples, simplesmente continue usando o SSL Labs. Se o SSL Labs ainda disser que o RC4 está ativado - tente desativar um dos outros conjuntos de criptografia para verificar se você está realmente alterando o código real que está sendo usado. Se você não vir nenhuma alteração, alterne para o Fiddler para garantir que estamos falando com o servidor correto.

O var agent = new https.Agent assim chamado "config" não é relevante. Esse snippet está criando um https.Agent (cliente) e especifica com quais cifras você gostaria de se conectar. Você então se conectará com uma dessas cifras se elas forem oferecidas pelo servidor. A parte interessante é https.createServer

Entenda que quando você navega pelo servidor e define os cabeçalhos usando o Fiddler - então você está fazendo o mesmo que var agent = new https.Agent . Você solicita qual pacote de criptografia você gostaria de usar. Tente solicitar o RC4 usando apenas o Fiddler e veja se ele é aceito. Então você deve olhar o que volta do servidor para verificar se você está realmente "falando" com a instância node.js que você pensa que é!

O snippet acima e as instruções passo a passo para A + podem ser encontradas em CertSimple

Etapas de solução de problemas:

  1. Verifique a versão node.js

  2. Verifique a versão do nó / lib / tls.js

  3. Verifique se você está se conectando à instância node.js correta (iniciar / conectar / parar / conectar)

  4. Defina o Fiddler para aceitar apenas RC4

Se o Fiddler se conectar com o RC4, você precisará modificar algum código. Se o Fiddler não puder se conectar com o RC4 - e o SSL Labs ainda assim o faz - então você tem um proxy (ou alguma outra coisa!) Entre o seu node.js e o SSL Labs.

Atualização: Se o Fiddler é muito difícil de configurar - então algumas ferramentas práticas para verificar cifras aceitas pelo servidor podem ser encontradas em Superusuário

    
por 05.08.2015 / 15:54
2

Acho que a configuração do registro afeta apenas os navegadores, portanto, você precisaria definir suas cifras em node.js . Isso é o que funcionou para mim:

var agent = new https.Agent({
  "key": key,
  "cert": cert,
  "ciphers": 'EECDH+AES128:EECDH+3DES:EDH+3DES:!SSLv2:!MD5:!DSS:!aNULL',
  "honorCipherOrder": true
});
    
por 30.07.2015 / 20:35