Depois de atualizar meu iPhone 6+ do iOS 8 para o iOS 9, minha conta de email IMAP parou de funcionar. Quando o aplicativo de email tenta se conectar ao servidor, ele falha e exibe um alerta com o título "Não é possível obter email" e a mensagem "O servidor de email xyz não está respondendo. Verifique se você inseriu as informações corretas da conta nas configurações de email. "
Eu verifiquei as informações da conta e está realmente correta. Curiosamente, não recebo nenhuma mensagem de erro do aplicativo de configurações quando tento salvar a conta. Tentei inserir informações incorretas de propósito (nome de usuário, senha incorretos, porta TCP incorreta) e sempre que faço isso e tento salvar a conta, o aplicativo de configurações exibe um alerta "O servidor IMAP xyz não está respondendo". Então, eu estou realmente certeza de que a informação que eu tenho introduzido está correcto.
Além disso, eu tenho dois outros dispositivos iOS em casa (um iPad 2 e um iPhone 4S) configurados para usar a mesma conta e que ainda estão no iOS 8 - a partir desses dispositivos, a conta funciona corretamente, então eu também sei que o problema não é algo básico, como o servidor IMAP está inoperante.
Eu tentei várias coisas (veja abaixo), mas sem sucesso. A única coisa que sei com certeza é que o problema está de alguma forma conectado ao TLS e / ou certificados. Levando em conta as informações desta pergunta AskDifferent , suspeito que seja um problema com o certificado CAcert, mas não tenho certeza.
Você sabe alguma coisa sobre as alterações no iOS 9 em relação à manipulação de certificados (não confiáveis ou não)? Ou você tem outras pistas que podem me ajudar a resolver esse problema?
Informações sobre o servidor:
- O servidor IMAP é executado em uma máquina Debian sobre a qual eu tenho controle total
- O servidor IMAP é Courier IMAP
- O servidor IMAP aceita conexões na porta IMAP padrão 143
- O servidor IMAP exige que o STARTTLS imponha que todo o tráfego seja criptografado via TLS
- O servidor IMAP usa um certificado curinga
- O servidor IMAP fornece toda a cadeia de certificados ao cliente
- A CA raiz é CAcert.org ( link para certificados de CA raiz e intermediária )
- Como o CAcert.org não está, por padrão, no repositório de CA confiável do iOS 9, instalei manualmente os certificados de CA raiz e intermediária no iPhone 6+
- Versão Courier = 0.73.1 (
/usr/bin/imapd --version
) - Versão do OpenSSL = 1.0.2d (
/usr/bin/openssl version
)
O que eu tentei?
- A primeira coisa que fiz foi excluir a configuração da conta inteira no aplicativo de configurações do iPhone, criar uma nova conta e inserir novamente os detalhes da configuração. Sem sucesso.
- Atualizei vários pacotes na máquina Debian, incluindo Courier e OpenSSL, para garantir que o servidor tenha os "melhores e mais recentes" recursos de segurança. Sem sucesso.
- Eu li em algum lugar que iOS 9 pode exigir TLS 1.2 no lado do servidor, então eu verifiquei que o servidor IMAP oferece, de facto essa versão do TLS aos seus clientes. Faz. Este é o comando que eu usei para verificação:
openssl s_client -connect mail.herzbube.ch:143 -starttls imap
. Se você executar isso, verá um bloco com informações sobre a sessão SSL no final, esse bloco conterá uma linha que mostra a versão do TLS usada (Protocol : TLSv1.2
). Observe que, para obter o TLS v1.2, sua versão do OpenSSL do lado do cliente também deve suportar isso. Por exemplo, o OpenSSL no meu laptop Mac OS X Yosemite (10.10.3) é muito antigo, ou seja, é apenas a versão 0.9.8.zd e parece não entender o TLS 1.2, pelo que entendiProtocol : TLSv1
. - Excluí os certificados raiz e intermediário do CAcert no iPhone e os reinstalei. Não, não ajudou.
- Desativei temporariamente o requisito do TLS no lado do servidor, e isso resolve o problema, ou seja, agora o aplicativo Mail pode se conectar, fazer login e receber e-mails do servidor. Obviamente, essa não é uma solução real, pois não quero que o tráfego para o servidor IMAP seja em texto não criptografado, mas pelo menos agora sei que o problema está de alguma forma conectado ao TLS (e / ou certificados).
- Atualizei o iPhone para o iOS 9.0.1. Sem sucesso.
fonte
openssl s_client
para verificar se o servidor tem capacidade para TLS 1.2, e o resultado desse teste foi positivo. Se não é isso que você quer dizer, você pode ser mais específico?openssl
. Também entendi claramente que você precisa dar suporteTLSv1
ao MacOS X 10.10.3. O que não estava claro (para mim) é seiOS9
ainda está a falhar no contextoTLSv1.2
única . Quero dizer, estáiOS9
fechando a compatibilidade comTLSv1
, ou seja,iOS9
implementa: "Se o servidor tiver esse recurso, eu me recuso a falar com ele!" ?.Respostas:
Acontece que, no meu caso, o problema não é o certificado CAcert, nem a versão TLS - são as cifras de criptografia oferecidas pelo OpenSSL no servidor, ou melhor, que algumas delas usam parâmetros muito fracos.
Quando a Apple lançou a atualização do iOS 8.4 há um tempo, eles fizeram melhorias em sua biblioteca TLS
coreTLS
para evitar o chamado ataque Logjam. É seguro supor que essas melhorias também fazem parte do iOS 9. Como a Apple menciona nesta nota técnica ,coreTLS
não aceita mais pacotes de cifras DH efêmeros com força de exportação. No meu caso, esse não é o problema, porque meu servidor não oferece essas cifras para seus clientes.O que a Apple "esqueceu" de dizer em sua nota técnica é que eles também adicionaram novos requisitos para as demais cifras DH. Nisso, eles provavelmente seguiram o Guide to Deploying Diffie-Hellman for TLS , que é um documento "oficial" com recomendações feitas pelas pessoas que descobriram o ataque Logjam. Especificamente,
coreTLS
agora exige que os conjuntos de cifras DH usem um tamanho mínimo de grupo DH.O "grupo DH" é um parâmetro para cifras DH cuja força é medida pelo seu tamanho em bits. O guia mencionado acima menciona que os navegadores modernos agora exigem um tamanho mínimo de grupo DH de 1024. Aparentemente
coreTLS
, também adotou esse requisito, porque foi o que descobri no meu servidor ...O servidor IMAP Courier possui a seguinte linha em seu arquivo de configuração
/etc/courier/imapd-ssl
:Quando examino o arquivo de parâmetros DH, recebo a seguinte saída:
Como pode ser visto, esse grupo DH possui apenas um tamanho de 768 bits, o que definitivamente não está de acordo com os padrões modernos.
Para resolver o problema, criei um novo grupo DH com tamanho aumentado. Segui o conselho do "Guide to Deploying DH" e criei um grupo com tamanho 2048 bits:
Altere as permissões do novo arquivo para que correspondam às permissões do arquivo original:
Atualizei o arquivo de configuração do Courier IMAP:
e reiniciou o servidor
Depois disso, o aplicativo Mail funcionou bem. Problema resolvido.
PS: Acima, eu disse que as
coreTLS
alterações foram enviadas com o iOS 8.4, mas, na minha pergunta, afirmo que tenho dispositivos iOS 8 que não apresentam problemas de conexão IMAP. Ambas as afirmações são verdadeiras, mas agora percebo que esqueci de mencionar na minha pergunta que esses dispositivos iOS 8 ainda estão usando o iOS 8.1.x. Desculpe por isso.Testes adicionais de protocolo: brinquei com a configuração Courier IMAP
TLS_STARTTLS_PROTOCOL
, para forçar o cliente (aplicativo iOS 9 Mail) a uma versão específica do protocolo TLS. Estranhamente, descobri que nem o TLSv1.2 nem o TLSv1.1 parecem funcionar (o SSL3 também não funciona, mas tudo bem). A única opção que funciona é(isso permanece verdadeiro mesmo depois que eu atualizei o tamanho do grupo DH)
Testei as mesmas configurações com o iOS 8.1.2 - lá, o aplicativo Mail pode conectar-se às 3 versões do protocolo (TLSv1.2, TLSv1.1, TLS1) e até SSL3.
Isso é muito, muito estranho. Embora seja difícil de acreditar, no momento parece que o aplicativo iOS 9 Mail pode usar apenas o TLS1. Apesar das melhorias na segurança na frente da cifra DH, não oferecer suporte ao TLSv1.2 seria uma regressão ruim, IMO. Também pode ser que meu servidor esteja de alguma forma configurado incorretamente de uma maneira que não reconheço no momento. Portanto, seria útil se outra pessoa pudesse fazer testes semelhantes para confirmar ou descartar minhas descobertas.
fonte
chmod 600 /etc/courier/dhparams…
→chmod 400 /etc/courier/dhparams…
. (falta de retorno) Resposta técnica de alto nível :)!mkdhparams
ler mais. Presumo que qualquer pessoa que esteja lendo esta resposta será capaz de descobrir as permissões corretas (especialmente proprietário / grupo) para o seu tipo de sistema.Eu tenho o mesmo problema, mas ainda não tenho resposta. Espero que eu esteja me aproximando de uma solução e que tenha informações pertinentes para você.
Eu tenho o problema do iOS 9 conforme descrito no meu Courier IMAP, mas não no meu SASL SMTP AUTH. A criptografia nos 2 servidores é semelhante.
Notavelmente, ambos usam certificados autoassinados.
Aqui estão as saídas "openssl s_client" que eu estou olhando:
Portanto, agora estou analisando a diferença entre "ECDHE" e "DHE" e se as chaves públicas do servidor de 4096 x 2048 bits fazem a diferença.
Estou apenas assumindo que a Apple está mantendo STARTTLS para SMTP e IMAP com os mesmos padrões ...
fonte
/etc/courier/dhparams.pem
.O e-mail estava funcionando bem no iOS 9.1 até eu alterar o "alerta" em Notificações para "alerta" hoje. Em seguida, recebi uma mensagem dizendo algo como "Não é possível receber o correio" e que eu estava usando as informações de login incorretas. (Desculpe, não me lembro do texto exato da mensagem.) Tentei duas vezes e recebi a mesma mensagem nas duas vezes, mas lembrei-me imediatamente do que havia alterado em "Configurações" hoje mais cedo e voltei para Configurações> Notificações> Estilo de notificações> Correio> Estilo de alerta e, em seguida, selecione "Nenhum". Quando voltei ao meu aplicativo Mail, funcionou bem novamente. (Eu uso o GMail.)
fonte
nós tivemos o mesmo problema em nossa empresa. Temos quase a mesma configuração Debian, Courier IMAP e IOS9. Para nós, ele se resolveu quando usamos a porta 143 para a conexão ssl imap.
fonte