iOS rechazó tu túnel strongSwan: compara las propuestas IKE
Una dirección que funciona y un certificado válido todavía pueden perder la negociación. Compara las líneas ike y esp con lo que acepta el teléfono.
Nada en el certificado ni en la dirección explica por qué un iPhone que el año pasado se conectaba a strongSwan falla este año. No tiene por qué haber cambiado nada de la dirección, de la clave precompartida ni de la identidad del cliente. Lo que se movió es la lista de transformaciones que el cliente integrado del teléfono está dispuesto a negociar, y en cuanto esa lista deja de solaparse con la del servidor, el intercambio termina antes de que se examine la identidad de nadie.
La línea de registro que lo decide
Sube el nivel de registro de esa conexión y busca las dos entradas que deciden el resultado: qué ofreció el teléfono y qué eligió el servidor. Si el registro acaba sin una propuesta seleccionada e informa de que nada coincidió, la autenticación nunca se intentó. Un certificado nuevo y una contraseña nueva no cambian nada en ese punto, porque ambos se consumen en una etapa posterior. Ninguno de los dos puede influir en un resultado que se decidió antes de examinar la identidad.
Separa las dos formas de fallo antes de editar nada. Ninguna edición de las transformaciones rescata unas credenciales rechazadas, y ninguna corrección de las credenciales rescata una transformación rechazada. La entrada del registro que nombra una propuesta seleccionada te dice en cuál de las dos estás. Sin esa entrada, estás adivinando.
La línea seleccionada nombra la propuesta por su conjunto de transformaciones y no por una etiqueta amable. Compara los campos de cifrado, integridad y grupo de esa línea con la lista que envió el teléfono, porque una discrepancia en cualquiera de los campos basta para perder.
Qué cambió en el teléfono
Una versión de iOS recortó los algoritmos que su cliente está dispuesto a usar. Los hashes de integridad débiles, los grupos Diffie-Hellman pequeños y las propuestas que listan opciones antiguas primero dejaron de ser aceptables.
Las listas más largas aquí no son más seguras. La selección sigue el conjunto aceptado del teléfono y su propio orden de preferencia, así que un servidor que anuncia un catálogo amplio puede perder igualmente la negociación cuando las entradas modernas no son las que se eligen. Prefiere una lista corta con las entradas modernas delante. Una lista larga que empieza con opciones antiguas invita exactamente al fallo que intentas evitar. El conjunto aceptado es una restricción externa que se mueve cada vez que el cliente se actualiza, así que una configuración que funcionaba ayer es una prueba sobre ayer.
Una pareja que todavía negocia
Para los teléfonos actuales basta una sola combinación moderna. Una pareja que negocia tiene este aspecto:
ike=aes256-sha2_256-modp2048
esp=aes256-sha2_256
La línea ike lleva el cifrado, la integridad y el grupo Diffie-Hellman que se usan mientras transcurre el intercambio de claves. La línea esp solo cubre el canal de datos, porque el grupo ya se decidió antes de que se aplique. Recarga la conexión o reinicia el demonio y luego vuelve a conectar el teléfono. Conserva ese valor de grupo solo si todos los clientes a los que sirves todavía lo aceptan, y no amplíes la propuesta para todos solo porque un par antiguo necesita más.
Tres sitios donde arreglarlo, uno suele estar cerrado
- Una propuesta moderna para cada par. Correcto cuando todos los clientes son teléfonos y equipos actuales. Borra las transformaciones antiguas en lugar de negociar alrededor de ellas.
- Una segunda definición de conexión para clientes de Apple. Mantiene vivo un par antiguo a la vez que da al teléfono una propuesta que acepta. Cuesta otro bloque de conexión y hace visible la excepción.
- Cambiar el cliente. Rara vez a tu alcance: cuando un sistema de gestión o una aplicación distribuye el perfil, no hay editor de propuestas que tocar, y el cliente integrado no expone ninguno.
Elige la segunda opción cuando un dispositivo fuera de tu control no se puede actualizar. Elige la primera cuando puedes jubilar el par antiguo y prefieres llevar una sola política.
De cualquier forma, la elección es visible en la configuración, y de eso se trata. Una caída silenciosa que negocia a la baja hasta una transformación antigua es peor que un bloque explícito, porque ninguna revisión la sacará nunca a la luz.
Demuéstralo y luego anótalo
Vuelve a conectar y comprueba tres hechos separados en el servidor: se seleccionó una propuesta, la conexión aparece como establecida y el cliente recibió una dirección. Un handshake establecido sin dirección remota apunta al grupo o a los selectores de tráfico, y pertenece a un cambio propio. Tratar las dos cosas juntas hace que una negociación resuelta parezca no resuelta.
Anota el conjunto de transformaciones que se aceptó, cuándo lo cambiaste y qué compilación del cliente verificaste. La próxima actualización puede volver a mover el requisito, y los valores que funcionaron son lo primero que querrás tener junto a los nuevos.