¿Qué son las identidades de firma de código?


¿Qué son las "identidades de firma de código" en XCode?

Son los certificados?

Son las claves privadas?

¿Son los id de la aplicación?

¿Son los perfiles de aprovisionamiento?

Si voy a la configuración de compilación de destino, me pide la identidad de firma de código, así que necesito averiguar esto.

Pensé que habíamos firmado el código usando nuestra clave privada. Sin embargo, ninguno de mis nombres de clave privada aparece. Muestra una lista de certificados (creo, aunque ni siquiera asegúrese.)

 51
Author: Kaitlin Duck Sherwood, 2013-04-14

1 answers

Definitivamente has tocado un tema que se vuelve muy profundo muy rápidamente y es una fuente común de dolores de cabeza al intentar hacer compilaciones de dispositivos de aplicaciones iOS. En primer lugar, permítanme poner un poco de estructura alrededor de cada uno de los términos involucrados en el proceso de Firma de código (tanto para usted como para cualquiera que tropiece con esta pregunta más adelante) y luego podemos pasar a su pregunta principal:

Terminología de CodiSeño

La fase de Firma de código de una compilación de dispositivos iOS es el proceso por el cual firmar y asegurar criptográficamente una disposición específica de datos en una aplicación, incluido el binario ejecutable de la aplicación en sí, cualquier activo multimedia incrustado (como texturas de botones, ilustraciones personalizadas, fuentes, etc.).), y un conjunto de metadatos sobre nuestra aplicación y representa una "huella digital" única de los datos de nuestra aplicación. Esta huella digital es la que utilizan Apple e iOS para ayudar a garantizar que nuestras aplicaciones no se alteren cuando se entregan a los dispositivos del usuario o cuando se ejecutan en los dispositivos del usuario Dispositivos iOS. Para hacer esto posible, los desarrolladores deben registrarse en Apple, configurar un Identificador de Aplicación, solicitar Certificados de Desarrollo y Distribución, Registrar un conjunto de Dispositivos de prueba y, finalmente, solicitar un Perfil de Aprovisionamiento para sus esfuerzos de desarrollo. La función de cada uno de estos elementos es la siguiente:

  • App Identifier (o AppID): Una cadena de estilo DNS inverso que identifica de forma única y exacta una aplicación iOS en la AppStore.
  • Desarrollo y Certificados de Distribución - Estos son documentos digitales firmados criptográficamente por Apple que certifican la identidad de la persona a la que se emitieron los documentos. Para aquellos familiarizados con la Infraestructura de clave pública, el Certificado en sí contiene una clave pública que se puede usar para verificar la integridad de las firmas más adelante en el proceso.
  • Dispositivos de prueba - Los únicos canales de distribución estándar aprobados para el software iOS es a través de la AppStore. Al registrar una prueba dispositivo, los desarrolladores pueden eludir la AppStore e instalar software directamente en los dispositivos para fines de desarrollo y prueba. El número total de dispositivos de prueba permitidos en un año de membresía dado es de 100 dispositivos de prueba.
  • Provisioning Profile - Un documento que contiene tres componentes principales: 1) Exactamente un ID de aplicación, 2) Uno o más certificados de desarrollador de iOS, y 3) Cero o más dispositivos de prueba registrados en los que la aplicación iOS nombrada puede instalarse directamente. El contenido de este los documentos están firmados criptográficamente por Apple para garantizar que su contenido no se pueda manipular.

Es la presencia de este archivo y las comprobaciones de huella digital lo que determina si una aplicación generada por el desarrollador puede instalarse en el dispositivo, ya que contiene la noción de 'Quién' (Certificados), 'Qué' (AppID) y 'Dónde' (qué dispositivos).

Genial, lo tengo...Ahora, ¿qué pasa con esta cosa de la Identidad del Signo de Código?

