Cyber Resilience Act Response Center Request a demoDemo

Guide Last updated 13 min read

security.txt under RFC 9116 and BSI TR-03183-3: a guide for manufacturers

The Cyber Resilience Act requires a contact address through which third parties can report vulnerabilities. It does not specify the form. In Germany, BSI TR-03183-3 describes what this address should look like: a security.txt file under RFC 9116. This guide goes through what belongs in it, field by field.

A security.txt file is a small text file at /.well-known/security.txt on the manufacturer's website. It tells security researchers, customers and authorities where to report a vulnerability. Regulation (EU) 2024/2847 requires such a contact address in Annex I, Part II, point (6), and a single point of contact in Article 13(17), but does not prescribe a format. BSI TR-03183-3, a technical guideline from the German Federal Office for Information Security (BSI), fills that gap: a security.txt file under RFC 9116 as the minimum requirement, plus an OpenPGP signature, an expiry date no more than one year ahead and two functional mailboxes, psirt@ for products and csirt@ for your own IT.

Free toolsecurity.txt generatorEnter your domain and get a ready-made file under RFC 9116 and TR-03183-3. Every field explained, checked before download. Runs in the browser, no sign-up.Create the file Free toolsecurity.txt checkerIs your file already online? The checker tests retrieval, structure, expiry date, links, keys and signature against RFC 9116 and TR-03183-3, and tells you how to fix each finding.Check the file

Key points

  • The Regulation requires a contact address (Annex I, Part II, point (6)) and a single point of contact (Article 13(17)), but no format. Annex I applies to products placed on the market from 11 December 2027.
  • BSI TR-03183-3 is voluntary, but it is the only guidance from a public authority that spells this out. It requires Contact, Expires, Canonical, Encryption, Preferred-Languages, Policy and an OpenPGP signature.
  • Two roles sit behind the address: a PSIRT for products (psirt@) and a CSIRT for your own infrastructure (csirt@). Only microenterprises may combine both in one person.
  • Response times under the TR: a first response within 5 working days, detailed feedback within 10 working days, publication of confirmed vulnerabilities within 90 days.
  • Under the TR, Expires should be no more than one year in the future; the TR requires a review at least every quarter.

What does the Regulation require, and from when?

Three provisions of the Regulation concern the reporting address. Annex I, Part II, point (6), requires manufacturers to provide a contact address for reporting vulnerabilities they discover. Annex I, Part II, point (5), requires a coordinated vulnerability disclosure policy, which the security.txt file points to. Article 13(17) calls for a single point of contact that enables users to communicate "directly and rapidly" with the manufacturer, including to report vulnerabilities. It must be easily identifiable, appear in the information and instructions to the user under Annex II, and allow users to choose their preferred means of communication.

According to the Commission guidance C(2026) 5252 (paragraph 210), the obligations in Annex I, Part II apply to products placed on the market from 11 December 2027. The reporting address still matters today: the reporting obligation under Article 14 has applied since 11 September 2026 and starts when the manufacturer becomes aware. Without a working address, you learn about a vulnerability later than you need to. The Regulation does not specify the format. In Germany, BSI TR-03183-3 "Vulnerability Reports and Notifications" (version 1.0.0, 20 August 2025) is the benchmark. It is voluntary, a harmonised standard (prEN 40000-1-3) has not yet been published in the Official Journal, and there is no evidence that market surveillance will use the TR as its benchmark. It is, however, the only description from a public authority, and a file that meets it also meets RFC 9116.

What is security.txt and where does the file go?

RFC 9116 is an IETF publication from April 2022, an RFC in the Informational category. It sets out how a website announces its security contacts in machine-readable form: in a plain-text file in the format "field name: value", one entry per line, with comments starting with a hash sign. The file sits at /.well-known/security.txt and is served over HTTPS; tools used by security researchers and authorities read it automatically. The TR additionally requires (section 4.2.1) HTTPS with at least HTTP/1.1 and plain text in ASCII or UTF-8, and under section 4.2.11 that firewalls and DDoS protection do not block retrieval by checking services; the content type text/plain is prescribed by RFC 9116.

In section 4.5, the TR also requires a reporting web page, linked from the home page and usable without JavaScript or a login. The security.txt file points to it.

Which fields belong in it?

RFC 9116 defines eight fields, two of which are mandatory. The TR makes four more mandatory, also requires a signature and adds a field from the CSAF standard, the format for machine-readable security advisories. The table shows both levels.

