Skip to content

Add VeriSign's G5 root to game prefixes - #287

Closed
dongnh wants to merge 1 commit into
NotProtonNot:mainfrom
dongnh:verisign-g5-root
Closed

dongnh wants to merge 1 commit into
NotProtonNot:mainfrom
dongnh:verisign-g5-root

Conversation

@dongnh

@dongnh dongnh commented Nov 3, 2026

Copy link
Copy Markdown

Metal Gear Solid V: The Phantom Pain quit a few seconds after start, before it loaded steamclient64.dll. With WINEDEBUG=+wintrust, the game calls WinVerifyTrust on its own steam_api64.dll and gets 0x800b0109 (CERT_E_UNTRUSTEDROOT).

That DLL was signed by Valve in 2015. The chain is Valve -> VeriSign Class 3 Code Signing 2010 CA -> VeriSign Class 3 Public Primary Certification Authority - G5 (SHA-1 4EB6D578499B1CCF5F581EAD56BE3D9B6744A5E5, valid to 2036). macOS 27 has no VeriSign roots left in SystemRootCertificates.keychain, and Wine builds the prefix Root store from the host, so the chain stops at an untrusted root. Windows still trusts G5.

This adds the root to the settings .reg that compat_run.sh already imports, only when system.reg doesn't have it yet. Wine's root sync only deletes certificates listed under HostImportedCertificates, so the added root stays across launches.

Tested:

  • MGSV starts and plays through CrossOver 26.3 with the root in its prefix (it quit at start before).
  • reg import of the generated lines into a fresh CrossOver 26.3 prefix stores a blob identical to the certificate's (1283 bytes), and the next launch writes nothing.
  • dylib/tests/settingscheck.sh, with two new cases; the other compat_run.sh checks pass too.

Open question: browsers distrusted Symantec-era roots like G5 for TLS, and here it is trusted for every purpose inside the prefix. I can limit it to code signing with an enhanced key usage property if you prefer.

🤖 Generated with Claude Code

Valve signed older steam_api64.dll builds with a VeriSign Class 3 Code
Signing 2010 CA certificate that chains to VeriSign Class 3 Public Primary
Certification Authority - G5. macOS 27 no longer ships that root, and
Wine fills its root store from the host, so WinVerifyTrust on those DLLs
fails with CERT_E_UNTRUSTEDROOT. Metal Gear Solid V: The Phantom Pain
checks its steam_api64.dll this way and quits before loading
steamclient64.dll.

Write the root into the prefix's Root store in the settings import when
it is missing. Wine only drops roots it imported from the host, so it
stays.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@dongnh dongnh closed this Nov 3, 2026
@NotProtonNot

Copy link
Copy Markdown
Owner

Hi. Why did you close this?

@dongnh

dongnh commented Nov 9, 2026

Copy link
Copy Markdown
Author

Hi. I think it has been reported on Wine and CrossOver.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants