Check Detail
berlin.de · DNS
Passed
Grade A
100.0%
Result Detail
DNS| Host | Type | Answer | TTL |
|---|---|---|---|
| 109.68.230.145 | — | ||
| 2a00:13c8:f5::393:8a4d:2 | — |
Result Detail
HEADERAlerts
- Strict-Transport-Security: HSTS active but add includeSubDomains; consider preload
- Permissions-Policy: Permissions-Policy missing
- Cross-Origin-Opener-Policy: Header missing
- Cross-Origin-Embedder-Policy: Header missing
- Cross-Origin-Resource-Policy: Header missing
- Cache-Control: Cache-Control missing restrictive directives
- Expect-CT: Expect-CT missing
- X-Permitted-Cross-Domain-Policies: Header missing
- Access-Control-Allow-Origin: Access-Control-Allow-Origin missing
- Origin-Agent-Cluster: Header missing
Normalized headers
| date | Thu, 06 Nov 2025 15:18:41 GMT |
|---|---|
| content-type | text/html; charset=UTF-8 |
| content-security-policy | default-src 'self' 'unsafe-inline' 'unsafe-eval' mediastream: data: blob: https:; worker-src 'self' blob:; upgrade-insecure-requests; upgrade-insecure-requests |
| vary | Accept-Encoding |
| age | 88 |
| referrer-policy | strict-origin-when-cross-origin |
| x-content-type-options | nosniff |
| x-frame-options | SAMEORIGIN |
| x-xss-protection | 1; mode=block |
| strict-transport-security | max-age=31536000 |
| accept-ranges | bytes |
Transport
| Check name | Status | Actual | Expected | Detail | Severity | Recommendation |
|---|---|---|---|---|---|---|
| Strict-Transport-Security | ⚠️ Warning | max-age=31536000 | max-age>=15768000; includeSubDomains; preload | HSTS active but add includeSubDomains; consider preload | Critical | Strict-Transport-Security: max-age=63072000; includeSubDomains; preload |
| Expect-CT | ❌ Missing | enforce; max-age>=86400 | Expect-CT missing | Medium | Expect-CT: enforce, max-age=86400, report-uri="https://report.example.com" |
Content Security
| Check name | Status | Actual | Expected | Detail | Severity | Recommendation |
|---|---|---|---|---|---|---|
| Content-Security-Policy | ✅ Passed | default-src 'self' 'unsafe-inline' 'unsafe-eval' mediastream: data: blob: https:; worker-src 'self' blob:; upgrade-insecure-requests; upgrade-insecure-requests | default-src 'self'; frame-ancestors 'none' | default-src 'self'; frame-ancestors 'none' | Critical | Content-Security-Policy: default-src 'self'; frame-ancestors 'none' |
MIME
| Check name | Status | Actual | Expected | Detail | Severity | Recommendation |
|---|---|---|---|---|---|---|
| X-Content-Type-Options | ✅ Passed | nosniff | nosniff | Value matches recommendation | High | X-Content-Type-Options: nosniff |
Framing
| Check name | Status | Actual | Expected | Detail | Severity | Recommendation |
|---|---|---|---|---|---|---|
| X-Frame-Options | ✅ Passed | SAMEORIGIN | DENY or SAMEORIGIN | Value accepted | High | X-Frame-Options: DENY |
Privacy
| Check name | Status | Actual | Expected | Detail | Severity | Recommendation |
|---|---|---|---|---|---|---|
| Referrer-Policy | ✅ Passed | strict-origin-when-cross-origin | strict-origin-when-cross-origin / same-origin | strict-origin-when-cross-origin | Medium | Referrer-Policy: strict-origin-when-cross-origin |
Browser Features
| Check name | Status | Actual | Expected | Detail | Severity | Recommendation |
|---|---|---|---|---|---|---|
| Permissions-Policy | ❌ Missing | camera=(); geolocation=(); microphone=() | Permissions-Policy missing | Medium | Permissions-Policy: camera=(), geolocation=(), microphone=() |
Cross-Origin
| Check name | Status | Actual | Expected | Detail | Severity | Recommendation |
|---|---|---|---|---|---|---|
| Cross-Origin-Opener-Policy | ❌ Missing | same-origin | Header missing | High | Cross-Origin-Opener-Policy: same-origin | |
| Cross-Origin-Embedder-Policy | ❌ Missing | require-corp | Header missing | High | Cross-Origin-Embedder-Policy: require-corp | |
| Cross-Origin-Resource-Policy | ❌ Missing | same-origin | Header missing | Medium | Cross-Origin-Resource-Policy: same-origin | |
| Origin-Agent-Cluster | ❌ Missing | ?1 | Header missing | Low | Origin-Agent-Cluster: ?1 |
Caching
| Check name | Status | Actual | Expected | Detail | Severity | Recommendation |
|---|---|---|---|---|---|---|
| Cache-Control | ❌ Missing | no-store, private, max-age=0 | Cache-Control missing restrictive directives | High | Cache-Control: no-store, private, max-age=0 |
Legacy
| Check name | Status | Actual | Expected | Detail | Severity | Recommendation |
|---|---|---|---|---|---|---|
| X-Permitted-Cross-Domain-Policies | ❌ Missing | none | Header missing | Low | X-Permitted-Cross-Domain-Policies: none |
CORS
| Check name | Status | Actual | Expected | Detail | Severity | Recommendation |
|---|---|---|---|---|---|---|
| Access-Control-Allow-Origin | ❌ Missing | Scoped origin (no wildcard) | Access-Control-Allow-Origin missing | Medium | Access-Control-Allow-Origin: https://app.example.com |
Information Disclosure
| Check name | Status | Actual | Expected | Detail | Severity | Recommendation |
|---|---|---|---|---|---|---|
| Server | ✅ Passed | Header removed or generic | Header not exposed | High | Remove Server header or set to a generic token | |
| X-Powered-By | ✅ Passed | Header removed | Header not exposed | High | Remove X-Powered-By header | |
| X-AspNet-Version | ✅ Passed | Header removed | Header not exposed | Medium | Remove framework version headers |
Raw headers
HTTP/2 200 date: Thu, 06 Nov 2025 15:18:41 GMT content-type: text/html; charset=UTF-8 content-security-policy: default-src 'self' 'unsafe-inline' 'unsafe-eval' mediastream: data: blob: https:; worker-src 'self' blob:; upgrade-insecure-requests vary: Accept-Encoding age: 88 content-security-policy: upgrade-insecure-requests referrer-policy: strict-origin-when-cross-origin x-content-type-options: nosniff x-frame-options: SAMEORIGIN x-xss-protection: 1; mode=block strict-transport-security: max-age=31536000 accept-ranges: bytes
Result Detail
SSL| Check name | Status | Value |
|---|---|---|
| certificate chain is complete | ✅ Passed | 3 |
| root CA is trusted | ✅ Passed | Trusted |
| cert valid for | ✅ Passed | 24 |
| chain certs are valid until | ✅ Passed | 30.11.2025 |
| CN matches Domainname | ✅ Passed | berlin.de |
| certificate subject | ✅ Passed | CN=berlin.de |
| certificate issuer | ✅ Passed | C=US, O=Let's Encrypt, CN=E8 |
| signature algorithm | ✅ Passed | ecdsa-with-SHA384 |
| TLS protocol | ✅ Passed | TLSv1.3 TLS_CHACHA20_POLY1305_SHA256 |
| Subject Alternative Names | ✅ Passed | *.berlin.de, *.berlinonline.de, *.berlinonline.net, *.prod.kube11.berlinonline.net, *.service.berlin.de, *.styleguide.berlin.de, berlin.de, berlinonline.net |
| Public Key | ✅ Passed | EC 256 |
Certificate chain
| # | Common name | Issuer | Valid until | CA |
|---|---|---|---|---|
| 0 | berlin.de | C=US, O=Let's Encrypt, CN=E8 | 30.11.2025 11:45:53 | No |
| 1 | berlin.de | C=US, O=Let's Encrypt, CN=E8 | 30.11.2025 11:45:53 | No |
| 2 | E8 | C=US, O=Internet Security Research Group, CN=ISRG Root X1 | 13.03.2027 00:59:59 | Yes |
TLS details
| Negotiated protocol | TLSv1.3 |
|---|---|
| Cipher suite | TLS_CHACHA20_POLY1305_SHA256 (256 bit) |
| Cipher version | TLSv1.3 |
| Perfect Forward Secrecy | Attention |
| Earliest chain expiry | 30.11.2025 11:45 |
Fingerprints
| SHA-256 | B7:9E:7E:38:05:0C:11:03:42:1E:6A:17:C3:55:70:8E:0F:C4:F9:01:82:03:1E:4C:35:47:63:8A:78:BC:67:18 |
|---|---|
| SHA-1 | 17:04:E8:96:91:DD:A7:00:B0:01:CA:4A:DC:8D:48:00:F5:24:1C:7C |
Revocation
OCSP URLs
—
CRL URLs
Full Name:
URI:http://e8.c.lencr.org/35.crl
Issuer URLs (AIA)
http://e8.i.lencr.org/
OCSP Must-Staple
No
Trust evaluation
Attempted: Yes
Trusted: Yes
OpenSSL diagnostic command
openssl s_client -connect berlin.de:443 -servername berlin.de
Result Detail
WAFSign up to use!
Ownership verification required
Real WAF results become available after signing up. Until then we show you a small teaser from the imagination department.
- Shield level Mythisch
- Watchers Gremlins im Standby
- Last attack Story folgt nach Registrierung