security.txt checker

Fetch /.well-known/security.txt from a site and check it against RFC 9116: required fields, the expiry date, HTTPS and whether the file is signed.

What security.txt is for

When someone finds a vulnerability in your site, the hard part is often finding out whom to tell. security.txt (RFC 9116) is a short text file at /.well-known/security.txt that answers that: a Contact line with an e-mail address or a reporting page, and an Expires line that says until when the information may be relied on. Both are required. Optional fields add an encryption key, the disclosure policy, preferred languages, the canonical URL of the file, a link to acknowledgments and security job openings.

What this tool checks

It requests https://<domain>/.well-known/security.txt and, if that is not there, the older location /security.txt. It follows a few redirects and reports the final URL. Then it parses the fields and flags what RFC 9116 asks for: a missing Contact or Expires, more than one Expires, a date that is not in the required format, a date in the past, a date more than a year away, a file that was served over plain HTTP or with an invalid certificate, links that use http:, a Canonical field that does not match the URL the file was found at, and whether the file carries an OpenPGP cleartext signature.

Many sites answer every unknown path with their home page and status 200. An HTML answer is therefore treated as "not found", not as a broken security.txt. And if the request fails, the result is "could not be checked": the tool never reports a missing file because of a timeout.

Keeping the file useful

An expired file is the most common finding, because Expires is mandatory and easy to forget. Set it less than a year ahead and put the renewal in the same calendar as your certificates and domains. Use an address that reaches people who can act, not a personal mailbox, and sign the file if you want reporters to be able to verify it.

How to use this tool

  1. Enter the domain. Type or paste a domain name such as example.com. A full URL works too: the scheme, path and a leading www are removed.
  2. Fetch the file. The tool requests /.well-known/security.txt over HTTPS and falls back to /security.txt.
  3. Review the findings. Missing Contact or Expires, an expired date, plain HTTP and the signature state are listed, along with every field that was found.

Command line equivalent

The same check from a terminal. The commands use example.com: replace it with your own name.

  • The file itselfcurl -sL https://example.com/.well-known/security.txt
  • Status code and content typecurl -sIL https://example.com/.well-known/security.txt | grep -iE "^HTTP|^content-type"
  • Verify the signature of a signed filecurl -sL https://example.com/.well-known/security.txt | gpg --verify

FAQ

Where does security.txt go?

At https://example.com/.well-known/security.txt, served over HTTPS as text/plain. The top-level /security.txt is a legacy location; if you use it, redirect it to the well-known path.

Which fields are required?

Contact (at least one) and Expires (exactly one, in the format 2027-01-31T23:59:59Z). Everything else is optional.

Does security.txt make my site more secure?

No. It makes it easier to reach you when somebody finds a problem, which shortens the time a vulnerability stays open. It says nothing about the site's security.

Should I sign the file?

RFC 9116 recommends an OpenPGP cleartext signature so that a reporter can tell the file was not placed by an attacker. The tool reports whether a signature block is present; it does not verify the signature.

The tool says "not found" but I see a page in my browser. Why?

Your server probably answers unknown paths with an HTML page and status 200. That is not a security.txt file, so it is reported as not found.