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?