The Windows installer is currently unsigned — tauri.conf.json has no bundle.windows signing config and the release workflow has no signtool step (macOS, by contrast, is signed and notarized). Users see "unknown publisher" on install.
We own a USB code-signing token (used previously for Open Nettest / Windows Store), but it may have expired — worth checking before planning anything else.
Check the existing token first
Plug it in on Windows and run:
Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert |
Format-List Subject, Issuer, NotBefore, NotAfter, Thumbprint
Code-signing certificates are capped at 39 months, so a token last used for Open Nettest is quite likely past NotAfter. Note that binaries signed while it was valid stay valid if they were timestamped — expiry only blocks new signatures.
Why the token can't sign in CI
GitHub-hosted runners are ephemeral VMs with no USB passthrough, so a physical token requires either:
- a self-hosted Windows runner with the token attached (machine always on; the real friction is PIN entry — depends on the vendor client's single-logon/cached-PIN mode), or
- manual signing after the CI build (download the draft's
setup.exe, signtool sign /fd sha256 /tr <ts-url> /td sha256, re-upload). Zero infrastructure, but manual every release, and only the installer gets signed — the app binaries inside it would stay unsigned, since those must be signed before packaging.
Cloud signing (preferred)
A cloud-HSM signing service lets the existing GitHub-hosted runner sign unattended, and Tauri's bundle.windows.signCommand hook then covers both the app binaries and the NSIS installer in one build.
| Option |
Notes |
| Azure Trusted Signing |
Cheapest (~$10/month). Requires organisation identity validation (a verifiable business-history minimum applied at launch — confirm current terms). Short-lived certs; azure/trusted-signing-action for CI. |
| SSL.com eSigner |
Mid-price, EV available, cloud signing with automation support. Good fallback if Azure eligibility or region is a problem. |
| DigiCert KeyLocker |
Enterprise pricing, solid CI story. |
| GlobalSign DSS / Certum |
Alternatives worth quoting. |
Also worth asking our current CA whether the existing certificate can be migrated to their cloud offering instead of buying new — several support this.
Expectation to set
Signing removes "unknown publisher" and shows the company name in the UAC prompt, but does not guarantee SmartScreen silence: reputation accrues per publisher identity, so an OV certificate may still trigger "Windows protected your PC" on early downloads until installs accumulate. EV certificates get immediate SmartScreen trust — relevant if the first-run experience matters more than the price difference.
Unrelated to this: Tauri's TAURI_SIGNING_PRIVATE_KEY signs update manifests, not the installer. Don't conflate the two.
Acceptance
The Windows installer is currently unsigned —
tauri.conf.jsonhas nobundle.windowssigning config and the release workflow has nosigntoolstep (macOS, by contrast, is signed and notarized). Users see "unknown publisher" on install.We own a USB code-signing token (used previously for Open Nettest / Windows Store), but it may have expired — worth checking before planning anything else.
Check the existing token first
Plug it in on Windows and run:
Code-signing certificates are capped at 39 months, so a token last used for Open Nettest is quite likely past
NotAfter. Note that binaries signed while it was valid stay valid if they were timestamped — expiry only blocks new signatures.Why the token can't sign in CI
GitHub-hosted runners are ephemeral VMs with no USB passthrough, so a physical token requires either:
setup.exe,signtool sign /fd sha256 /tr <ts-url> /td sha256, re-upload). Zero infrastructure, but manual every release, and only the installer gets signed — the app binaries inside it would stay unsigned, since those must be signed before packaging.Cloud signing (preferred)
A cloud-HSM signing service lets the existing GitHub-hosted runner sign unattended, and Tauri's
bundle.windows.signCommandhook then covers both the app binaries and the NSIS installer in one build.azure/trusted-signing-actionfor CI.Also worth asking our current CA whether the existing certificate can be migrated to their cloud offering instead of buying new — several support this.
Expectation to set
Signing removes "unknown publisher" and shows the company name in the UAC prompt, but does not guarantee SmartScreen silence: reputation accrues per publisher identity, so an OV certificate may still trigger "Windows protected your PC" on early downloads until installs accumulate. EV certificates get immediate SmartScreen trust — relevant if the first-run experience matters more than the price difference.
Unrelated to this: Tauri's
TAURI_SIGNING_PRIVATE_KEYsigns update manifests, not the installer. Don't conflate the two.Acceptance
bundle.windowssigning wired intotauri.conf.json+ release workflowsigntool verify /pa /v LPDO_x.y.z_x64-setup.exe