Windows Server 2008 R2 - Conjuntos de cifras baseados em SHA2

2

Atualmente, estou atualizando os certificados SSL para vários sites que eu gerencio de certificados compatíveis com SHA1 para SHA2.

Até hoje, sempre usamos o 'RSA' como mecanismo de troca de chaves em nossos certificados SSL e, portanto, decidi continuar fazendo isso ao gerar a Solicitação de assinatura de certificado para os certificados de substituição.

Dentro do meu ambiente de desenvolvimento, substituí vários certificados e priorizei conjuntos de cifras baseados em SHA256 (SHA-2) nos servidores da Web.

Tenho notado que o Google Chrome 42 e o Firefox 37.0.2 ainda estão selecionando um conjunto de códigos baseado em SHA1 TLS_RSA_WITH_AES_256_CBC_SHA . (Eu ainda não testei corretamente o Internet Explorer)

Para determinar quais conjuntos de criptografia o Chrome 42 e o Firefox 37.0.2 suportam, executei um rastreamento de rede e localizei o TLSCipherSuites dentro do ClientHello .

Chrome 42:

TLSCipherSuites: Unknown Cipher
TLSCipherSuites: Unknown Cipher
TLSCipherSuites: Unknown Cipher
TLSCipherSuites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 { 0xC0,0x2B }
TLSCipherSuites: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 { 0xC0,0x2F }
TLSCipherSuites: TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 { 0x00, 0x9E }
TLSCipherSuites: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA { 0xC0,0x0A }
TLSCipherSuites: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA { 0xC0,0x14 }
TLSCipherSuites: TLS_DHE_RSA_WITH_AES_256_CBC_SHA { 0x00, 0x39 }
TLSCipherSuites: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA { 0xC0,0x09 }
TLSCipherSuites: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA { 0xC0,0x13 }
TLSCipherSuites: TLS_DHE_RSA_WITH_AES_128_CBC_SHA { 0x00, 0x33 }
TLSCipherSuites: TLS_ECDHE_ECDSA_WITH_RC4_128_SHA { 0xC0,0x07 }
TLSCipherSuites: TLS_ECDHE_RSA_WITH_RC4_128_SHA { 0xC0,0x11 }
TLSCipherSuites: TLS_RSA_WITH_AES_128_GCM_SHA256 { 0x00, 0x9C }
TLSCipherSuites: TLS_RSA_WITH_AES_256_CBC_SHA { 0x00, 0x35 }
TLSCipherSuites: TLS_RSA_WITH_AES_128_CBC_SHA { 0x00, 0x2F }
TLSCipherSuites: TLS_RSA_WITH_RC4_128_SHA { 0x00,0x05 }
TLSCipherSuites: TLS_RSA_WITH_RC4_128_MD5 { 0x00,0x04 }
TLSCipherSuites: TLS_RSA_WITH_3DES_EDE_CBC_SHA { 0x00,0x0A }
TLSCipherSuites: Unknown Cipher

Firefox 37.0.2:

TLSCipherSuites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 { 0xC0,0x2B }
TLSCipherSuites: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 { 0xC0,0x2F }
TLSCipherSuites: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA { 0xC0,0x0A }
TLSCipherSuites: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA { 0xC0,0x09 }
TLSCipherSuites: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA { 0xC0,0x13 }
TLSCipherSuites: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA { 0xC0,0x14 }
TLSCipherSuites: TLS_DHE_RSA_WITH_AES_128_CBC_SHA { 0x00, 0x33 }
TLSCipherSuites: TLS_DHE_RSA_WITH_AES_256_CBC_SHA { 0x00, 0x39 }
TLSCipherSuites: TLS_RSA_WITH_AES_128_CBC_SHA { 0x00, 0x2F }
TLSCipherSuites: TLS_RSA_WITH_AES_256_CBC_SHA { 0x00, 0x35 }
TLSCipherSuites: TLS_RSA_WITH_3DES_EDE_CBC_SHA { 0x00,0x0A }

servidor da Web

