webentwicklung-frage-antwort-db.com.de

codesign gibt immer keinen identitätsfehler über terminal aus

Ich habe bereits vorhandene Fragen durchgesehen, aber keine hat meine Probleme gelöst (wie das Neuerstellen von Zertifikaten). Ich habe eine App erstellt, in der ich nur wenige ausführbare Dateien, Ordner und Frameworks habe. Wann immer ich versuche, Codesign -s "unsere Identität" zu erstellen, gibt my.app immer keine Identität aus. Kann mir jemand einen schrittweisen Ablauf geben.

codesign -s "Developer ID Application: Sai***** (123123123J)" out/Release/Sai.app

Error

Developer ID Application: Sai****** (123123123J): no identity found,

Ich habe versucht, "Developer ID Application" und die Seriennummer zu entfernen, aber alles gibt den gleichen Fehler aus

Auf der Suche nach Hilfe in diesen Zeilen

Danke dir

34
Saikrishna

ich habe dies zwar nicht für das Signieren von Apple) - Entwicklungscode getan, aber ich glaube immer noch, ich habe einige wertvolle Informationen, die Ihnen beim Debuggen eines solchen Problems helfen könnten. Der Unterschied besteht darin, dass ich mein eigenes Zertifikat erstellt habe, während Sie es erhalten haben eine von Apple.

Überprüfen Sie die Vertrauenswürdigkeit des Zertifikats. Es muss für die Codesignatur vertrauenswürdig sein (auf Yosemite ist dies das drittletzte im Vertrauensbereich der Zertifikatsansicht im Schlüsselbundzugriff). Beachten Sie, dass sich das Zertifikat für Ihre Codesignatur im Anmeldeschlüsselbund befinden sollte. Ich benötigte es im Systemschlüsselbund.

Anfangs war das Zertifikat nicht für die Codesignierung zum Schlüsselbund bekannt, da der Erweiterungszweck "Codesignierung" fehlte. Sie finden dies, wenn Sie in den Schlüsselbund schauen und auf das Zertifikat doppelklicken:

enter image description here

Ich habe das behoben (Sie können es nicht wie folgt beheben Apple liefert Ihnen das Zertifikat. Die Erweiterung sollte einfach da sein):

enter image description here

Dann habe ich das Zertifikat zu den vertrauenswürdigen Signaturzertifikaten hinzugefügt, nachdem ich das Zertifikat per Drag & Drop aus dem Schlüsselbund auf meinen Desktop gezogen hatte, wodurch die Datei ~/Desktop/gdb-cert.cer erstellt wurde (beachten Sie, dass Sie -d und -r trustRoot weglassen können:

$ Sudo security add-trusted-cert -d -r trustRoot -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/gdb-cert.cer

Das war ein bisschen schwierig, weil ich durch einige Internet-Posts irregeführt wurde und nicht auf die Manpage geschaut habe. Einige sagten, Sie sollten Add-Trust verwenden ( https://llvm.org/svn/llvm-project/lldb/trunk/docs/code-signing.txt ). Das Schreckliche war, dass der Befehl erfolgreich war, aber nicht das tat, was er sollte.

Danach fand ich das neue Zertifikat in den vertrauenswürdigen Zertifikaten wie folgt:

$ security find-identity -p codesigning

Policy: Code Signing
  Matching identities
      1) E7419032D4..... "Mac Developer: FirstName LastName (K2Q869SWUE)"    (CSSMERR_TP_CERT_EXPIRED)
      2) ACD43B6... "gdb-cert"
  2 identities found

  Valid identities only
      1) ACD43... "gdb-cert"
  1 valid identities found

In meinem Fall ist das Apple cert abgelaufen, aber das, mit dem ich gdb signiert habe, war es nicht (nun, ich habe es gerade selbst erstellt) "security add-trusted-cert" (- p codeSign) und den Befehl "security find-identity" (-p codesigning). Ich habe dann gdb signiert und auch immer:

$ codesign --sign gdb-cert.cer --keychain ~/Library/Keychains/login.keychain `which gdb`
  gdb-cert.cer: no identity found

weil ich den Eindruck hatte, ich müsse der Option --sign den Dateinamen der Zertifikatsdatei geben, aber das war in der Tat der CN des Zertifikats, das ich hätte bereitstellen sollen und das sich im Trust Store befinden sollte. Den CN finden Sie hier, wenn Sie auf das Zertifikat im Schlüsselbund doppelklicken:

