Aanverwant incident · CA-sleutelcompromittering · 17–21 oktober 2026
Gecompromitteerde eMudhra-tussen-CA-sleutels: wat PHP-servers moeten controleren
Browsers waren binnen enkele uren beschermd. Bij PHP ligt dat anders: de curl- en OpenSSL-extensies vertrouwen de CA-bundel van de server en ontvangen meestal geen intrekkingslijsten van browsers.
Laatst bijgewerkt
Wat er gebeurde
- Op 17 oktober 2026 meldde een onderzoeker dat acht eMudhra-tussencertificaten (zes TLS, twee codeondertekening) P-384-sleutels hadden die gehele getallen onder 256 waren: 4, 56, 66, 115, 155, 156, 230 en 237. Mozilla bevestigde dat elke sleutel op de laatste byte na uit nullen bestond (Bugzilla 2083449).
- Volgens eMudhra komen de sleutels uit een sleutelceremonie op 30 april 2025 met HSM’s van FIPS 140-2 niveau 3, waarbij een wrap/unwrap-stap een tweede, zwakke set sleutels maakte die per vergissing werd gepubliceerd.
- De TLS-tussencertificaten leiden naar emSign ECC Root CA - G3. Sectigo’s AAA Certificate Services had dezelfde sleutels kruisondertekend; Sectigo trok die op 19 oktober in.
| Datum | Gebeurtenis |
|---|---|
| 17-10-2026, 18:05 | Melding bereikt het Chrome Root Program |
| 17-10, 19:45 | Chrome blokkeert de zes TLS-tussencertificaten via CRLSet |
| 17-10, 22:59 | Firefox blokkeert alle acht via OneCRL |
| 18-10 | eMudhra trekt de acht certificaten in |
| 19-10 | Apple blokkeert ze; Sectigo trekt de kruisondertekeningen in |
| 20-10 | Microsoft blokkeert ze; NSS 3.131.1 verwijdert emSign ECC Root CA - G3; curl cacert.pem 2026-10-20; composer/ca-bundle 1.4.16 en 1.6.0 |
| 27-10 (gepland) | Chrome Root Store verwijdert emSign ECC Root CA - G3 op alle apparaten |
Is mijn PHP-server geraakt?
PHP heeft geen eigen CA-lijst. De extensies openssl en curl lezen openssl.cafile / curl.cainfo als die zijn ingesteld, anders de standaardpaden van OpenSSL, normaal de ca-certificates-bundel van de distributie. CRLSet of OneCRL ontvangen ze niet. Staat emSign ECC Root CA - G3 (of AAA Certificate Services voor de kruisondertekeningen) nog in die bundel, dan vertrouwt uw server de gecompromitteerde keten nog.
# Which CA file does PHP use? Run as the same user/SAPI as the site if you can.
php -r 'print_r(openssl_get_cert_locations());'
php -i | grep -E 'openssl.cafile|openssl.capath|curl.cainfo'# Does PHP still trust the compromised eMudhra intermediates?
# Good result: bool(false) plus a "certificate verify failed" warning.
# Bad result: the page body is printed (the chain was trusted).
php -r 'var_dump(file_get_contents("https://dv-g3b-emudhra.we-have-a-problem.com/"));'
php -r 'var_dump(file_get_contents("https://dv-g3b-aaa-emudhra.we-have-a-problem.com/"));'
# Same check through the curl extension
php -r '$c = curl_init("https://dv-g3b-emudhra.we-have-a-problem.com/");
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
var_dump(curl_exec($c), curl_error($c));'# Is the eMudhra root still in the bundle?
ls /etc/ssl/certs | grep -i emsign # Debian/Ubuntu symlinks
grep -n "emSign ECC Root CA - G3" /path/to/cacert.pem # curl/Mozilla-format bundle
# composer/ca-bundle version inside a project
composer show composer/ca-bundle | grep versionsControleer elke relevante SAPI. PHP-FPM en Apache mod_php kunnen een andere php.ini laden dan de CLI; vergelijk php --ini met een phpinfo()-pagina van de site.
Zo lost u het op
# Debian / Ubuntu (and Debian-based php:* Docker images)
sudo apt-get update && sudo apt-get install --only-upgrade ca-certificates
dpkg -l ca-certificates
# RHEL / Fedora / AlmaLinux / Rocky
sudo dnf upgrade ca-certificates
# Alpine (php:*-alpine images)
apk upgrade --no-cache ca-certificates
# Composer projects that ship composer/ca-bundle
composer update composer/ca-bundle # 1.4.16+ or 1.6.0+
# Restart long-running PHP processes afterwards
sudo systemctl restart php8.3-fpm # or apache2 / httpd / your queue workers; php.ini — for stacks with their own stale bundle (XAMPP, WAMP, old panels)
; Download a current Mozilla-derived bundle from https://curl.se/ca/cacert.pem
; (the 2026-10-20 release or later), then point both settings at it:
curl.cainfo = "/path/to/cacert.pem"
openssl.cafile = "/path/to/cacert.pem"
; Restart Apache / PHP-FPM so the new values load.Oudere alles-in-één-stacks en lang niet onderhouden panelen zetten curl.cainfo vaak op een meegeleverd bestand dat nooit wordt vernieuwd. Bekijk de releasenotes van de leverancier of laat php.ini zoals hierboven naar een actuele cacert.pem verwijzen.
Wie al een fix heeft uitgebracht
| Software | Opgeloste versie |
|---|---|
| Mozilla NSS | 3.131.1 (Bug 2084101) |
| curl CA bundle (cacert.pem) | 2026-10-20 |
| composer/ca-bundle | 1.4.16, 1.6.0 (2026-10-20) |
| Debian ca-certificates | 20250419~deb12u2, 20250419+deb13u1, 20260816+nmu1 |
| Ubuntu ca-certificates | 20260816ubuntu0.22.04.1, 0.24.04.1, 0.26.04.1, 0.26.10.1 |
| Fedora ca-certificates | 2026.2.92_v9.0.319 |
| Alpine ca-certificates | 20261020-r0 |
| Arch ca-certificates-mozilla | 3.131.1-1 |
| FreeBSD ca_root_nss | 1.131.1 |
Wij hebben de actuele cacert.pem van curl opgehaald (Last-Modified 20 oktober 2026): die bevat geen emSign ECC Root CA - G3 en geen AAA Certificate Services meer. composer/ca-bundle 1.4.16 en 1.6.0 voegen ook CaBundle::findDistrustedCertificate toe.
Releases die niet in de lijst staan, waaronder oudere distributies zoals Ubuntu 20.04 of Debian 11, stonden in de geraadpleegde bronnen niet als gepatcht. Controleer de tracker van uw leverancier.
FAQ
Bundels en hostingpanelen
XAMPP en hostingpanelen leveren eigen PHP-builds, dus hun CA-bundel volgt niet per se de ca-certificates-updates van het besturingssysteem. Zie de productpagina’s van XAMPP, cPanel, Plesk, DirectAdmin, CloudLinux, aaPanel en 宝塔面板, of de productlijst.
Is het certificaat van mijn site geraakt?
Zeer onwaarschijnlijk. eMudhra zegt dat de acht tussencertificaten geen eindcertificaten hebben uitgegeven, en Chrome vond vóór de blokkade geen gekoppelde TLS-certificaten in Certificate Transparency-logs. Sites met certificaten onder emSign ECC Root CA - G3 hebben wel een nieuw certificaat nodig, omdat die root wordt verwijderd.
Zijn tientallen miljoenen certificaten onveilig geworden?
Nee. De grote getallen die rondgaan zijn de totale historische uitgifte van eMudhra, niet certificaten die met de gecompromitteerde sleutels zijn ondertekend.
Waarom maakt het voor een PHP-server uit als browsers veilig zijn?
Browsers dwingen Certificate Transparency af en ontvangen CRLSet of OneCRL. curl en OpenSSL in PHP doen meestal geen van beide en zijn pas beschermd als de gelezen CA-bundel de eMudhra-keten niet meer vertrouwt, bijvoorbeeld bij betaal-API’s, webhooks, SMTP via TLS en Composer-downloads.
Welke bundel gebruikt PHP?
curl.cainfo en openssl.cafile als die in php.ini staan, anders de standaardpaden van OpenSSL, meestal de ca-certificates-bundel van de distributie. Composer gebruikt composer/ca-bundle, dat de systeembundel verkiest en anders een eigen cacert.pem gebruikt.
Bronnen
Externe links verlaten deze site. Wij hosten geen exploitcode.
- Protecting Firefox users following the compromise of eMudhra intermediate certificates (20 October 2026) — Mozilla Security Blog
- Protecting Chrome and Android users from compromised eMudhra intermediate CA certificates — Google (Chrome and Android Security)
- eMudhra statement on recent certificate security incident (updated 21 October 2026) — eMudhra
- eMudhra Intermediate CA Compromise: client check and patched-software list — we-have-a-problem.com (reporter’s test site)
- Bug 2083449 — eMudhra: Private key compromise of Intermediate Certificates — Mozilla Bugzilla
- Bug 2084101 — Remove eMudhra emSign Root CA - G3 from NSS — Mozilla Bugzilla
- Compromised eMudhra Intermediate Certificates (guidance for trust store operators) — Mozilla dev-security-policy
- Indian certification authority eMudhra’s private keys compromised – one of them was the number 4 (20 October 2026) — The Register
- eMudhra’s weak P-384 CA keys: testing curl, Node.js and uv (21 October 2026) — lilting channel
- CA certificates extracted from Mozilla (cacert.pem) — curl project
- composer/ca-bundle 1.6.0 and 1.4.16: distrust compromised eMudhra intermediates — Composer (GitHub)
- OpenSSL runtime configuration (openssl.cafile, openssl.capath) — PHP manual
- cURL runtime configuration (curl.cainfo) — PHP manual