AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1037018
Accepted
RobbieCrash
RobbieCrash
Asked: 2020-10-09 23:02:13 +0800 CST2020-10-09 23:02:13 +0800 CST 2020-10-09 23:02:13 +0800 CST

Os navegadores Chromium TLS1.2 falham com o certificado emitido pelo ADCS no Server 2012 R2

  • 772

tl; dr: TLS 1.2 entre o Server 2012 R2 e navegadores baseados em Chromium falha ao usar certificados emitidos pelo AD CS. Funciona bem no Server 2016+ e no 2012 R2 com Firefox/IE/Cygwin-curl.

Temos vários servidores Web Server 2012 R2 internos que estamos tentando migrar de certificados emitidos publicamente para aqueles emitidos por nossa CA integrada ao AD e eliminar configurações de criptografia menos seguras, incluindo CBC MAC. O Server 2012 R2 não oferece suporte a ECDHE_RSA com GCM, o que significa que estamos tentando usar um certificado baseado em ECDH. No entanto, enfrentamos um problema semelhante quando permitimos conjuntos de criptografia com CBC-MAC, como TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 com um certificado RSA emitido pela mesma CA. Usando nosso certificado curinga público emitido pela GlobalSign, podemos nos conectar com todos os navegadores.

A autoridade de certificação corporativa e a autoridade de certificação raiz offline são confiáveis ​​e verificamos que isso está funcionando corretamente. Os certificados que usam vários modelos diferentes emitidos para servidores de 2016 e 2019 funcionam sem problemas em todos os navegadores. Os modelos baseados em ECDH e RSA funcionam igualmente bem em 2016+.

Criptografia do modelo de certificado ECDH: Configurações de criptografia do modelo de certificado ECDH.

Criptografia do modelo de certificado RSA: Configurações de criptografia do modelo de certificado RSA.

Os certificados RSA e ECDH nos servidores 2012 R2 são aceitos pelo Firefox (uma vez que tenha sido informado para confiar neles por meio de política e configuração manual security.enterprise_roots.enabled), pré-Chromium Edge, IE e Cygwin curle wget. Confirmei que estamos usando cifras modernas no registro, redefinindo-as com IISCrypto e verifiquei se há cifras compatíveis disponíveis oferecidas pelo servidor com OpenSSL e nmap. Da mesma forma, confirmei que os clientes são realmente capazes de se conectar usando essas cifras.

O Firefox mostra que está se conectando com TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, que de acordo com Qualys é compatível com a versão do Chrome que estamos usando.

Com o ECDH

PORT    STATE SERVICE
443/tcp open  https
| ciphers:
|   TLSv1.1:
|     ciphers:
|       TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (secp256r1) - A
|     compressors:
|       NULL
|     cipher preference: server
|   TLSv1.2:
|     ciphers:
|       TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (secp256r1) - A
|       TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 (secp256r1) - A
|       TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (secp256r1) - A
|     compressors:
|       NULL
|     cipher preference: server
|_  least strength: A

Cada vez que tentamos conectar com o Chrome, um par de eventos 36874/36888 é registrado informando que não havia conjuntos de cifras compatíveis no cliente.

Uma lista dos conjuntos de cifras com os quais enfrentamos o problema ao usar um certificado emitido pela CA Enterprise, a maioria dos quais foi habilitada apenas para teste (avisos recortados):