enter image description here

oder in der obigen Ausgabe von "security find-identity -p codesigning". Dann unterschrieb ich und musste ihm den richtigen Schlüsselbund geben. In Ihrem Fall müsste dies die Datei ~/Library/Keychains/login.keychain sein, in meinem Fall die Datei System.keychain:

 codesign -s gdb-cert --keychain /Library/Keychains/System.keychain `which gdb` 

Das gab mir dann eine funktionierende GDB und es sollte Ihnen eine unterschriebene Bewerbung geben.

22
user637338

Ich hatte auch einige Probleme damit. Stellen Sie sicher, dass sich Ihre Code-Signatur-Identität in Ihrem Schlüsselbund befindet, und verwenden Sie möglicherweise den SHA-1-Fingerabdruck anstelle des Namens nach dem -s.

Sie finden den SHA-1-Fingerabdruck, indem Sie Keychain Access Öffnen, Ihr Developer ID Application: FOO - Zertifikat auswählen und dann Get Info auswählen. Scrollen Sie von hier bis zum Ende der Informationen, bis Sie zu Fingerprints gelangen. Der SHA-1-Fingerabdruck kann hier kopiert werden, und Sie müssen alle Leerzeichen entfernen. Danach haben Sie eine 40-stellige Kennung, die sich für die Platzierung nach dem -s In Ihrer Codesign-Anweisung eignet.

Wenn Sie weiterhin Probleme haben, den Schlüssel zu finden, versuchen Sie Folgendes im Terminal:

certtool y | grep Developer\ ID

und suchen Sie nach etwas mit Developer ID Application in Common Name, um zu überprüfen, ob sich das Zertifikat tatsächlich in einem Schlüsselbund befindet, auf den über Terminal zugegriffen werden kann. Wenn Sie keine Antwort erhalten, bedeutet dies, dass der Schlüsselbund mit Ihren Anmeldeinformationen für Ihre Sitzung Terminal nicht verfügbar ist. Gründe dafür wären beispielsweise, dass der Schlüsselbund gesperrt wird, die Shell als anderer Benutzer ausgeführt wird und den Befehl mit unterschiedlichen Berechtigungen ausführt (z. B. Sudo).

Nachdem Sie den obigen Befehl ausgeführt haben, sollten Sie mindestens Folgendes haben:

Developer ID Application: <your company name>
Developer ID Installer: <your company name>
Developer ID Certification Authority

Wenn Sie nicht alle drei haben, sollten Sie die fehlenden Elemente herunterladen. Obwohl Sie derzeit möglicherweise nicht brauchen, um ein Installationsprogramm zu erstellen, ist es nicht schlimm, wenn Sie es in der Nähe haben. Die Anwendungs- und Installationselemente können im Abschnitt Mac-Zertifikate des Tabs Zertifikate, Kennungen und Profile auf Apples Entwickler-Website heruntergeladen werden. Dort sollten Einträge vorhanden sein, die nicht abgelaufen sind. Möglicherweise sind dort auch Einträge abgelaufen. So installieren Sie die Zertifikate in Ihrem Schlüsselbund:

  1. Zugriff auf die Apple Developer Site
  2. Zugriff auf das Mac Dev Center
  3. Zugriff Zertifikate, Bezeichner und Profile link
  4. Laden Sie die Zertifikate vom Portal herunter
  5. Doppelklicken Sie auf die Zertifikate, und der Schlüsselbund sollte geöffnet werden
  6. Ermöglichen Sie dem Schlüsselbund-Zugriff, die Zertifikate zu Ihrem Schlüsselbund hinzuzufügen

Die Developer ID Certification Authority sollte von Xcode installiert worden sein, aber wenn dies nicht der Fall ist, können Sie sie selbst installieren. Sie müssen das separat von Developer ID Authority herunterladen oder indem Sie auf den + Link in Zertifikate klicken und den Link unten verwenden, um das Zertifikat herunterzuladen.

Dies ist auch ein guter Zeitpunkt, um sicherzustellen, dass Sie über die Apple Worldwide Developer Relations-Zertifizierungsstelle verfügen, die die Grundlage für einige der Signiertools bildet. Es sollte vom Xcode - Installationsprogramm in Ihrem System Schlüsselbund installiert werden und kann direkt über den + - Link in der Registerkarte Zertifikate oder über Apple WWDR CA .

