Skip to content

Commit e4be56b

Browse files
katipallyCopilot
andcommitted
fix(ci): try empty-passphrase decryption for encrypted PKCS8 key
Diagnostics from run 8 revealed: Input structure: EncryptedPrivateKeyInfo The key stored in APP_STORE_CONNECT_PRIVATE_KEY appears to be an encrypted PKCS8 key. Add a second openssl attempt with -passin pass: (empty passphrase) to decrypt it in-place. Also try explicit pkcs8 -nocrypt with empty passphrase as a third fallback. If all three attempts fail, warn clearly and fall back to raw key. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 6db0fb7 commit e4be56b

1 file changed

Lines changed: 22 additions & 11 deletions

File tree

.github/workflows/ios-testflight.yml

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -146,29 +146,40 @@ jobs:
146146
printf '\n' >> "$RAW_FILE"
147147
fi
148148
149-
# Normalize via openssl so CryptoKit gets a canonical PEM structure
150-
# (correct line width, no stray bytes, clean header/footer).
149+
# Normalize via openssl so CryptoKit gets a canonical PEM structure.
151150
# Use || RC=$? to prevent set -e from triggering — we handle the failure.
151+
# Try 1: unencrypted PKCS8 (standard Apple API key format)
152152
OPENSSL_RC=0
153153
OPENSSL_OUT="$(openssl pkey -in "$RAW_FILE" -out "$KEY_FILE" 2>&1)" || OPENSSL_RC=$?
154154
if [ $OPENSSL_RC -eq 0 ]; then
155-
echo "Key normalized via openssl pkey"
155+
echo "Key normalized via openssl pkey (unencrypted)"
156156
else
157157
echo "openssl pkey failed (rc=${OPENSSL_RC}): ${OPENSSL_OUT}"
158-
# Try pkcs8 sub-command as fallback
158+
# Try 2: encrypted PKCS8 with empty passphrase → strip encryption
159159
OPENSSL_RC2=0
160-
OPENSSL_OUT2="$(openssl pkcs8 -nocrypt -in "$RAW_FILE" -out "$KEY_FILE" 2>&1)" || OPENSSL_RC2=$?
160+
OPENSSL_OUT2="$(openssl pkey -in "$RAW_FILE" -out "$KEY_FILE" -passin pass: 2>&1)" || OPENSSL_RC2=$?
161161
if [ $OPENSSL_RC2 -eq 0 ]; then
162-
echo "Key normalized via openssl pkcs8"
162+
echo "Key decrypted (empty passphrase) and normalized"
163163
else
164-
echo "openssl pkcs8 also failed (rc=${OPENSSL_RC2}): ${OPENSSL_OUT2}"
165-
cp "$RAW_FILE" "$KEY_FILE"
166-
echo "Warning: using cleaned raw key without openssl normalization"
164+
echo "openssl pkey (empty passphrase) failed (rc=${OPENSSL_RC2}): ${OPENSSL_OUT2}"
165+
# Try 3: explicit pkcs8 decode with empty passphrase
166+
OPENSSL_RC3=0
167+
OPENSSL_OUT3="$(openssl pkcs8 -nocrypt -in "$RAW_FILE" -out "$KEY_FILE" -passin pass: 2>&1)" || OPENSSL_RC3=$?
168+
if [ $OPENSSL_RC3 -eq 0 ]; then
169+
echo "Key normalized via openssl pkcs8 (empty passphrase)"
170+
else
171+
echo "openssl pkcs8 (empty passphrase) also failed (rc=${OPENSSL_RC3}): ${OPENSSL_OUT3}"
172+
cp "$RAW_FILE" "$KEY_FILE"
173+
echo "::warning::All openssl normalization attempts failed — using raw key as-is"
174+
echo "::warning::If xcodebuild fails with invalidPEMDocument, the key in APP_STORE_CONNECT_PRIVATE_KEY may be corrupted."
175+
echo "::warning::Verify locally: openssl pkey -in AuthKey_*.p8 -noout"
176+
echo "::warning::If that fails, re-download the key from App Store Connect and update the secret."
177+
fi
167178
fi
168179
fi
169-
# Print PEM header for diagnostics (not secret content)
180+
# Print PEM header for diagnostics (not secret content — header is masked)
170181
HEADER=$(head -1 "$RAW_FILE")
171-
echo "PEM header line: '${HEADER}'"
182+
echo "PEM header: '${HEADER}'"
172183
rm -f "$RAW_FILE"
173184
chmod 600 "$KEY_FILE"
174185

0 commit comments

Comments
 (0)