FieldRFC 9116BSI TR-03183-3Content
ContactMandatory, may appear more than once; the first entry is taken as preferredMandatory; first entry the address of the PSIRT functional mailbox, second that of the CSIRT, third the address of the reporting page (4.2.3)mailto, tel or https address
ExpiresMandatory, once; recommended less than a year aheadMandatory; should be no more than one year in the future, "T" and "Z" in upper case, review at least every quarter (4.2.9)Date under RFC 3339, for example 2027-10-01T00:00:00.000Z
CanonicalOptionalMandatory; reachable without a redirect (4.2.2)The https address of the file itself
EncryptionOptionalMandatory for all contact addresses; direct download of the key file with fingerprint (4.2.4, 4.3.2)Address of the OpenPGP key
Preferred-LanguagesOptional, onceMandatory; at least "en" (4.2.6)Language tags under RFC 5646
PolicyOptionalMandatory; points to the coordinated vulnerability disclosure policy (4.2.7)Address of the CVD policy
AcknowledgmentsOptionalRecommended (4.2.5)Page naming those who have reported vulnerabilities (Hall of Fame)
HiringOptionalNot requiredSecurity job vacancies
CSAFNot in RFC 9116; extension from OASIS CSAF 2.0, Requirement 8Recommended (4.2.8)Address of the provider-metadata.json file, through which tools find your security advisories

The signature

Section 2.3 of RFC 9116 recommends signing the file with OpenPGP (clearsign: the readable file with the signature attached). The TR makes this mandatory in section 4.2.10: under RFC 9580, preferably with a dedicated key whose validity must not exceed five years. The signature proves that the file comes from the manufacturer and not from an attacker trying to divert reports.

Which roles and response times sit behind the address?

A security.txt file is only as good as the mailbox behind it. In sections 4.3 and 4.4, the TR describes what running it involves.

  • Two roles. A PSIRT (Product Security Incident Response Team) for vulnerabilities in products, a CSIRT (Computer Security Incident Response Team) for your own infrastructure. Each gets a functional mailbox, psirt@ and csirt@, and its own OpenPGP key. Except in microenterprises, the two roles must not be held by a single person (section 4.3.1). Reports must at least be processed in English.
  • Web form. Under section 4.3.3 there has to be a form that also allows anonymous reports. It supplements e-mail; it does not replace it.
  • Daily test. The TR recommends testing the mailboxes and the form every day with an automated test message.
  • Response times. Under section 4.4.8, the reporter receives a response within 5 working days that is not automatically generated. Detailed feedback follows within 10 working days: confirmation or rejection, follow-up questions, or an explanation of the delay with a commitment to a further update within 10 working days. This does not apply to anonymous reports.
  • Four-eyes principle. Under section 4.4.7, no analyst may close a report alone.
  • Disclosure. Under section 4.4.10, a confirmed vulnerability is published within 90 days, extendable once by 90 days in consultation with the national CSIRT, which in Germany is CERT-Bund.

These time limits come from the TR alone; neither the Regulation nor the Commission guidance sets response times for reporting addresses. Article 14 is a separate matter: for an actively exploited vulnerability, the 24-hour deadline runs from awareness, regardless of working days (see When does the 24-hour deadline start?).

What does a complete file look like?

The following example for a fictitious manufacturer contains all the mandatory and recommended fields of the TR. Only the signature is missing; OpenPGP wraps it around the file when you sign.

# Our canonical URI
Canonical: https://www.example-machinery.com/.well-known/security.txt

# Our security addresses
Contact: mailto:psirt@example-machinery.com
Contact: mailto:csirt@example-machinery.com
Contact: https://www.example-machinery.com/security-contact

# Our OpenPGP keys
Encryption: https://www.example-machinery.com/.well-known/psirt-example-machinery.asc
Encryption: https://www.example-machinery.com/.well-known/csirt-example-machinery.asc

# Our preferred languages
Preferred-Languages: en, de

# Our security policy
Policy: https://www.example-machinery.com/security-policy

# Our security advisories
CSAF: https://www.example-machinery.com/.well-known/csaf/provider-metadata.json

# Our security acknowledgements page
Acknowledgments: https://www.example-machinery.com/security-acknowledgments

Expires: 2027-10-01T00:00:00.000Z

The comments follow the wording the TR specifies, the PSIRT address comes before the CSIRT address, each Encryption field points to a key file, and Expires is less than a year in the future. The security.txt generator creates your own file in this structure from your domain and addresses.

