Refuse a half-configured signing setup, and write the runbook - #7
Merged
Conversation
Two gaps in a step that has never executed. It keyed on MACOS_CERTIFICATE alone, so a certificate without notary credentials would sign and then fail at notarytool — and a Developer ID binary that is not notarized is refused by Gatekeeper with the SAME dialog as an unsigned one. The release would look signed, the secrets would look configured, and the symptom would be unchanged. All six or none now, with the missing ones named. And codesign --verify passes against an ad-hoc or an Apple Development signature just as happily as a Developer ID one, while Gatekeeper refuses both like no signature at all. The authority is asserted after signing rather than assumed. .github/MACOS-SIGNING.md is the runbook: the openssl path that produces all six secrets on Linux with no Mac, the individual-vs-organization call (no Reachpad legal entity exists, so organization is company formation, not an afternoon), and the limit worth knowing before paying — a bare Mach-O cannot be stapled, so notarization is still checked online on first run. Greentree-Change-Id: b313a40fdf40d088b620ec9e8ce17130
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.
Follow-up to #6. Two gaps in the
sign and notarizestep, which has never executed, plus the runbook that makes it executable.Half-configured signing was the worst available outcome
The step keyed on
MACOS_CERTIFICATEalone. With a certificate but no notary credentials it would sign, then fail atnotarytool— and a Developer ID binary that is not notarized is refused by Gatekeeper with the same dialog as an unsigned one. The release would look signed, the secrets would look configured, and the user-visible symptom would be identical. Now it is all six or none, and a partial set fails naming exactly which are missing.Verified against all three paths by extracting the step's script and running it:
codesign --verifydoes not verify what we needIt passes just as happily against an ad-hoc signature or an "Apple Development" certificate, both of which Gatekeeper refuses exactly like no signature at all. The signing authority is now asserted to contain
Developer ID Applicationafter signing, rather than assumed from the fact that--signexited 0..github/MACOS-SIGNING.mdThe runbook. Three things in it that are not obvious:
openssl— generate the key and CSR, upload the CSR, convert the.cer, export a.p12. This avoids the Keychain Access route completely.xcrun staplerneeds a bundle, disk image or package, so a notarizedreachpadstill requires an online notarization check on first run. Closing that means a signed, notarized, stapled.pkg— a second artifact and a second signing identity, worth doing only if someone actually reports the offline case.It also states plainly what this does not fix: nothing any advertised install path suffers from.
brew,npmandcurl … | shall avoidcom.apple.quarantineentirely. This buys exactly one thing — a browser download from the releases page — for $99/year.