Skip to content

Commit 3db676d

Browse files
danielbodartclaude
andcommitted
Use identifier-only designated requirement for macOS code signing
macOS SecTrustEvaluate treats short-lived Fulcio certs as expired even with a secure timestamp, so the certificate leaf OID check in the DR fails on every launch — causing TCC to re-prompt for mic permission. Switch to identifier-only DR to test whether TCC stores an identifier- based csreq that persists across builds. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent f7ec9e3 commit 3db676d

1 file changed

Lines changed: 7 additions & 7 deletions

File tree

scripts/fulcio-codesign.sh

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -306,13 +306,13 @@ echo "Signing identity: $IDENTITY_HASH"
306306
# Build the designated requirement
307307
# Pins on identifier + the Fulcio Source Repository URI OID.
308308
# In CI this is the actual repo URL; locally it's the Dex OAuth redirect.
309-
if [ -n "$CERT_REPO_URI" ]; then
310-
DR="designated => identifier \"$IDENTIFIER\" and certificate leaf[field.$REPO_OID] = \"$CERT_REPO_URI\""
311-
echo "DR: identifier + repo OID = $CERT_REPO_URI"
312-
else
313-
DR="designated => identifier \"$IDENTIFIER\""
314-
echo "DR: identifier only (no repo OID in cert)"
315-
fi
309+
# Use identifier-only DR. The Fulcio cert provides supply-chain verification
310+
# (via cosign/sigstore), but can't be used in the DR because macOS evaluates
311+
# certificate leaf fields via SecTrustEvaluate which treats the short-lived
312+
# Fulcio cert as expired — even with a secure timestamp. An identifier-only
313+
# DR lets TCC persist grants across builds without cert chain validation.
314+
DR="designated => identifier \"$IDENTIFIER\""
315+
echo "DR: identifier only"
316316

317317
# Entitlements: hardened runtime requires explicit entitlements for mic access.
318318
# Without com.apple.security.device.audio-input, TCC silently denies the mic

0 commit comments

Comments
 (0)