En el contexto de un objetivo de compilación individual configuración de compilación, el término Code Sign Identity se refiere al Nombre Común de los certificados que se instalan en el Llavero del equipo del desarrollador. En la configuración de compilación de Xcode aparece como una lista de opciones de las que los desarrolladores deben seleccionar una Identidad para usar para CodeSign there hay mucha de información codificada en cada sección de este menú:

Identidad de Signo de Código Xcode

Mirando primero el texto negro-De la imagen de arriba ' Desarrollador de iPhone: Bryan Musial (XXXXXXXXXX) ' - Este es realmente el elemento principal que usa Xcode para encontrar las claves públicas y privadas utilizadas para Codificar el Signo. Al seleccionar este elemento, le está dando instrucciones a Xcode para que entre en su Llavero e intente encontrar un certificado cuyo campo 'Nombre común' coincida con esa cadena y luego tome ese certificado (que contiene la clave pública) y la clave privada asociada para usarla en la operación de Firma de código.

Solo para ser minucioso si abres el acceso a Llaveros y haces doble clic en cualquiera de los ' iPhone Desarrollo: ...'o' Distribución iPhone:...'certificados muestra toda la información codificada en los certificados que Apple emite a sus desarrolladores. Si tuviera que seleccionar la entrada en la primera imagen, Xcode alcanzaría mi Llavero y retiraría este certificado (NOTA: Los detalles de identificación únicos han sido X'd o cambiados):

Ejemplo de Nombre Común de Certificado de Llavero

Como puede ver, el texto negro de la selección de Xcode coincide exactamente con el campo de Nombre común en mi certificado, por lo que Xcode se retiraría este certificado y su clave privada vinculada para su uso en Códigos que firman mi aplicación.

Volviendo a mirar la configuración de Xcode, también notamos que también hay más texto en esa selección de menú the el texto gris más claro identifica el Perfil de aprovisionamiento que se integrará en la aplicación. En el caso de mi configuración de ejemplo, Xcode irá y obtendrá el Perfil de aprovisionamiento "MyiOSApp Testing" que tiene su AppID establecido en 'com.myiosapp.*'. Xcode es muy codicioso con el aprovisionamiento de almacenamiento Y, afortunadamente, Organizer le ofrece un excelente lugar para revisar los perfiles de aprovisionamiento que están instalados y tener una idea de los datos básicos que contienen. De nuevo para la Identidad del signo de Código Xcode en la primera imagen, el Perfil de Aprovisionamiento relacionado en my Organizer se vería así:

Perfil de Aprovisionamiento del Organizador

La columna 'Name' y el extremo final de la columna App Identifier coinciden con el texto gris claro de la configuración de mi Xcode, por lo que este es el Perfil de aprovisionamiento que obtendría seleccionado para su uso durante la firma de código. También es importante tener en cuenta la columna' Status ' al final de la fila. En este caso, es verde e indica 'Perfil válido'. Esto significa que mi Llavero tiene las claves públicas y Privadas para al menos uno de los certificados codificados en ese perfil de aprovisionamiento. Si este estado es cualquier cosa que no sea verde, entonces hay un problema con su configuración actual de Claves Públicas/Privadas y / o el Perfil de Aprovisionamiento Signing El perfil de aprovisionamiento que está intentando utilizar tiene su estado establecido en Verde. Otras posibles opciones de estado incluyen:

Opciones de Estado de Aprovisionamiento del Organizador

  • Identidad de firma válida no encontrada: No tiene la clave pública ni la privada para al menos uno de los certificados codificados en este Perfil de aprovisionamiento. Elimine el perfil del Organizador y, a continuación, vuelva a la herramienta Certificados, identificadores y perfiles en developer.apple.com/ios y asegúrese de tener su Certificado de Desarrollo incluido en el perfil de aprovisionamiento. Verifique que su certificado en Keychain Access no haya caducado ni haya sido revocado y que tenga una clave privada vinculada al certificado de clave pública.
  • El perfil ha caducado: La fecha de caducidad del perfil de aprovisionamiento ha caducado. Elimine este perfil de aprovisionamiento de Organizer y, a continuación, vuelva a visitar la herramienta Certificados, identificadores y perfiles en developer.apple.com/ios y vuelva a emitir este perfil de aprovisionamiento (si realmente todavía es necesario)

Otros elementos que te pueden hacer tropezar

Además de todos los matices sobre asegurarse de que tiene instaladas las claves públicas y Privadas, y que los Perfiles de Aprovisionamiento están configurados correctamente, hay algunas otras cosas que pueden hacer tropezar a los desarrolladores. En primer lugar, Xcode recopila perfiles de aprovisionamiento y los guarda hasta que le dices que los elimine. En teoría, esto no es un gran negocio, excepto en escenarios en los que realiza cambios en un perfil de aprovisionamiento, descarga e instala versión. Muchas veces Xcode tomará el perfil correcto, pero a veces no lo hace bien y pasará horas mirando la herramienta de Certificados, Identificadores y Perfiles, así como su llavero para intentar hacerse una idea de lo que está pasando.

Sugerencia 1: Al instalar una versión más reciente de un perfil de aprovisionamiento, elimine los más antiguos para que Xcode no se encuentre en una posición en la que tenga que tomar una decisión.

Una cosa similar puede suceder si reedita un Certificado de Desarrollo o Distribución Most La mayoría de las veces Xcode activará una advertencia durante la compilación sobre un certificado ambiguo.

Sugerencia 2: Preste atención a las advertencias de ambigüedad durante la compilación. Implica que tiene un certificado antiguo flotando alrededor que cumple con los criterios de compilación y podría usarse inadvertidamente causando un problema de compilación.

Sugerencia 3: Cada vez que esté en Keychain tratando con sus certificados, busque ' iPhone Desarrollador: ...'o' Distribución iPhone:...'certificados que tienen una' X ' roja en ellos. Este es un indicador de que el certificado ha caducado o ha sido revocado. De cualquier manera, esta Clave Pública (y potencialmente clave privada vinculada) no es de mayor utilidad para usted con fines de compilación y puede eliminarse.

Finalmente, la configuración de Identidad de Signo de código también tiene una opción que aparece como 'Selector de perfil automático'. En muchos casos, querrá usar esta opción, ya que hará todo lo posible para automáticamente busque su AppID en la configuración de su destino de compilación, busque un perfil de aprovisionamiento que coincida con ese AppID y contenga certificados para los que tenga una clave pública y privada. En algunas circunstancias de compilación personalizada, puede que no sea posible usar esta opción y tendrá que usar una de las opciones fijas y específicas, como mi configuración de demostración en la primera imagen. Tenga en cuenta si elige una opción fija: cada vez que actualice el perfil de aprovisionamiento, también deberá actualizar Configuración de compilación de identidad de firma de código para que coincida con la versión más reciente.

Conclusiones clave

  • Asegúrese de mantener limpias y deduplicadas las listas de perfiles de aprovisionamiento de Keychain y Xcode.
  • Después de instalar un Certificado y un perfil de aprovisionamiento, asegúrese de que el Organizador informe el estado del perfil de aprovisionamiento como Verde ('Perfil válido'). Cualquier otro estado indica que existe un problema entre el llavero y el perfil de aprovisionamiento que debe solucionarse antes de siquiera considerar ejecutar una construcción.
  • Intente usar el 'Selector de Perfil automático'. Sus compañeros de equipo y cualquier sistema de compilación automatizado estarán más contentos con usted si ellos también no tienen que pensar en la configuración de identidad de Signo de código.
  • Si no puede utilizar el Selector de perfil automático, asegúrese de mantener siempre actualizada esa configuración a medida que se realicen nuevas iteraciones de su perfil de aprovisionamiento.

Buena suerte con su configuración de compilación, y por favor hágamelo saber si ¡tenga cualquier otra pregunta de seguimiento!

 123
Author: Bryan Musial,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-04 14:06:21