Meus servidores da Web estão executando o Windows Server 2008 R2 e oferecem suporte aos seguintes conjuntos de criptografia (observação - essa é a ordem de preferência padrão, desde que eu priorizei todos os conjuntos baseados em SHA256:

TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,
TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_3DES_EDE_CBC_SHA,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P384,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384,
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256,
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384,
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P384,
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P384,
TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,TLS_DHE_DSS_WITH_AES_256_CBC_SHA,
TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA,TLS_RSA_WITH_RC4_128_MD5,SSL_CK_RC4_128_WITH_MD5,
SSL_CK_DES_192_EDE3_CBC_WITH_MD5,TLS_RSA_WITH_NULL_SHA256,TLS_RSA_WITH_NULL_SHA

O único conjunto de criptografia SHA256 presente no Windows Server 2008 R2 que é suportado pelo Chrome 42 e pelo Firefox 37.0.2 é TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (que no Server 2008 R2 tem _P256 anexado ao nome). Mas para suportar esse conjunto, eu teria que reemitir nossos certificados alterando o mecanismo de troca de chaves usando RSA to ECDSA (algoritmo de assinatura digital de curva elíptica). Na verdade, eu tentei isso e funciona bem - mas muitos navegadores mais antigos não suportam criptografia de curva elíptica. Então, isso não é uma solução viável.

  • Existe uma maneira de fazer com que o Firefox e o Chrome selecionem um conjunto de criptografia SHA256 em um servidor da Web do Windows Server 2008 R2 que não rompa a compatibilidade com navegadores mais antigos?
  • É possível adicionar conjuntos de criptografia ao SO?


28/04/15 UPDATE:
Agradecemos a todos aqueles que responderam pela clareza adicional em relação ao algoritmo de troca de chaves e ao algoritmo de assinatura.

Eu gostaria que navegadores que fossem capazes de usar um conjunto de cifras SHA256 executassem autenticação de mensagens usando o SHA2 para fazer isso.

Mas o problema continua sendo o dos conjuntos de criptografia SHA256 disponíveis no Windows Server 2008 R2, o único com suporte no Chrome e no Firefox é TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 . E para usar este conjunto de criptografia, eu preciso de um certificado assinado pelo ECDSA.

Pelo que entendi, a Elliptic Curve Cryptography não tem suporte em alguns navegadores / sistemas operacionais mais antigos. Como mencionei na minha pergunta (embora eu tenha terminado a terminologia errada), eu criei um certificado assinado pelo ECDSA e embora eu não tenha feito testes extensivos, até agora eu vi que o IE7 e o IE8 rodando no Windows XP SP3 falham ao carregar meus sites (por HTTPS) e simplesmente produza uma mensagem "O Internet Explorer não pode exibir a página da Web".

Concedido, o Windows XP agora é um sistema operacional obsoleto, mas estou preocupado que os navegadores / sistemas operacionais "antigos", mas ainda "suportados", possam falhar da mesma maneira. Portanto, estou interessado em encontrar uma solução usando um certificado assinado pela RSA - mas isso parece ser impossível. Estou certo sobre isso?

    
por Fitzroy 27.04.2015 / 13:52

3 respostas

6

As referências SHA256 que você vê nas listas de ciphersuite não são para certificados. Em vez disso, eles estão relacionados à função pseudo-aleatória do TLS e à integridade da mensagem.

O suporte ao certificado é independente do ciphersuite do TLS.

Todas as versões do Firefox e do Chrome (e versões recentes do IE) suportam certificados SHA256 se o sistema operacional também as suportar, o que para o cliente Windows é o XP SP3 e superior. O Server 2008 R2 tem suporte total ao certificado SHA256.

    
por 28.04.2015 / 14:23
3

Você não deseja priorizar o algoritmo MAC SHA256 além das outras partes do conjunto de criptografia. É a parte menos importante. O conjunto de criptografia que você deve ter no topo de sua lista de prioridades hoje em um servidor IIS 7.5 é:

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P521

As partes críticas a serem procuradas são:

  • A cifra de troca de chaves (ECDHE é a melhor curva elíptica de velocidade, Ephemeral Diffie-Hellman para sigilo de encaminhamento)
  • RSA como o algoritmo de assinatura de certificado - como você descobriu, os certificados mais recentes do ECDSA têm problemas de compatibilidade com clientes mais antigos
  • Cifra simétrica. O AES GCM 128 bit é o melhor, mas você não pode ter isso e também manter o ECDHE / RSA no Windows atualmente. O próximo melhor é o AES CBC (128 ou 256 bits).

Você deve usar o IIS Crypto ( link ) e selecionar a opção de melhores práticas. Isso lhe dará a melhor ordenação de conjunto de criptografia que você pode obter no IIS atualmente.

Veja também minha resposta para esta pergunta:

Altere o mecanismo de troca de chaves no IIS 8

Codificações habilitadas para o Windows Server 2008 R2 após aplicar as práticas recomendadas do IIS Crypto:

ToobtaintheserversidelistIgenerallyuseacompiledversionofthecodeavailablehereunder"Listing Supported Cipher Suites";

https://msdn.microsoft.com/en-us/library/windows/desktop/bb870930(v=vs.85).aspx

I've uploaded a version I compiled to Dropbox if you wish to use it (at your own risk, I take no responsibility. But it's safe!)