How do you check your file?

  1. Check retrievalRequesting https://your-domain.com/.well-known/security.txt must return status 200 and the content type text/plain, without a redirect. On the command line: curl -sI https://your-domain.com/.well-known/security.txt.
  2. Read the fields and dateAre all of the TR's mandatory fields present, Contact in the right order, Canonical identical to the actual location, Expires in the future and no more than one year away? Put a quarterly review date in the calendar.
  3. Check the signatureWith gpg --verify against the published key. The key must be retrievable from the Encryption address and its fingerprint must appear on the reporting page.
  4. Use checking servicesThe TR names findsecuritycontacts.com and internet.nl as crawlers that must be able to reach the file. Both show formal errors.
  5. Test the mailboxes and the formSend test messages to psirt@, csirt@ and through the form: do they reach a person who reads them? The TR recommends doing this daily and automatically.

Common mistakes

An analysis of the one million most-visited domains by uriports, dated 24 January 2025, shows how rarely the file is correct: only 1.25 per cent of domains had a security.txt file, and only 44 per cent of those complied with the RFC. In 45 per cent Expires was missing, in 13 per cent it had expired, and in 20 per cent it was too far in the future. In 26 per cent, Canonical did not match the actual location. Only 11 per cent were signed, and half of those signatures were invalid.

  • Wrong location. The file is only at /security.txt, not under /.well-known/.
  • http only, or a redirect. The file can only be reached unencrypted or redirects to an HTML page. Tools then read nothing.
  • Expired Expires. Set up once and forgotten. From the expiry date onwards, the content is considered unreliable. Also lower-case "t" and "z" in the date, where the TR requires upper case.
  • Canonical points elsewhere. For example to the domain without www, while the file sits under www.
  • Encryption points to a page instead of the key. The TR requires a direct download of the .asc file.
  • The mailbox exists but nobody reads it. The mistake with the worst consequences: if a report sits unread for three weeks, you have some explaining to do.
  • The spam filter throws out genuine reports too. The file brings beg bounty e-mails and advertising with it. Discard them automatically and you lose genuine reports as well; how to sort them is explained in Spam in the security mailbox.

How do large manufacturers do it?

Three publicly accessible files, as of 7 October 2026, show the range. Siemens separates the roles as the TR does (productcert@ for products, cert@ for infrastructure), with two keys, Canonical, Policy, a CSAF entry and a Hall of Thanks, but no visible signature. Bosch serves the file signed, with a comment for each field, Contact as a form address, Hall of Fame, Policy and Hiring. SAP limits itself to Contact and Expires: compliant with the RFC, but without Canonical, Policy, languages or signature, and with the expiry date more than a year away. For a mid-sized manufacturer, the Bosch file is the most useful model.

What this means in practice

The file itself can be written in an hour. The work lies in running it: two mailboxes that someone reads, a form that works, an expiry date that someone extends, and a response within 5 working days written by a person. For a manufacturer with 80 employees and no security department, that means: name the roles, arrange cover, put review dates in the calendar. CRA Response Center monitors the mailbox behind the security.txt file, classifies every incoming report and alerts the people responsible by SMS and e-mail when a report is important. Assessment and notification remain with the manufacturer.

Free templatesCRA Reporting KitReporting playbook, awareness record, notification templates for the ENISA platform, call chain and deadline calculator. Six Word templates, two Excel workbooks and a handbook, free by e-mail.Request the kit

Frequently asked questions

Is security.txt mandatory?

No. The Regulation requires a contact address (Annex I, Part II, point (6)) and a single point of contact (Article 13(17)), but no format. BSI TR-03183-3 makes security.txt the minimum requirement, but the TR itself is voluntary. There is no other description from a public authority, which is why manufacturers in Germany follow it.

Which fields are mandatory?

Under RFC 9116, only Contact and Expires. Under the TR, also Canonical, Encryption, Preferred-Languages with at least "en", Policy and the OpenPGP signature. Acknowledgments and CSAF are recommended fields.

Do I really need two addresses?

The TR requires psirt@ for products and csirt@ for your own IT, with separate keys. In a microenterprise, one person may fill both roles.

Do I have to sign the file?

RFC 9116 recommends it, the TR requires it: OpenPGP under RFC 9580, preferably with a dedicated key valid for no more than five years.

Is a contact form enough instead of e-mail?

For RFC 9116, yes. The TR requires e-mail first and a form with anonymous reporting in addition; Article 13(17) requires that users can choose their preferred means of communication.

Further reading

Sources

The reporting obligation already applies. Who answers at night at your company?

CRA Response Center monitors your security mailbox, recognises important reports using AI hosted in Germany (your e-mails never go to OpenAI, Anthropic or Google) and alerts your people by SMS and e-mail. EUR 190 per month including VAT. Try it free for 30 days.

Try it free for 30 days