Volledig geactualiseerde TLS-test in nieuwe versie van Internet.nl
Wat is TLS?
Met de open standaard Transport Layer Security (TLS) kunnen verbindingen tusssen systemen worden beveiligd. Het gaat bijvoorbeeld om de verbinding tussen je browser en de server waarop de bezochte website staat. En bijvoorbeeld ook om de verbinding tussen mailservers te beveiligen. De beveiliging met TLS zorgt ervoor dat derden de gegevens die over de lijn gaan onderweg niet zo maar kunnen onderscheppen.
Waarom is veilig ingestelde TLS belangrijk?
TLS kent veel configuratie-opties. Een aantal van deze opties bevat kwetsbaarheden waardoor de bescherming verzwakt wordt. Het is daarom van belang om TLS zo te configureren dat deze opties worden vermeden. Aan de andere kant moet ook rekening gehouden worden met compatibiliteit met de andere systemen. Bepaalde opties zijn dan wel sterk maar worden nog niet door alle andere systemen ondersteund waardoor de interoperabiliteit gehinderd kan worden.
Nieuwste TLS-richtlijnen van NCSC
NCSC heeft medio 2025 een belangrijke update van de "ICT-beveiligingsrichtlijnen voor Transport Layer Security (TLS)" gepubliceerd. Deze richtlijnen helpen om TLS veilig te configureren en tegelijkertijd compatibel te zijn met andere systemen. Ze zijn gebaseerd op internationale good practices zoals BCP 195 van IETF. Deze update zal naar verwachting ook doorgevoerd worden in het "Besluit beveiligde verbinding met overheidswebsites en -webapplicaties".
Update van Internet.nl
Met Internet.nl kan je vanaf vandaag testen of de TLS-configuratie van je webserver of je inkomende mailserver voldoet aan deze geüpdatete TLS-richtlijnen. NCSC onderkent vier verschillende beveiligingsniveaus. Instellingen met beveiligingsniveau 'Goed' en 'Voldoende' slagen voor de Internet.nl-test. In geval van 'Uit te faseren' instellingen zal een waarschuwing worden getoond. 'Onvoldoende' instellingen leiden tot het niet halen van de test en leiden ook tot een lagere score.
De nieuwe versie komt nu beschikbaar op de website van Internet.nl waar je individuele domeinnamen kan testen. Naar verwachting zal de nieuwe versie binnen een paar weken ook beschikbaar komen op de batch API en het webgebaseerd dashboard.
Post-quantum cryptografie
In de TLS-richtlijnen is ook aandacht voor post-quantum cryptografie. Quantumveilige cryptografische algoritmen hebben beveiligingsniveau 'Goed'. Internet.nl maakt nu nog niet zichtbaar als een server een of meer van deze algoritmen ondersteunt. Dat staat wel op de roadmap en zal onderdeel zijn van een toekomstige release.
Over Internet.nl
De testtool Internet.nl is een initiatief van het Platform Internetstandaarden, een samenwerkingsverband van partijen uit de Internetgemeenschap en de Nederlandse overheid. Het doel van het platform is om gezamenlijk het gebruik van moderne internetstandaarden verder te vergroten om daarmee het internet voor iedereen toegankelijker, veiliger en betrouwbaarder te maken. De code van Internet.nl is online beschikbaar onder een open source licentie.
Release notes 1.11
TLS updates for NCSC 2025 guidelines
All tests were updated to match the 2025-05 version of the NCSC TLS guidelines. Most significant changes:
- The list of good/sufficient/phase out/insufficient TLS versions, TLS authentication, curves, hashes, key exchange algorithms, FFDHE groups, RSA key lengths, and bulk encryption algorithms were updated to match the new guidelines.
- A test for Extended Master Secret (RFC7627) was added.
- Client-initiated renegotiation is now acceptable, if limited to less than 10 renegotiations.
- All checks on certificates apply to all certificates sent by the server, except root certificates (according to our trust store). In previous versions, the certificate selection was different per test.
Other TLS updates
- Certificates that do not have OCSP enabled, which means stapling is not possible, are now detected as such. Several issues with OCSP stapling reliability were also resolved.
- Issues were fixed where the cipher order failed to detect some bad scenarios, including some where servers preferred RSA over ECDHE, or CBC over POLY1305.
- CCM_8 ciphers are now detected when enabled on a server.
- OLD ciphers are no longer detected.
- The cipher order test no longer separates between "the server cipher order preference is wrong" and "the server has no preference".
Significant internal changes
- Upgraded to Django 5, Python 3.13, and Debian Trixie base image.
- Switched TLS implementation to sslyze/nassl based reimplementation.
- Switched to pyproject/uv.lock for project dependencies, replacing requirements files.
- Added post-quantum hybrid ECDHE-MLKEM for TLS 1.3 in our web server.
- Outgoing traffic now uses the configured public IPv4/IPv6 addresses.
- Routinator can now be configured with an allowlist for shared instances.
Bug fixes
- Fixed simhash exception when both address families fail.
- Fixed JSON serialization of sets in batch results.
- Fixed report generation locking for results views.
API changes
This release has API version 2.7.0.
The changes noted above are reflected in the API as well, e.g. which ciphers are considered bad, as listed in the API output, along with score impacts.
Additionally, the API structure changes are:
- OCSP stapling has a new status not_in_cert (not_tested), for when a certificate does not have
OCSP enabled, therefore stapling is neither required nor possible.
- The cipher order status no longer returns not_prescribed or not_seclevel for new tests.
The insufficient status is now bad (failed) for preferring phase out over good and/or sufficient,
regardless of the reason (server not enforcing any preference or server enforcing wrong preference).
- cert_signature_phase_out was added to the TLS details, listing certificate signature algorithms
that are at phase-out level (warning). Analogous to the existing cert_signature_bad.
- extended_master_secret was added to the TLS details, with values: supported (good),
not_supported (failed), na_no_tls_1_2 (good), unknown (not_tested).
- client_reneg in the TLS details was changed from a boolean to a string enum with values:
not_allowed (good), allowed_with_low_limit (info), allowed_with_too_high_limit (failed).