Nada no certificado ou no endereço explica por que um iPhone que no ano passado se ligava ao strongSwan falha este ano. Nada no endereço, na chave pré-partilhada ou na identidade do cliente teve de mudar. O que mudou foi a lista de transformações que o cliente integrado do telefone está disposto a negociar, e assim que essa lista deixa de se sobrepor à do servidor, a troca termina antes de se examinar a identidade de alguém.

A linha de registo que decide

Aumente o nível de registo dessa ligação e encontre as duas entradas que decidem o resultado: o que o telefone ofereceu e o que o servidor escolheu. Se o registo termina sem uma proposta selecionada e relata que nada coincidiu, a autenticação nunca foi tentada. Um certificado novo e uma palavra-passe nova não mudam nada nesse ponto, porque ambos são consumidos numa fase posterior. Nenhum dos dois pode influenciar um resultado decidido antes de a identidade ser examinada.

Separe as duas formas de falha antes de editar o que quer que seja. Nenhuma edição das transformações salva credenciais rejeitadas, e nenhuma correção das credenciais salva uma transformação rejeitada. A entrada de registo que nomeia uma proposta selecionada diz-lhe em qual dos dois casos está. Sem essa entrada, está a adivinhar.

A linha selecionada nomeia a proposta pelo seu conjunto de transformações e não por um rótulo simpático. Compare os campos de cifra, integridade e grupo nessa linha com a lista que o telefone enviou, porque uma divergência em qualquer um dos campos basta para perder.

O que mudou no telefone

Uma versão do iOS reduziu os algoritmos que o cliente está disposto a usar. Hashes de integridade fracos, grupos Diffie-Hellman pequenos e propostas que listam opções antigas primeiro deixaram de ser aceitáveis.

Listas mais longas não são mais seguras aqui. A seleção segue o conjunto aceite do telefone e a sua própria ordem de preferência, por isso um servidor que anuncia um catálogo amplo pode ainda perder a negociação quando as entradas modernas não são as escolhidas. Prefira uma lista curta com as entradas modernas à frente. Uma lista longa que abre com opções antigas convida exatamente a falha que está a tentar evitar. O conjunto aceite é uma restrição externa que se desloca a cada atualização do cliente, portanto uma configuração que funcionava ontem é uma prova sobre ontem.

Um par que ainda negoceia

Para os telefones atuais basta uma única combinação moderna. Um par que negoceia tem este aspeto:

ike=aes256-sha2_256-modp2048
esp=aes256-sha2_256

A linha ike transporta a cifra, a integridade e o grupo Diffie-Hellman usados enquanto a troca de chaves decorre. A linha esp cobre apenas o canal de dados, porque o grupo já foi decidido antes de se aplicar. Recarregue a ligação ou reinicie o daemon e depois volte a ligar o telefone. Mantenha esse valor de grupo apenas se todos os clientes que serve ainda o aceitarem, e não alargue a proposta a todos só porque um par antigo precisa de mais.

Três locais para corrigir, um costuma estar fechado

  • Uma proposta moderna para cada par. Correto quando todos os clientes são telefones e computadores atuais. Apaga as transformações antigas em vez de negociar à volta delas.
  • Uma segunda definição de ligação para clientes Apple. Mantém um par antigo vivo e dá ao telefone uma proposta que ele aceita. Custa mais um bloco de ligação e torna a exceção visível.
  • Mudar o cliente. Raramente ao seu alcance: quando um sistema de gestão ou uma aplicação distribui o perfil, não há editor de propostas para tocar, e o cliente integrado não expõe nenhum.

Escolha a segunda opção quando um dispositivo fora do seu controlo não pode ser atualizado. Escolha a primeira quando pode retirar o par antigo e prefere transportar uma única política.

De qualquer forma, a escolha fica visível na configuração, e é esse o ponto. Uma reversão silenciosa que negoceia em baixa até uma transformação antiga é pior do que um bloco explícito, porque nenhuma revisão a trará alguma vez à superfície.

Prove-o e só depois registe

Volte a ligar e verifique três factos separados no servidor: foi selecionada uma proposta, a ligação aparece como estabelecida e o cliente recebeu um endereço. Um handshake estabelecido sem endereço remoto aponta para o pool ou para os seletores de tráfego, e pertence a uma alteração própria. Tratar as duas coisas em conjunto faz uma negociação resolvida parecer não resolvida.

Anote o conjunto de transformações que foi aceite, quando o alterou e que compilação do cliente verificou. A próxima atualização pode voltar a deslocar o requisito, e os valores que funcionaram são a primeira coisa que vai querer ter ao lado dos novos.

Artigos relacionados