Root cause found: bundled CA store predates Let’s Encrypt Generation Y roots
I’ve traced error 4294967283 on the macOS desktop client to a certificate validation failure, not a codec or player problem. Posting the full diagnosis since I think it explains the whole cluster of these reports since mid-May.
Setup
- Server: Mac Studio (M1), PMS 1.43.x
- Failing client: Mac mini (M4), macOS 26.5, Plex for Mac 1.112.0.359-0d79a49f
- Working clients: Apple TV, iOS, Plex Web in Safari/Chrome on the same failing Mac
Symptom
Every item fails instantly with “An unknown error occurred (4294967283)”. Survives full uninstall, cache purge, and rollback to a five-month-old client build.
What the client log actually shows
ERROR - [MPVEngine/mpv] ffmpeg: tls: error:0A000086:SSL routines::certificate verify failed
ERROR - [MPVEngine/mpv] stream: Failed to open https://<ip-dashed>.<hash>.plex.direct:32400/video/:/transcode/universal/start...
ERROR - [MPVEngine] loading failed.
ERROR - [Web] [QTMedia] A critical error occurred: 4294967283
The 4294967283 is downstream noise. mpv/ffmpeg never opens the stream because TLS verification fails.
Why
My server’s plex.direct cert renewed on 21 July and came from Let’s Encrypt’s Generation Y hierarchy, which became the default issuance chain on 13 May 2026:
Verify return code: 20 (unable to get local issuer certificate)
0 s:CN=*.<hash>.plex.direct
i:C=US, O=Let's Encrypt, CN=YR2
1 s:C=US, O=Let's Encrypt, CN=YR2
i:C=US, O=ISRG, CN=Root YR
The server serves leaf + YR2 and stops. Let’s Encrypt’s documented default chain for YR2 is EE → YR2 → Root YR → ISRG Root X1, so the cross-signed Root YR certificate is missing from what PMS presents.
Meanwhile the client app ships its own CA store at:
/Applications/Plex.app/Contents/Frameworks/PlexMediaServer.framework/Versions/A/Resources/cacert.pem
which contains ISRG Root X1 and nothing from Generation Y:
subject=C=US, O=Internet Security Research Group, CN=ISRG Root X1
So ffmpeg has no path from YR2 to any trusted root. Browsers and Apple TV are unaffected because they fetch the missing intermediate over AIA; ffmpeg does not. The desktop app on the server machine also appears unaffected because it connects over loopback HTTP and never performs TLS validation at all — which is why this looks machine-specific and misleads diagnosis.
Confirmed workaround (client side)
curl -O https://letsencrypt.org/certs/gen-y/root-yr-by-x1.pem
CACERT="/Applications/Plex.app/Contents/Frameworks/PlexMediaServer.framework/Versions/A/Resources/cacert.pem"
sudo cp "$CACERT" "$CACERT.bak"
sudo tee -a "$CACERT" < root-yr-by-x1.pem > /dev/null
Quit Plex fully and relaunch. Playback works immediately. Note this uses the cross-signed Root YR rather than the self-signed root, so no new trust anchor is introduced — it terminates at ISRG Root X1, which the bundle already trusts. It will be wiped by the next app update.
Suggested fixes for Plex
- Refresh the bundled cacert.pem to include the Generation Y cross-signs, or better, have the desktop client use the platform trust store instead of a baked-in bundle.
- Have PMS serve the full default chain including the cross-signed Root YR, rather than stopping at YR2.
Either one alone resolves it. Happy to provide full logs.