¿Debo firmar yo mismo el código fuente abierto?

11

Utilizo macOS 10.14 y encontré un problema cuando intenté instalar un complemento de código abierto para Vim que encontré en Github. Descargué el código fuente y lo compilé yo mismo, lo que funcionó bien, pero cuando lo ejecuté, la ejecución se interrumpió porque la "Firma del código [del ejecutable] no es válida para su uso en el proceso".

Esto me ha dado muchas preguntas que no puedo entender:

Podría firmarlo yo mismo, pero ¿eso no arruinaría el propósito de la firma de código? ¿Hay alguna diferencia cualitativa en firmar código de Internet y permitir aplicaciones de desarrolladores no identificados en el cuadro de diálogo "Esta aplicación se descargó de Internet"?

Si no lo hago, ¿de quién es la "responsabilidad" de firmar? El mantenedor del repositorio? Los contribuyentes? ¿Apple espera que los desarrolladores de código abierto siempre tengan una ID de desarrollador de Apple? ¿O he entendido mal el propósito de la firma de código?

Editar:

Para aclarar, mi pregunta es cómo debo manejar el código fuente sin firmar que compilo yo mismo, ya que no espero que los contribuyentes siempre puedan, o recuerden, firmar su código, especialmente cuando se trata de pequeñas contribuciones a proyectos de código abierto con muchos contribuyentes

Syntaxén
fuente

Respuestas:

9

Firma de código ad-hoc

Para aplicaciones y binarios de terceros que compile usted mismo y que requieran la firma de código, use una firma de código ad hoc .

  • Supongo que la aplicación no se ejecutará sin una firma;
  • Supongo que la aplicación no se distribuirá;
  • Supongo que no le importa que la identidad de la firma sea válida.

Una firma ad-hoc no proporciona beneficios de seguridad confiables. Se puede usar para determinar si la aplicación ha cambiado y se puede usar para aplicar restricciones de seguridad, como derechos, a una aplicación.

Una firma ad-hoc validará codesignpero no spctl. Esto puede o no importar dependiendo del binario que se firma. Para aplicaciones y ejecutables, es poco probable que esto importe porque spctlno se ejecuta en binarios creados localmente.

¿Por qué firmar el código?

En cuanto a la pregunta refinada:

Cómo debo manejar el código fuente sin firmar que compilo yo mismo, ya que no espero que los contribuyentes siempre puedan o recuerden firmar su código, especialmente cuando se trata de pequeñas contribuciones a proyectos de código abierto con muchos contribuyentes.

Para la mayoría de las aplicaciones autocompiladas, no es necesario firmar el código. Esto supone que confía en el código de la aplicación. En macOS, puede abrir aplicaciones no confiables desde el Finder, consulte Apple's Abra una aplicación de un desarrollador no identificado .

Si no confía en el código o en los desarrolladores, no compile ni ejecute la aplicación.

Tu responsabilidad

El proveedor del código fuente no tiene la responsabilidad u obligación de proporcionar binarios firmados con código preconstruido. Al estar autocompilado, toda firma de código es su elección y responsabilidad.

  • Apple requiere que los envíos a sus tiendas de aplicaciones estén firmados con código.

  • Apple solicita a los desarrolladores que estén fuera de sus tiendas de aplicaciones que firmen su código, pero aún no es obligatorio.

En ambos casos, solo se firman los binarios finales. El código fuente original y los recursos no están firmados.

El código fuente no está firmado

El código fuente en sí mismo no puede ser firmado de manera significativa para macOS. Los archivos de origen y el código se pueden firmar digitalmente, como cualquier otro archivo, pero esto no tiene ningún impacto en cómo macOS trata la aplicación o el binario resultante.

Cómo firmar código ad-hoc en una aplicación Mac

Para codificar una aplicación en macOS con una firma ad-hoc, configure el -sindicador de identidad en -:

codesign --force -s - </path/to/application>

Todas las demás reglas, requisitos y permutaciones del codesigncomando siguen siendo los mismos.

La bandera --forcese usa aquí para sobrescribir cualquier firma existente.

Es posible que deba agregar el --deepindicador al codesigncomando para firmar recursos secundarios como marcos y servicios integrados.