Laut Apples App Distribution Guide gibt es spezifische Schlüssel, die für jedes der Zertifikate und Schlüssel geeignet sind:

  • Ihre privaten Schlüssel und Ihre Signaturzertifikate ( Developer ID Installer, Developer ID Application und die App Store-Zertifikate) sollten sich in Ihrem Login Schlüsselbund befinden
  • Die Apple Worldwide Developer Relations-Zertifizierungsstelle und Developer ID-Zertifizierungsstelle gehören zum System Schlüsselbund
  • Ihre Entwicklerzertifikate gehören auch in Ihren Login Schlüsselbund

Schlüsselbundwartung

Da Xcode die Schlüsselbunde automatisch manipuliert und einige Zertifikate regelmäßig neu ausgestellt werden, wenn sich Profile ändern (obwohl dies nicht für die Entwickler-ID gilt, da sie über mehrjährige Zertifikate verfügt und keine Profile erfordert), kann dies zu einer unnötigen Weitergabe führen und möglicherweise verwirrende Zertifikate in Ihrem Schlüsselbund. Es ist eine gute Idee, diese zu entfernen, wenn sie abgelaufen sind, da sie für Xcode Verwirrung stiften können.

[~ # ~] Warnungen [~ # ~]

  • Stellen Sie vor der Durchführung von Wartungsarbeiten an Ihren Schlüsseln sicher, dass Sie eine Sicherungskopie Ihrer Schlüssel haben
  • Dieser Prozess dient zum Entfernen unnötiger Zertifikate, die sich auf die Entwicklung beziehen. Beginnen die Zertifikate nicht mit Mac Developer, 3rd Party Mac Developer, iPhone Developer oder Developer ID, verwirren Sie sich zu diesem Zeitpunkt nicht mit ihnen. Wenn Sie versehentlich das Zertifikat löschen, das Sie beispielsweise mit einer E-Mail erhalten haben, auch wenn es abgelaufen ist, können Sie die E-Mail, die Sie erhalten haben, möglicherweise nicht lesen.

Dinge die zu tun sind:

  1. Beenden Sie Xcode
  2. Führen Sie Keychain First Aid (über Schlüsselbundzugriff ) aus und überprüfen Sie, ob Ihre Schlüsselbunde in Ordnung sind
  3. Klicken Sie in der linken Seitenleiste auf Zertifikate Kategorie
  4. Suchen Sie alle abgelaufenen Entwicklerzertifikate der oben genannten Arten. Sie werden mit einem kleinen [~ # ~] x [~ # ~] in der unteren rechten Ecke angezeigt.
  5. Wählen Sie die zu entfernenden Zertifikate aus und sichern Sie sie mit Datei> Objekte exportieren ...
  6. Bewahren Sie diese Datei an einem sicheren Ort auf und geben Sie ihr ein gutes Passwort
  7. Löschen Sie die Zertifikate, die Sie gesichert haben
  8. Durchsuchen Sie Ihre verbleibenden Zertifikate und vergewissern Sie sich, dass Sie über die im vorherigen Abschnitt genannten Zertifikate verfügen. Wenn Sie dies nicht tun, müssen Sie sie herunterladen und möglicherweise erneuern.
  9. Stellen Sie sicher, dass sich die Zertifikate in den oben angegebenen Schlüsseln befinden (alle Ihre Signaturzertifikate sollten sich beispielsweise in Ihrem Login Schlüsselbund befinden).
52
gaige

Die Antwort war schließlich sehr einfach. Mein privater Schlüssel fehlte. Dazu habe ich das Zertifikat widerrufen und die Schritte im Entwicklerprogramm befolgt (insbesondere das Erstellen eines CSR-Zertifikats während des Vorgangs, das ich nicht mehrmals erhalten habe, es sei denn, ich habe das Zertifikat widerrufen).

9
Saikrishna

Wie eben

certtool y | grep "Developer ID Application: xxxx"

konnte keine Ergebnisse anzeigen, ich vermutete, es war ein Problem beim Zugriff auf den gewünschten Schlüsselbund. Also habe ich zuerst überprüft, ob auf den privaten Schlüssel von allen Anwendungen im Schlüsselbund selbst zugegriffen werden kann, und dann habe ich begonnen, den k=/Users/myUser/Library/Keychains/login.keychain Option im Befehl certtool und da dies erfolgreich war, habe ich dasselbe mit gemacht

codesign --keychain /Users/myUser/Library/Keychains/login.keychain --force --verbose -s "Developer ID Application: xxxx"

3
Rosario Carcò