Eliminar archivos temporales RSA en Windows Server 2019 de forma segura

Millones de ficheros de 4 KB bloquean tu servidor: se multiplican en C:\Windows\ServiceProfiles\LocalService\AppData\Roaming\Microsoft\Crypto\RSA, no se dejan borrar y amenazan con saturar el disco. Esta guía explica qué son, por qué se acumulan y cómo eliminarlos sin romper nada.

Índice

Entendiendo la carpeta RSA en el perfil LocalService

La carpeta pertenece al perfil interno LocalService, una cuenta que Windows usa para ejecutar numerosos servicios con privilegios limitados. Dentro de …\Microsoft\Crypto\RSA se almacenan contenedores de clave privada creados por la pila criptográfica del sistema (CryptoAPI o CNG). Cada archivo —identificado por un GUID y la extensión .tmp, .prv o sin extensión— encapsula:

  • El par de claves RSA (pública y privada).
  • Los metadatos que le asignan un proveedor criptográfico.
  • La ACL que liga el contenedor al proceso que lo creó.

En condiciones normales son pocos y efímeros: nacen cuando un proceso necesita firmar o descifrar y mueren cuando la clave deja de ser útil.

Mecanismo de creación de los contenedores

Al servir un sitio HTTPS en IIS, negociar TLS con RDP, validar firmas de código o levantar túneles VPN, Windows solicita claves temporales a través de CryptAcquireContext o NCryptCreatePersistedKey. Si el llamador pide contenedor “new key set”, el motor crea un sub‑archivo en la carpeta RSA del perfil que ejecute el proceso:

C:\Windows\ServiceProfiles\LocalService\AppData\Roaming\Microsoft\Crypto\RSA\{6a56…-…-…}

Los atributos principales del archivo son:

AtributoPropósito
Nombre (GUID)Evitar colisiones entre procesos concurrentes.
Tamaño ≈ 4 KBSuficiente para contener claves RSA ≤ 4096 bits y metadatos.
Propietario = SID del procesoImpide que otros servicios accedan a la clave.

Por qué una carpeta criptográfica se vuelve infinita

Cuando aparecen cientos de miles o millones de contenedores, casi siempre hay un bucle de creación sin reciclaje. Los escenarios más comunes son:

Servicios que generan certificados efímeros. Ciertos proxies SSL, antivirus con inspección TLS o agentes de escucha de Kubernetes emiten nuevos certificados en caliente y descuidan la limpieza.

Aplicaciones que usan run‑as o perfiles desechables. Cada instancia levanta un perfil temporal; al cerrarse, el perfil se elimina y con él la referencia al contenedor, que pasa a estar “huérfano”.

Errores tras actualizaciones. Un parche de Windows o del proveedor introduce un cambio en CNG; los servicios crean la clave pero fallan al registrarla, dejando el archivo atrás.

Riesgos de eliminar sin un plan

  • Interrupción de TLS. IIS, WinRM o RDP podrían no encontrar su clave y rechazar conexiones.
  • Fallos de arranque. Servicios firmados digitalmente que verifican su propia firma necesitan la clave aún montada.
  • Pérdida de datos cifrados. Si la clave se usó para cifrar tokens o archivos, estos quedarán ilegibles.

Por eso primero hay que identificar qué claves están “abandonadas” y cuáles siguen vivas.

Diagnóstico: quién está llenando la carpeta y por qué

Process Monitor en modo traza ligera

1. Descarga Process Monitor y crea un filtro:

Path contains Crypto\RSA  → Include

2. Reinicia el servicio sospechoso y observa qué ejecutable abre archivos nuevos. Apunta el PID y la ruta.

Visor de eventos

  • Schannel / System. Errores de certificado o negociaciones fallidas indican bucles TLS.
  • CAPI2 / Microsoft‑Windows‑Crypto‑API. Entradas 4112 y 5125 revelan fallos al persistir contenedores.
  • KeyIso / Service. Alertas 272 y 275 indican claves no limpias.

Scripts de PowerShell para cuantificar el problema