PORT    STATE SERVICE
443/tcp open  https
| ciphers:
|   SSLv3:
|     ciphers:
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
|       TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
|       TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - C
|     compressors:
|       NULL
|     cipher preference: server
|     warnings:
|   TLSv1.0:
|     ciphers:
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 1024) - A
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 1024) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
|       TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
|       TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - C
|     compressors:
|       NULL
|     cipher preference: server
|   TLSv1.1:
|     ciphers:
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 1024) - A
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 1024) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
|       TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
|       TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - C
|     compressors:
|       NULL
|     cipher preference: server
|   TLSv1.2:
|     ciphers:
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
|       TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 1024) - A
|       TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 1024) - A
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 1024) - A
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 1024) - A
|       TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA256 (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
|       TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
|       TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - C
|     compressors:
|       NULL
|     cipher preference: server
|_  least strength: C

Minhas perguntas são:

  1. Por que os navegadores baseados em Chromium não conseguem negociar um conjunto de cifras quando existem conjuntos de cifras compatíveis oferecidos pelo servidor?
  2. O que preciso definir para permitir que o Server 2012 R2 use certificados emitidos internamente?
  3. Existe uma maneira melhor de lidar com o que estou tentando fazer, além de atualizar os servidores de aplicativos para 2016/2019? Neste ponto, parece que desabilitar completamente o TLS e colocar tudo atrás de um proxy LB/reverso pode ser uma ideia melhor, mesmo que sejam soluções de servidor único.

EDIT: Abri um bug com o Chromium e eles confirmaram que os conjuntos de cifras oferecidos pelo servidor devem ser aceitos pelo Chrome. Eles agora estão investigando depois que eu forneci o log de rede capturado via CHROME://Net-Export. Isso pode estar relacionado a um bug antigo do Chrome/2012 . Assim que o Google informar qual é o problema, atualizarei esta postagem novamente. No entanto, neste ponto, parece que não há nada de errado com a configuração do nosso lado.

Obrigado por olhar!

ssl google-chrome windows-server-2012-r2 microsoft-edge iis-8
  • 2 2 respostas
  • 665 Views

2 respostas

  • Voted
  1. Jesús Ángel
    2020-10-18T07:14:36+08:002020-10-18T07:14:36+08:00

    Certifique-se de que sua solicitação de assinatura de certificado (CSR) não esteja solicitando um certificado válido apenas para assinatura, em vez de assinatura e criptografia. Se o CSR solicitar um certificado válido apenas para assinatura e sua CA tiver uma política que permita a criptografia mesmo quando a solicitação foi apenas para assinatura, você provavelmente verá esse problema... às vezes. Claramente, um certificado solicitado apenas para assinatura não deve funcionar quando usado para criptografia, mas se sua CA substituir a solicitação para permitir a criptografia, isso criará uma situação em que a criptografia funcionará, mas apenas sob circunstâncias em que o cliente oferece suporte a alguns conjuntos de protocolos. Identificar certificados que causam esse problema é complicado.

    Tente capturar o tráfego entre o W2012 R2 e o Chrome usando wireshark. Se uma negociação de protocolo for o problema, você verá a conexão redefinida pelo servidor imediatamente após o cliente sugerir uma lista de conjuntos de cifras. Este pacote do cliente terá a informação de "client hello" seguido imediatamente de um TCP RST (reset) do servidor. Se você se aprofundar nos detalhes do pacote "client hello", poderá ver as suítes que o cliente está propondo.

    Para corrigir esse problema, você precisará certificar-se de que o certificado solicitado é para a finalidade correta ( https://docs.microsoft.com/en-us/archive/blogs/pki/how-to-create-a-web- server-ssl-certificate-manually ). É fundamental garantir que sua solicitação de certificado tenha os parâmetros corretos, incluindo o uso do certificado. Se você estiver usando o Windows PKI com modelos integrados ao AD, poderá "codificar" isso nos modelos, se desejar.

    • 1
  2. Best Answer
    RobbieCrash
    2020-10-20T14:47:05+08:002020-10-20T14:47:05+08:00

    O Google confirmou que este é um problema com a maneira como o Chromium lida com o ClientHello, como o IIS lida com as coisas em 2012 e o algoritmo usado na assinatura do certificado raiz da nossa CA raiz.

    O IIS em 2012r2 executa uma verificação com o ClientHello, em relação a cada certificado na cadeia. O Chrome não anuncia, mas oferece suporte ao certificado SHA-512, ECDH da CA raiz. Portanto, quando o IIS executa a verificação em toda a cadeia de certificados, ele vê que o Chrome oferece suporte para as cifras do servidor da Web, da nossa CA intermediária, mas que não oferece suporte para o (reconhecidamente exagerado), P-521 ECDH curva para que o IIS redefina a conexão. O Chrome não anuncia suporte para isso para lidar com casos extremos na confusão de mapeamentos de campo que é TLS1.2/1.3.

    A recomendação no meu relatório de bug com o Chromium era substituir a CA raiz ou atualizar para 2016/2019, onde isso não é mais um problema.

    • 1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve