Pausar el acceso de un cliente y eliminarlo para siempre parecen la misma tarea hasta que intenta deshacer una de las dos cosas. Revocar un certificado escribe un registro que el servidor trata como definitivo, y revertirlo significa editar a mano la base de datos del emisor. Descartar el túnel vivo es una orden de gestión que no cambia nada en la confianza. Elija la palanca preguntando si la clave sigue siendo digna de confianza, no preguntando cuán urgente parece la petición.

La creencia: revocado y suspendido son lo mismo

Un contratista se pausa durante una semana y el reflejo es revocar, porque revocación suena a apagar algo. Parece ordenado, tarda diez segundos y deja una edición de la base de datos como único camino de vuelta. El reflejo es comprensible y está más cerca de quemar un pasaporte que de cerrar una puerta. Un dispositivo pausado y una clave comprometida necesitan un trato distinto, y solo uno de los dos es barato de revertir.

La distinción es sobre la credencial y no sobre la persona. Una clave que sigue en las manos correctas se puede pausar y reanudar sin ninguna pérdida de confianza. Una clave que puede haber sido copiada no debería restaurarse nunca, porque restaurar afirma que la copia no existe.

Escriba la respuesta antes de tocar cualquiera de los dos sistemas. Si no puede decir si la clave está expuesta, la respuesta conservadora es la sustitución.

Descarte la sesión viva con la interfaz de gestión

OpenVPN expone una interfaz de gestión que puede listar sesiones y matar una de ellas por nombre común. Actívela en localhost, manténgala lejos de la interfaz pública y envíe la orden de matar cuando una sesión tenga que desaparecer ya. La orden cierra solo ese túnel, y todos los demás clientes siguen funcionando.

Esto es una respuesta a un problema activo, no una política de suspensión. El mismo perfil puede reconectarse en un minuto, porque nada de su credencial ha cambiado. Úsela cuando la sesión debe irse y la decisión duradera aún se está tomando.

Confirme que la sesión estaba conectada antes de matarla, para no perseguir un cliente que nunca se conectó. La orden de estado de abajo imprime lo que está conectado ahora.

printf 'status 2\nquit\n' | nc 127.0.0.1 7506
printf 'kill kiosk-14\nquit\n' | nc 127.0.0.1 7506

Si la orden de matar informa que no existe tal cliente, el nombre común del certificado no es la cadena que escribió. Lea la salida de estado en lugar del nombre del archivo de perfil.

Qué controla realmente la CRL

El servidor no consulta una bandera de revocación guardada en el certificado. Lee la lista de revocación de certificados indicada por crl-verify, en cada conexión nueva, y rechaza un certificado cuyo número de serie aparezca en esa lista. De ahí se siguen dos consecuencias, y ambas importan operativamente. El archivo debe ser legible por la cuenta a la que el servidor baja privilegios, y un cliente ya conectado sigue funcionando hasta que se reconecta.

Esa segunda consecuencia sorprende a la gente durante los incidentes. Revocar un certificado no cierra el túnel que lo está usando ahora mismo. Empareje la revocación con una muerte de gestión si la sesión tiene que terminar de inmediato, y trate las dos acciones como pasos separados del manual.

Inspeccione la lista para ver qué aplicará realmente el servidor, en lugar de fiarse de la marca de tiempo del último archivo que copió. El recuento de series es la parte que importa.

openssl crl -in /etc/openvpn/server/crl.pem -noout -text | sed -n '1,14p'
ls -l /etc/openvpn/server/crl.pem

Una lista sin entradas y una lista con las entradas correctas se ven idénticas en un listado de directorio, por eso vale la pena imprimir el recuento de series. La línea de permisos importa igual, porque un archivo que el demonio no puede leer produce un fallo que parece un cliente rechazado.

Restaurar un registro, con cuidado

Restaurar un certificado significa invertir un registro en la base de datos de emisión y publicar una lista nueva. easy-rsa 3 guarda esa base como index.txt dentro del directorio PKI, mientras que las disposiciones más antiguas usaban otro arreglo. Una fila empieza con una letra de estado y una fecha de caducidad. Una fila revocada inserta una marca de tiempo para la revocación antes de continuar con el número de serie, el nombre del archivo del certificado y el nombre distinguido. Devolver una fila a su sitio significa borrar esa marca de tiempo y girar la letra, dejando todo lo demás en paz.

Haga primero una copia de seguridad del archivo, y escriba la edición como script en lugar de teclear en un editor de texto. Una errata que cambia cuántos campos lleva una fila rompe la emisión de cada certificado añadido después. Esa es la razón para automatizar el cambio y copiar el archivo antes de tocarlo.

Una segunda revocación del mismo nombre a menudo también falla, porque la primera ejecución trasladó ese certificado y su clave fuera de los directorios donde la herramienta espera encontrarlos. La herramienta entonces no puede encontrar lo que se le pidió revocar, y el mensaje de error no siempre aclara por qué.

cp /etc/easy-rsa/pki/index.txt /root/index.txt.$(date +%F-%H%M)
grep -c '^R' /etc/easy-rsa/pki/index.txt
easyrsa gen-crl

Publique la lista nueva, corrija su propiedad y haga que el servidor la lea. Una recarga basta en la mayoría de las instalaciones, pero la confirmación tiene que venir de una conexión nueva, ya que la sesión existente no volvió a comprobar nada.

Compruebe qué palanca merece el caso

Haga la pregunta que decide todo el manual: la clave privada sigue estando solo donde debe estar. Si lo está, la muerte de la sesión más una pausa documentada cubre el caso y no deja ningún registro permanente. Si no lo está, la única respuesta segura es una clave nueva con el certificado viejo dejado como revocado.

Luego verifique el resultado con un intento de conexión y no con una diferencia de configuración. La diferencia le dice qué pretendía, y la conexión le dice qué aplica el servidor.

openssl crl -in /etc/openvpn/server/crl.pem -noout -text | grep -c 'Serial Number'
printf 'status 2\nquit\n' | nc 127.0.0.1 7506

Cuando un cliente restaurado se conecta y aparece en la salida de estado, la edición del registro funcionó. Cuando un cliente revocado es rechazado y el registro nombra la CRL, la revocación funcionó. Cualquier cosa intermedia es un problema de permisos o de recarga, y vale la pena arreglarlo antes de que llegue la petición siguiente.

Artículos relacionados