https://www.dropbox.com/s/mvajmebtyilgics/listciphers.exe?dl=0

    
por 29.04.2015 / 09:37
2

A resposta de "Richie Frame" está no ponto. Não é o SHA256 dentro da assinatura a que a string do conjunto de cifras se refere. Mas além da resposta de Richie, aqui está um petisco adicional:

But in order to support this suite, I would have to reissue our certificates changing the key exchange mechanism from using 'RSA' to 'ECDSA' (Elliptic Curve Digital Signature Algorithm).

Você não pode fazer isso. O mecanismo de troca de chaves de sessão é não codificado dentro do próprio certificado.

Você está misturando algoritmo de troca de chaves e algoritmo de assinatura. A confusão é porque o RSA pode fazer troca de chaves e assinaturas.

É mais ou menos assim:

  • Para a instalação típica antiga, você teria um certificado assinado por RSA e também faria a troca de chaves de sessão via RSA.

  • Para a instalação de tipo mais recente, você teria um certificado assinado por RSA e faria a troca de chave de sessão Diffie-Hellman. Em seguida, autentique essa troca de chave anônima usando as chaves RSA do certificado.

  • Para a instalação do tipo de ponta hoje, você teria um certificado assinado pelo ECDSA e faria a troca de chave de sessão do Elliptic-Curve-Diffie-Hellman (ECDH). Em seguida, autentique essa troca de chave anônima usando as chaves ECDSA do certificado.

Atualização 2015-04-29: Use sha256rsa cert

Therefore, I am interested in finding a solution using an RSA signed certificate - but that appears to be impossible. Am I right about this?

Não. Felizmente você está errado. Você pode usar os dois no mesmo certificado. SHA256 como função de hash unidirecional e RSA como algoritmo de assinatura. (Esta combinação específica tem o codinome "sha256WithRSAEncryption". Mas há muitos outros.) (Dê uma olhada no link . Eles estão usando isso combinação exata agora.)

Para compatibilidade, recomendo que você leia o blog de Ivan Ristić.

Ivan Ristić, Reprovação SHA1: o que você precisa saber (Arquivado aqui .)

Um dos links nesse blog é para a tabela de Compatibilidade GlobalSign SHA-256. Essa pode ser particularmente interessante para você.

Atualização 2015-04-29: você quer algo com "RSA_WITH"
Se você tiver um certificado RSA, estará usando a criptografia RSA. O bit de criptografia no descritor do conjunto de cifras string o bit pouco antes do " WITH ".

Então, no seu caso, você quer algo com "RSA_WITH" no meio. Eu peguei estes da lista do Firefox que você fez acima:

TLSCipherSuites: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 { 0xC0,0x2F }
TLSCipherSuites: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA { 0xC0,0x13 }
TLSCipherSuites: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA { 0xC0,0x14 }
TLSCipherSuites: TLS_DHE_RSA_WITH_AES_128_CBC_SHA { 0x00, 0x33 }
TLSCipherSuites: TLS_DHE_RSA_WITH_AES_256_CBC_SHA { 0x00, 0x39 }
TLSCipherSuites: TLS_RSA_WITH_AES_128_CBC_SHA { 0x00, 0x2F }

E não se preocupe com o "SHA" ou "SHA256" no final de cada string. Isso não se refere ao que está no certificado. Refere-se ao mesmo algoritmo, mas não à sua aplicação dentro do certificado.

    
por 28.04.2015 / 14:30