Beginnend mit macOS Sierra kann ich keine Codesign-Identität mehr in einen Schlüsselbund mit / usr / bin / security importieren, ohne dass die Benutzeroberfläche usr / bin / Codesign bei Verwendung dieser Identität zum Zugriff auffordert. Dadurch werden die Paketskripte des Buildservers beschädigt. Es scheint keine Problemumgehung zu geben. Dies betrifft benutzerdefinierte Schlüsselanhänger, aber auch die Datei login.keychain.
Reproduktionsschritte: Führen Sie die folgenden Befehle im Terminal aus (für den Import muss eine Signaturidentität verfügbar sein):
security create-keychain -p test buildagent.keychain
security unlock-keychain -p test buildagent.keychain
security list-keychains -d user -s buildagent.keychain
security default-keychain -s buildagent.keychain
security import identity.p12 -k buildagent.keychain -P password -T /usr/bin/codesign
codesign -vfs '$IDENTITY' '${PRODUCT}' --keychain 'buildagent.keychain'
Ergebnis: macOS zeigt eine UI-Eingabeaufforderung an, in der Sie um Erlaubnis gebeten werden, auf den zuvor importierten privaten Schlüssel zuzugreifen.
Ich habe viele Problemumgehungen versucht, aber nichts scheint zu funktionieren:
- Verwenden der neuen Erweiterung .keychain-db bei der Angabe des Schlüsselbundnamens
- Verwenden Sie die login.keychain anstelle der benutzerdefinierten
- Importieren des p12 mit -A ('Jeder Anwendung erlauben, auf den importierten Schlüssel zuzugreifen')
- Zertifikat und Schlüssel separat importieren (zuvor mit openssl pkcs12 aus dem p12 extrahiert)
Das Importieren der Identität funktioniert definitiv. Ich kann das Zertifikat und den Schlüssel sehen, wenn der Inhalt des Schlüsselbunds in der Anwendung "Schlüsselbundzugriff" angezeigt wird. Die Zugriffssteuerungseinstellung für den privaten Schlüssel ist ebenfalls korrekt konfiguriert (mit der gewünschten Codesign-Ausnahmeregel).
Wie kann ich die UI-Eingabeaufforderung von Sierra vermeiden?
Always allow
dann funktioniert die CLI gut.permission of private XXX
. DiesXXX
ist jedoch nicht der Name des privaten Schlüssels, sondern der Name derp12
Datei. Wenn ich mehr als einen Schlüssel in derselben p12-Datei habe, egal welchen Schlüssel ich verwende, wird immer der Name der p12-Datei angezeigt. Und wenn ich aufalways allow
alle Tasten im selben p12 klicke, ist das Codesign in Ordnung.Antworten:
Der Befehl, den Sie verwenden müssen, lautet wie folgt:
security set-key-partition-list -S apple-tool:,apple: -s -k keychainPass keychainName
Beachten Sie bitte, dass dieses Befehlszeilentool wie die Änderungsmethode der List-Keychains funktioniert. Wenn Sie set-key-partition-list mit einem einzelnen Wert ausführen, werden alle partitionIDs in den Zertifikaten überschrieben. Die übergebenen Werte werden nicht überprüft.
Mit diesem Befehl werden die PartitionIDs (Elemente nach -S durch Komma getrennt) für Schlüssel festgelegt, die für einen bestimmten Schlüsselbund signieren können (-s). Die tatsächliche Partitions-ID, die das Codesignieren ermöglicht, lautet
apple:
.Ich weiß nicht, was
apple-tool:
passiert, da es nicht dokumentiert ist, aber es war dort nach dem Importieren des Schlüssels mit,security import
also behalte ich es, um zu vermeiden, dass Leute beschädigt werden, die den Befehl kopieren und einfügen.Diese Änderung wurde mit Mac OS Sierra eingeführt und ist nicht dokumentiert (oder zumindest konnte ich keine Dokumentation finden). Ab dem 16. Oktober listet die Manpage für Sicherheit diesen Befehl immer noch nicht auf.
Weitere Informationen finden Sie in diesem Fehlerbericht - http://www.openradar.me/28524119
quelle
Der Befehl aus dieser Antwort hat nur den Schlüsselbund für mich entsperrt, aber ich hatte immer noch die UI-Eingabeaufforderung, ob die aktuelle Anwendung den Schlüssel verwenden könnte.
Ich habe die Eingabeaufforderung folgendermaßen verhindert:
Gehen Sie unter Schlüsselbundzugriff zum Schlüsselbund, doppelklicken Sie dort auf alle Schlüssel und aktivieren Sie auf der Registerkarte Zugriffssteuerung die Option "Allen Anwendungen den Zugriff auf dieses Element erlauben".
Ich konnte die neue Schlüsselbunddatei dann auf meinen Jenkins- Buildserver hochladen, wo sie vom Plugin für Schlüsselanhänger und Bereitstellungsprofile entsperrt wird . Der Build ist jetzt erfolgreich signiert.
quelle
Für diejenigen, die dieses Problem mit Travis oder einem anderen CI haben, müssen Sie
codesign
die Anwendungs-ID-Liste hinzufügen .security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k keychainPass keychainName
PS: Ich benutze keychainName.keychain (Hinzufügen
.keychain
)quelle
codesign --force --sign <identity_hash> $(mktemp)
, erhalte ich immer noch den Genehmigungsdialogset-key-partition-list
nicht funktionierte. stackoverflow.com/a/43002580/9636Aus irgendeinem Grund hat das
security set-key-partition-list
bei mir nicht funktioniert.Ich habe es mit der Option -A gelöst, als ich das Zertifikat in den Schlüsselbund importierte:
security import ${P12_FILE} -k ${KEYCHAIN_PATH} -P ${P12_PASSWORD} -A
Es ist nicht erforderlich, das
security set-key-partition-list
danach zu verwenden.Mit dieser Option kann jede Anwendung ohne Warnung auf den importierten Schlüssel zugreifen. Daher wird verhindert, dass die Eingabeaufforderung angezeigt wird. Beachten Sie, dass es unsicher ist, da der Schlüssel nicht geschützt ist. Abhängig von Ihrem Build-Kontext kann dies jedoch hilfreich sein.
Darüber hinaus muss der Schlüsselbund zur Suchliste hinzugefügt werden:
security list-keychains -s ${KEYCHAIN_PATH}
Dann sollte der Schlüsselbund entsperrt werden. Andernfalls wird eine Eingabeaufforderung angezeigt, in der Sie nach dem Schlüsselbundkennwort gefragt werden:
security unlock-keychain -p ${KEYCHAIN_PASSWORD} ${KEYCHAIN_PATH}
Schließlich sollte das Zeitlimit für die automatische Sperre deaktiviert werden. Dies ist für den Fall, dass der Build ziemlich lang ist und sich der Schlüsselbund erneut verriegelt:
security set-keychain-settings ${KEYCHAIN_PATH}
quelle
Nachdem ich viele verschiedene Lösungen ausprobiert hatte, funktionierte ich einfach das Passwort meines Schlüsselbunds.
quelle
Neben der Verwendung
security set-key-partition-list -S apple-tool:,apple: -s -k keychainPass keychainName
Ich musste auch die Einstellungen für meinen Schlüsselbund auf "kein Timeout" ändern, das von verwendet wurde
security set-keychain-settings keychainName
(Dokumentation verfügbar unter https://ss64.com/osx/security-keychain-settings.html )
quelle
Ich habe ein paar Tage damit verbracht, nach einer Lösung zu suchen. Das hat nicht geholfen
security import ${P12_FILE} -k ${KEYCHAIN_PATH} -P ${P12_PASSWORD} -A
aber als ich die Apps explizit aufgelistet habe - es hat funktioniert (zumindest auf Catalina)!
security import ${P12_FILE} -k ${KEYCHAIN_PATH} -P ${P12_PASSWORD} -T /usr/bin/codesign -T /usr/bin/productsign
quelle
Auch wenn Ihre App länger als 5 Minuten erstellt wurde, kann Ihnen der benutzerdefinierte Schlüsselbund-Sperr-Timer ausgehen und Sie erhalten den Fehler -1 = ffffffff. Deaktivieren Sie daher die Schlüsselbundsperre als tmp-Lösung.
quelle