Comprobar el archivo security.txt

Obtenga /.well-known/security.txt de un sitio y compruébelo según RFC 9116: campos obligatorios, fecha de caducidad, HTTPS y si el archivo está firmado.

Para qué sirve security.txt

Cuando alguien encuentra una vulnerabilidad en su sitio, lo difícil suele ser averiguar a quién avisar. security.txt (RFC 9116) es un archivo de texto breve en /.well-known/security.txt que responde a eso: una línea Contact con una dirección de correo o una página para enviar informes, y una línea Expires que indica hasta cuándo se puede confiar en la información. Ambas son obligatorias. Los campos opcionales añaden una clave de cifrado, la política de divulgación, los idiomas preferidos, la URL canónica del archivo, un enlace a los agradecimientos y las ofertas de empleo en seguridad.

Qué comprueba esta herramienta

Solicita https://<domain>/.well-known/security.txt y, si no está ahí, la ubicación antigua /security.txt. Sigue unas pocas redirecciones e informa de la URL final. Después analiza los campos y señala lo que pide RFC 9116: falta de Contact o de Expires, más de un Expires, una fecha que no está en el formato exigido, una fecha pasada, una fecha a más de un año vista, un archivo servido por HTTP sin cifrar o con un certificado no válido, enlaces que usan http:, un campo Canonical que no coincide con la URL en la que se encontró el archivo, y si el archivo lleva una firma OpenPGP en texto claro.

Muchos sitios responden a cualquier ruta desconocida con su página de inicio y el estado 200. Por eso una respuesta HTML se trata como «no encontrado», no como un security.txt defectuoso. Y si la petición falla, el resultado es «no se pudo comprobar»: la herramienta nunca da un archivo por ausente a causa de un tiempo de espera agotado.

Mantener el archivo útil

Un archivo caducado es el hallazgo más frecuente, porque Expires es obligatorio y fácil de olvidar. Fíjelo a menos de un año vista y anote la renovación en el mismo calendario que sus certificados y dominios. Use una dirección que llegue a personas que puedan actuar, no un buzón personal, y firme el archivo si quiere que quienes informan puedan verificarlo.

Cómo usar esta herramienta

  1. Introduzca el dominio. Escriba o pegue un nombre de dominio como example.com. También sirve una URL completa: se eliminan el esquema, la ruta y el www inicial.
  2. Obtenga el archivo. La herramienta solicita /.well-known/security.txt por HTTPS y, si no lo obtiene, recurre a /security.txt.
  3. Revise los hallazgos. Se indican la ausencia de Contact o Expires, una fecha vencida, el uso de HTTP sin cifrar y el estado de la firma, junto con todos los campos encontrados.

Equivalente en la línea de comandos

La misma comprobación desde un terminal. Los comandos usan example.com: sustitúyalo por su propio nombre.

  • El propio archivocurl -sL https://example.com/.well-known/security.txt
  • Código de estado y tipo de contenidocurl -sIL https://example.com/.well-known/security.txt | grep -iE "^HTTP|^content-type"
  • Verificar la firma de un archivo firmadocurl -sL https://example.com/.well-known/security.txt | gpg --verify

Preguntas frecuentes

¿Dónde se coloca security.txt?

En https://example.com/.well-known/security.txt, servido por HTTPS como text/plain. El /security.txt en la raíz es una ubicación heredada; si la usa, redirija a la ruta well-known.

¿Qué campos son obligatorios?

Contact (al menos uno) y Expires (exactamente uno, con el formato 2027-01-31T23:59:59Z). Todo lo demás es opcional.

¿Hace security.txt que mi sitio sea más seguro?

No. Hace más fácil contactar con usted cuando alguien encuentra un problema, lo que acorta el tiempo que una vulnerabilidad permanece abierta. No dice nada sobre la seguridad del sitio.

¿Debo firmar el archivo?

RFC 9116 recomienda una firma OpenPGP en texto claro para que quien informa pueda saber que el archivo no lo colocó un atacante. La herramienta indica si hay un bloque de firma; no verifica la firma.

La herramienta dice «no encontrado», pero veo una página en mi navegador. ¿Por qué?

Probablemente su servidor responde a las rutas desconocidas con una página HTML y el estado 200. Eso no es un archivo security.txt, así que se indica como no encontrado.