1 votos

¿Dónde puedo encontrar la sintaxis de las reglas spctl (gatekeeper) de MacOS?

Estoy intentando firmar el código de una aplicación electrónica para enviarla a la "Mac App Store". Como era de esperar, ha sido un tremendo dolor por 101 razones.

Sin embargo, ahora he descubierto un rayo de luz en que spctl tiene una opción --list no documentada (bueno, no está en --help ni en la página man):

spctl --list

que enumera todas sus normas. ¡Vaya! Quizá ahora puedas averiguar el motivo, (por ejemplo):

spctl --assess -vvvv /Applications/XYZ-dev.app

Responde con:

/Applications/XYZ-dev.app/: rejected
origin=Mac Developer: XXXX YYYYY (ZZZZZZ)

Sin que se aprecie ningún otro diagnóstico.

El problema es que las reglas relevantes que salen con sptl --list tienen el aspecto siguiente

10[Mac App Store] P10 allow install
        anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.10] exists
5[Mac App Store] P10 allow install
        anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.10] exists
4[Mac App Store] P10 allow execute
        anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9] exists

La primera línea es fácil, pero no encuentro en ninguna parte, la sintaxis para la segunda, por ejemplo

anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9] exists

¿Qué clase de brujería es ésta? Si pudiéramos averiguar esto, podríamos entender por qué su guardián no funciona.

También, notas para: XYZ-dev.app:

  1. El tiempo de ejecución endurecido está desactivado pero el sandbox está activado en los derechos (sorprendente, pero no es necesario para la Mac App Store, ¿verdad? ( https://lapcatsoftware.com/articles/hardened-runtime-sandboxing.html ))
  2. Copio en /Applications después de firmar (de lo contrario se producen errores de XYZ Helper no encontrado).
  3. No creo que sea un problema de derechos ya que las reglas de spctl no parecen contemplarlas. Es spctl el que está fallando.
  4. Estoy probando con una compilación de desarrollo local utilizando el certificado de "Desarrollador de Mac", pero voy a utilizar la "Aplicación de Desarrollador de Mac de terceros" para subir a la tienda de aplicaciones.

1voto

Jose Chavez Puntos 645

Esta línea:

anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9] exists

básicamente significa que el certificado debe contener el campo 1.2.840.113635.100.6.1.9. Ese campo es una extensión personalizada de los certificados X.509 que es para la firma de software de aplicaciones de Mac App Store.

Del mismo modo, 1.2.840.113635.100.6.1.10 es una extensión personalizada de los certificados X.509 para la firma de presentación de paquetes de instalación de Mac.

La primera parte "genérica de Apple" significa que el certificado que tiene los campos mencionados, y que se utiliza para firmar la aplicación, debe ser un certificado de Apple o un certificado de firma de código emitido por Apple.

Todo esto significa que no puedes firmar tu programa con cualquier certificado y esperar que pase estas reglas de GateKeeper. Es decir, no puedes crear un certificado con uno de esos campos y firmarlo tú mismo.

Indicas que tu objetivo final es presentar la aplicación a la Mac App Store. En ese caso, debe utilizar el certificado de "Aplicación de desarrollador de terceros para Mac" para la firma, y luego enviar la aplicación a la Mac App Store.

Lo que se trata de hacer en la práctica es ejecutar la aplicación en un Mac antes de que haya pasado por la Mac App Store. Si esto es lo que quieres hacer, tienes que firmar la app con el certificado "Developer ID Application" en su lugar.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X