1 votes

Comment créer une identité qui peut être utilisée pour signer du code à partir d'un certificat personnalisé ?

Je veux codesign une de mes applications en utilisant mon propre certificat (non créé avec Keychain Access).

D'abord, je crée un v3.ext fichier :

keyUsage = digitalSignature

Ensuite, j'ai créé mon certificat avec openssl :

$ openssl genrsa -des3 -out passkey.key 2048
$ openssl rsa  -in passkey.key -out mykey.key
$ openssl req -new -key mykey.key -out cert.csr
$ openssl x509 -req -sha256 -extfile v3.ext -days 3650 -in cert.csr -signkey mykey.key -out mycertificate.crt
$ openssl pkcs12 -export -in mycertificate.crt -inkey mykey.key -out certificate.p12 -name "My Company Name"

J'ai importé certificate.p12 dans Keychain Access en le faisant glisser sur le docker. Maintenant, lorsque j'essaie de signer mon application, j'ai cette erreur :

$ security find-identity
Policy: X.509 Basic
  Matching identities
 11) 5DC3086CAD3848A22FB6E614FB8836BDDBD18938 "My Company Name" (CSSMERR_TP_NOT_TRUSTED)

$ codesign --deep -fs 5DC3086CAD3848A22FB6E614FB8836BDDBD18938 repro.app
: this identity cannot be used for signing code

Cependant, nous pouvons voir que ce certificat peut être utilisé pour vérifier ( CSSM_KEYUSE_VERIFY ) :

$ certtool y
Serial Number      : 00 F6 E2 FC FC D1 67 A6 7A 
Issuer Name        :
   Country         : FR
   State           : Some-State
   Org             : My Company Name
Subject Name       :
   Country         : FR
   State           : Some-State
   Org             : My Company Name
Cert Sig Algorithm : OID : < 06 09 2A 86 48 86 F7 0D 01 01 0B >
   alg params      : 05 00 
Not Before         : 15:09:59 May 13, 2019
Not After          : 15:09:59 May 10, 2029
Pub Key Algorithm  : OID : < 06 09 2A 86 48 86 F7 0D 01 01 01 >
   alg params      : 05 00 
Pub key Bytes      : Length 270 bytes : 30 82 01 0A 02 82 01 01 ...
CSSM Key           :
   Algorithm       : RSA
   Key Size        : 2048 bits
   Key Use         : CSSM_KEYUSE_VERIFY 
Signature          : 256 bytes : 4E F5 B9 35 9D 6A D5 2E ...
Extension struct   : OID : < 06 03 55 1D 0F >
   Critical        : FALSE
   usage           : DigitalSignature

Que dois-je faire pour permettre à cette identité de signer le code ?

1voto

Graham Miln Points 39606

Votre certificat est manquant spécifique codesign exigences. Celles-ci vont au-delà keyUsage = digitalSignature .

Certificat de conformité

Vous devez créer un certificat conforme aux exigences de signature de code de MacOS. Vous pouvez trouver ces exigences dans Autorité de certification Déclaration de pratique de certification ID du développeur :

4.12.2. Certificats de signature de code

Un certificat de signature de code délivré par la sous-AC ID du développeur doit être conforme au format de certificat X.509 et doit contenir, au minimum, les éléments de données suivants :

  • Numéro de série
  • Nom distinctif du sujet
  • Nom distinctif de l'émetteur
  • Algorithme utilisé (RSA)
  • Modulus (Taille en bits)
  • Période de validité
  • Extension des politiques de certification énumérant la PC
  • Qualificateurs de certificat listant ce CPS (URL)
  • Qualificatif de l'avis de l'utilisateur
  • Extension de l'utilisation des clés, critique, avec un objectif contenant la signature de code (1.3.6.1.5.5.7.3.3)
  • Signature du code d'identification du développeur (1.2.840.113635.100.6.1.13)
  • Extension d'accès aux informations de l'autorité de certification, non critique, avec une méthode d'obtention d'informations de l'autorité de certification via la méthode Online Certificate Status Protocol.

Pour plus de détails, consultez la question StackExchange sur la sécurité. Comment créer un certificat de signature du package Apple Installer ? .

Autorité de certification de confiance

Avec un certificat de conformité, vous serez en mesure de codesign votre binaire. Pour que la signature du code soit reconnue, vous devez installer et faire confiance au certificat de l'autorité de certification (CA) sur votre Mac. Ceci doit être fait de manière à ce que Gatekeeper fasse confiance.

Vous pouvez en savoir plus sur cette étape en recherchant install root certificate mac .

1 votes

J'ai édité le v3.ext dossier : J'ai ajouté critical pour keyUsage l'extension et la extendedKeyUsage=critical,1.3.6.1.5.5.7.3.3 et cela fonctionne.

0voto

Jose Chavez Points 645

Vous ne pouvez pas signer un programme en utilisant uniquement le certificat public. Vous avez besoin de la clé privée pour le faire. Selon votre description, vous avez la clé privée dans le fichier mykey.key, mais codesign ne saurait pas regarder là. Vous aurez besoin d'avoir la clé privée importée dans votre trousseau de clés.

D'un point de vue plus général : Vous ne pourrez pas distribuer à d'autres les programmes que vous avez auto-signés de cette manière. Vous aurez besoin d'un certificat de signature de code valide d'Apple pour pouvoir le faire.

1 votes

J'ai commis une erreur lors de la rédaction de ma question. J'ai importé un fichier .p12 qui comprend la clé privée et le certificat. Je peux voir la clé privée dans la liste d'accès au trousseau.

0 votes

Oui, mais cela ne fonctionnera toujours pas parce que votre autorité de certification/signature intermédiaire n'est pas fiable. Comme je l'ai écrit dans ma réponse, vous aurez besoin d'un certificat de signature valide d'Apple.

1 votes

Je ne veux pas partager mon application sur l'Apple Store par exemple. Je veux simplement créer une application à laquelle l'ordinateur peut faire confiance (dans les paramètres d'accessibilité) et la partager uniquement avec certains clients. Voir : stackoverflow.com/questions/56008262/

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X