Reemitir un certificado de portátil con el mismo nombre común parece un reemplazo, y todo el mundo asume que el anterior ha muerto. No es así. El predecesor sigue siendo un certificado válido firmado por la misma autoridad, y cualquier control que admita clientes por nombre seguirá admitiéndolo. Lo que separa una comprobación de identidad de una comprobación de credenciales es el número de serie, y ahí es donde corresponde la corrección.

Empiece por la política de nombres que usa el servidor

Se confunden dos controles: admitir a un cliente por quién dice ser y retirar del servicio un certificado concreto. El primero es una comprobación de nombre; el segundo, una comprobación de revocación. Responden a preguntas distintas, y un despliegue puede tener uno sin el otro.

Lea la configuración del servidor y anote qué fuente de identidad está en juego. username-as-common-name convierte el nombre de usuario autenticado en el nombre efectivo para las búsquedas específicas de cada cliente. Sin él, se usa el nombre común del sujeto del certificado. Sea cual sea la respuesta, anótela antes de tocar cualquier lista de permitidos.

Los dos caminos producen un conjunto distinto de nombres permitidos para el mismo certificado. Adivinar aquí significa editar el archivo equivocado y concluir que el control no funciona.

Compruebe qué admite realmente a un cliente

Un client-config-dir con un archivo coincidente proporciona opciones por cliente; por sí solo no es una regla de admisión. La admisión por nombre requiere ccd-exclusive, que rechaza a los clientes que no tienen un archivo coincidente. Activarlo en un despliegue en producción desconecta a todos cuyo nombre no tenga archivo, así que cuente los archivos antes de cambiar nada.

grep -nE 'ccd-exclusive|client-config-dir|username-as-common-name' /etc/openvpn/server/server.conf
ls -1 /etc/openvpn/ccd/

El recuento es la comprobación: compare el listado del directorio con las identidades que espera que se conecten.

Luego confirme que cada nombre de archivo coincide exactamente con la identidad efectiva, incluidas mayúsculas y minúsculas y espacios. Un archivo para office-laptop no hace nada por un certificado cuyo sujeto dice Office-Laptop. Los espacios finales también se ocultan de un listado simple, y así un archivo que parece estar presente queda sin leer.

Compruebe la CRL que carga la pasarela

Una CRL nombra los certificados revocados por emisor y número de serie, que es la granularidad de la que carece una comprobación de nombre. Dos certificados pueden compartir un nombre común y diferir en el número de serie, y solo una lista a nivel de número de serie los separa.

Confirme la ruta configurada, la fecha de emisión y el campo de próxima actualización antes de confiar en el archivo.

openssl crl -in /etc/openvpn/crl.pem -noout -lastupdate -nextupdate
openssl x509 -in office-laptop.crt -noout -serial -subject

Compare el número de serie de la CRL con el número de serie del certificado que piensa conservar. Esa comparación es toda la prueba, y hacerla una vez a ojo vale más que confiar en un script que nadie ha leído. Distribuya la CRL actualizada por la ruta que la pasarela ya lee. Una CRL en el directorio equivocado no impone nada, y ningún registro de cliente lo mencionará.

Reemplace y luego demuestre ambos resultados

Emita el reemplazo con el mismo nombre común, registre ambos números de serie y solo entonces revoque el antiguo. Ese orden mantiene disponible una identidad funcional mientras prepara el cambio.

Pruebe primero el reemplazo: debería autenticarse y llegar a todo aquello a lo que tiene derecho su nombre. Luego pruebe el certificado antiguo y confirme que se rechaza, porque un reemplazo correcto no dice nada sobre la revocación. Si ambos siguen conectándose, la entrada de revocación no se está leyendo o el número de serie antiguo nunca se incluyó. Si ninguno se conecta, ha roto la regla de admisión, no la credencial.

Las sesiones ya establecidas son otra cuestión, ya que la revocación se aplica a autenticaciones nuevas a menos que la pasarela también esté configurada para cortar conexiones activas. Decida si se requiere una retirada inmediata antes de prometerla a alguien.

Lo que una comprobación de nombre nunca puede hacer

Una lista de permitidos responde si esta identidad puede conectarse. No puede decir qué certificado usó esa identidad, y admitirá una credencial más antigua mientras la credencial siga siendo válida y no revocada. Esa laguna aparece durante un incidente, cuando el reemplazo se emitió hace meses y el predecesor sigue funcionando.

Donde se requiere control a nivel de certificado, use un mecanismo que nombre el certificado: entradas de CRL o un hook de verificación que compruebe una huella digital que mantenga el operador. Ambos cuestan mantenimiento, y ambos son honestos sobre el objeto que examinan. El manual de OpenVPN 2.6 documenta crl-verify y la admisión específica de cliente como opciones separadas por esa razón.

Anote qué control hace qué trabajo y luego pruebe el caso negativo. Una revocación que nunca ha visto rechazar una conexión es una configuración que espera que funcione.

Artículos relacionados