Graham Miln
fuente
¿Por qué recomienda firmas ad hoc? La respuesta que vinculó a los estados "En la práctica, la creación de binarios firmados ad-hoc es solo de valor práctico para los desarrolladores de Apple".
Wowfunhappy
Eso no tiene ningún sentido para mí. Agregar una firma ad-hoc significa que la validación de la firma fallará. Esto no lo lleva a ninguna parte: el programa fallará con exactamente el mismo mensaje de error.
jksoegaard
Sí, veo que eliminó el enlace a mi respuesta en la firma ad-hoc y agregó los supuestos. Pero, ¿se cumplen estos supuestos? - Parece que está respondiendo como si la pregunta fuera sobre ejecutar una aplicación. No lo es. Se trata de tener una aplicación ya firmada a la que el OP quiere agregar un complemento. Es decir, el complemento necesita pasar la validación de la biblioteca con la aplicación firmada originalmente (Vim) como el maestro.
jksoegaard
La pregunta original ha sido editada. Es bastante amplio como es. El interlocutor puede comentar, aclarar y probar estas respuestas para ver qué funciona para ellos. Esta respuesta intenta responder la pregunta editada y proporcionar un enfoque práctico. Si no ayuda, o tiene suposiciones incorrectas, es de esperar que el interlocutor intervenga y aclare su intención.
Graham Miln
1
Esta respuesta fue útil. Mi pregunta fue bastante general porque encontré que los documentos de Apple son un poco difíciles de entender. El uso de la firma ad-hoc resolvió el problema específico que tenía.
Syntaxén
5

Firmar el programa usted mismo no está arruinando el propósito de la firma de código. El propósito general de la firma de código es hacer posible verificar que el programa es una copia no modificada que fue creada originalmente por una entidad específica (persona o empresa). Cuando firma un programa usted mismo solo para que se ejecute en su computadora, hace posible que el sistema verifique que realmente fue usted quien creó el binario y que otros no lo han modificado.

La diferencia cualitativa entre firmar el binario de la aplicación usted mismo y solo permitir aplicaciones de desarrolladores no identificados en GateKeeper es que, en el primer caso, permite que se ejecute una aplicación única y específica, mientras que en el segundo, abre la posibilidad de que pueda abrir muchos diferentes aplicaciones simplemente haciendo clic derecho sobre ellas y eligiendo Abrir. Es decir, es más restrictivo y, por lo tanto, algo más "seguro" al firmar el programa específico usted mismo.

La responsabilidad de firmar es completamente suya. El desarrollador de código abierto no puede firmar el código fuente; solo es posible firmar los archivos binarios compilados. Mientras produce los binarios compilados usted mismo, le corresponde firmarlos.

Puede registrarse para obtener una cuenta de desarrollador en el sitio web de Apple que le permitirá crear un certificado que se puede usar para firmar. Si eres desarrollador y compilas regularmente binarios para ejecutar en Mac, esta es la forma preferida de hacer las cosas. Si esto es algo excepcional que probablemente nunca volverás a hacer, probablemente sea excesivo pasar por este proceso. YMMV.

Otras respuestas a su pregunta aquí recomiendan que use la firma ad-hoc para su binario. Eso no funcionará. Deberá generar una firma válida para que el binario se ejecute con GateKeeper en su configuración más segura.

jksoegaard
fuente
1

¿Debo firmar yo mismo el código fuente abierto?

Si no eres el desarrollador, entonces no.

En pocas palabras, la firma de código es un método para decir que usted (el desarrollador) es quien dice ser y que el código no ha cambiado desde la última vez que lo firmó.

¿Hay alguna diferencia cualitativa en firmar código de Internet y permitir aplicaciones de desarrolladores no identificados en el cuadro de diálogo "Esta aplicación se descargó de Internet"?

Suena como su firma de código confusa (lo que requieren los desarrolladores para publicar aplicaciones en la App Store) y Gatekeeper (lo que protege a su Mac de instalar software de desarrolladores no identificados).

Si permite que su Mac instale software tanto de la App Store como de los desarrolladores identificados, seguirá recibiendo la ventana emergente que le alerta sobre el hecho de que se instalará el software

Y si es de un desarrollador no identificado, obtendrá la misma ventana emergente con un "icono de advertencia"

Aún puede instalar el software. Este es solo un mecanismo que obliga a la interacción del usuario a instalar realmente el software que le proporciona una capa de seguridad contra el malware autoinstalado.

Alano
fuente
Gracias, esto responde algunas pero no todas las preguntas. He editado mi pregunta para tratar de ser más específico en lo que estoy preguntando
Syntaxén