Conversation
--azureTrustedSignFile currently goes through signtool.exe plus the Trusted Signing Dlib, both native Windows binaries, so it is registered only on Windows and cross-compiled Windows packages cannot use it. Trusted Signing itself is just an HTTPS service: a digest goes out and a signature comes back. Using the managed client instead of the Dlib makes the same metadata.json work on Linux and macOS, with the key still never present locally. Windows behaviour is unchanged - it keeps using the Dlib. Only the non-Windows path is new, so this adds a capability without altering an existing one. Verified against a live Trusted Signing account on Ubuntu: vpk [win] pack --azureTrustedSignFile signed all six payload files and the setup bundle, and the output verifies with a real certificate, a full chain and a timestamp.
SignUniversal relicensed from Apache-2.0 to MIT as of 1.0.34, so vpk no longer takes on a LICENSE/NOTICE propagation obligation by referencing it.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Draft, in response to your question on the docs PR about a native option for signing Windows PE/MSI on nix. Easier to judge the integration shape from working code than from a description, so here it is - happy to throw it away or rework it however you'd prefer.
What it does
--azureTrustedSignFilecurrently goes throughsigntool.exeplus the Trusted Signing Dlib, both native Windows binaries. So the option is registered only on Windows, and a cross-compiled Windows package can't use it.But Trusted Signing is just an HTTPS service - a digest goes out, a signature comes back. Swapping the Dlib for the managed client makes the same
metadata.jsonwork on Linux and macOS, with the key still never present locally.Windows is untouched: it keeps using the Dlib. Only the non-Windows path is new, so this adds a capability rather than changing one.
Verified end to end
Against a live Trusted Signing account on Ubuntu 24.04:
And the output, checked independently:
A real certificate, full chain, timestamped.
MyApp.exeinside the portable zip verifies the same way.What it costs you
Velopack.Packaging.Windowsgains two package references:SignUniversal(PE/MSI Authenticode; pullsSystem.Security.Cryptography.PkcsandOpenMcdf) andSignUniversal.Azure(pulls the Azure SDK). The Azure SDK is the real weight here, and it's your call whether that belongs in vpk. If it doesn't, the same seam works with a certificate held any other way -IRemoteSigneris a singleSignHashmethod - so a PFX-only path would cost only the first package.Those are mine, which is how I know they fit. They were Apache-2.0 when I opened this; they are MIT as of 1.0.34, so referencing them carries no LICENSE/NOTICE obligation for vpk.
Things I'd want your opinion on
http://timestamp.acs.microsoft.com. I defaulted the native path to DigiCert instead, because the Microsoft one returns a chain that doesn't resolve against a stock Linux trust store. Worth making configurable.