$path  = 'C:\Windows\ServiceProfiles\LocalService\AppData\Roaming\Microsoft\Crypto\RSA'
$items = Get-ChildItem $path -File -ErrorAction SilentlyContinue
$items.Count
$items | Group-Object Extension | Select-Object Count,Name

Así obtienes el número total y la distribución por tipo de archivo.

Preparar el entorno antes de borrar

  1. Parchea el sistema. Instala todas las actualizaciones de Windows Server 2019 y del software afectado.
  2. Detén el servicio implicado. Sin su bloqueo, los contenedores pueden cambiar de propietario.
  3. Crea una copia de seguridad. Exporta la carpeta a un ZIP o copia a disco externo; si algo falla puedes restaurar.

Tomar posesión y otorgar permisos de administración

Por diseño, los archivos son propiedad del proceso que los creó; la cuenta Administrators no siempre tiene acceso directo. Desbloquéalos:

@echo off
setlocal
set TARGET="C:\Windows\ServiceProfiles\LocalService\AppData\Roaming\Microsoft\Crypto\RSA"
takeown /f %TARGET% /r /d y /a
icacls  %TARGET% /grant Administrators:F /inheritance:e /t
endlocal

Limpieza selectiva con PowerShell

Borrar según antigüedad

Eliminar todo lo viejo preserva las claves generadas recientemente — las más probables de estar en uso.

$cutoff = (Get-Date).AddDays(-30)   # ajusta el umbral
Get-ChildItem $path -File |
  Where-Object { $_.LastWriteTime -lt $cutoff } |
  Remove-Item -Force

Análisis por tamaño

Si los contenedores válidos deberían ser mayores (por ej. 8 KB porque usan RSA‑4096) puedes filtrar:

Get-ChildItem $path -File |
  Where-Object { $_.Length -lt 5000 } |
  Remove-Item -Force

Uso de WinPE o Modo seguro

Cuando ningún servicio puede detenerse (por ejemplo, en un controlador de dominio crítico), arranca con WinPE y ejecuta la limpieza sin cargar los servicios dependientes.

Verificación posterior

  • Vuelve a iniciar los servicios detenidos. Observa el Visor de eventos 10–15 min.
  • Lanza pruebas de conectividad: Invoke-WebRequest para IIS, mstsc para RDP, openssl s_client desde otra máquina.
  • Revisa de nuevo la carpeta RSA. ¿El contador se mantiene estable? Has eliminado solo residuos.

Estrategias de prevención a largo plazo

EstrategiaAcción prácticaBeneficio
Persistencia de clavesConfigura aplicaciones para reutilizar contenedores en lugar de «new key set» cada vez.Elimina la creación masiva de archivos.
Tareas de mantenimientoPrograma un Scheduled Task mensual que ejecute el script de limpieza.Evita que la carpeta crezca sin control.
Cuotas y alertasActiva cuotas de disco o monitoriza el contador de archivos con PerfMon y alertas SNMP.Detecta derivas antes de agotar espacio.
Auditoría CAPI2Habilita la canalización, nivel Verbose.Identifica procesos que crean claves desechables.

Preguntas frecuentes

¿Puedo eliminar toda la carpeta RSA sin más?
No. Muchos servicios almacenan en ella claves persistentes. Borra solo los archivos que cumplas criterios de antigüedad o confirma que el servicio está detenido.

¿Por qué incluso takeown dice «Acceso denegado»?
Si el archivo está abierto por un proceso con privilegios de Sistema, Force Del o handle.exe –c pueden liberar el handle. En casos extremos, solo WinPE.

¿Es mejor mover la carpeta a otra unidad?
No está soportado; romperías rutas de sistema. Usa puntos de montaje NTFS si el disco C: es muy pequeño.

Conclusión

Los millones de archivos en …\Crypto\RSA no son virus ni basura aleatoria: son contenedores de claves legítimos. Su exceso indica un servicio que crea claves temporales sin eliminarlas. Para recuperar el espacio sin dañar el servidor: identifica primero el origen, actualiza el software, toma posesión de los archivos, elimina solo los contenedores huérfanos y establece tareas de prevención.

Índice