macos - codesign da siempre ningún error de identidad encontrado a través de la terminal
osx-snow-leopard code-signing (4)
Como incluso
certtool y | grep "Developer ID Application: xxxx"
no pudo mostrar ningún resultado, supuse que era un problema para acceder al llavero deseado. Entonces, primero verifiqué, la clave privada podía ser accedida por cualquier aplicación en el mismo llavero y luego comencé a usar la opción k=/Users/myUser/Library/Keychains/login.keychain
en el comando certtool y como esto tuve éxito lo hice lo mismo con
codesign --keychain /Users/myUser/Library/Keychains/login.keychain --force --verbose -s "Developer ID Application: xxxx"
He revisado las preguntas ya existentes, pero ninguna ha resuelto mis problemas (como la recreación de certificados). Creé una aplicación en la que dentro de la aplicación tengo pocos ejecutables, carpetas y marcos. Cada vez que trato de hacer codesign -s "our identity" my.app siempre da ninguna identidad encontrada. ¿Alguien puede dar un paso por paso en este proceso?
codesign -s "Developer ID Application: Sai***** (123123123J)" out/Release/Sai.app
Error
Developer ID Application: Sai****** (123123123J): no identity found,
Traté de eliminar "Aplicación de ID de Desarrollador" y el número de serie, pero todo da el mismo error
Buscando ayuda en estas lines
Gracias
La respuesta finalmente fue muy simple. Mi clave privada faltaba. Para esto revoqué el certificado y seguí sus pasos en el programa para desarrolladores (especialmente para crear un certificado de CSR durante el proceso, que no obtuve varias veces, a menos que revoque el certificado).
Tuve algunos problemas con esto también. Verifique dos veces que su identidad de firma de código esté en su llavero, y podría considerar usar la huella digital SHA-1 en lugar del nombre después de la -s.
Puede encontrar la huella digital SHA-1 abriendo el Keychain Access
y seleccionando su Developer ID Application: FOO
certificado Developer ID Application: FOO
, y luego eligiendo Obtener Información . Desde aquí, desplácese hasta el final de la información hasta llegar a Huellas digitales . Aquí se puede copiar la huella digital SHA-1 y deberá eliminar todos los espacios, pero luego tendrá un identificador de 40 caracteres que será apropiado para colocar después de -s
en su declaración de codesign.
Si aún tiene problemas para encontrar la clave, intente lo siguiente desde la Terminal:
certtool y | grep Developer/ ID
y busque cualquier cosa con la Developer ID Application
en el Common Name
para verificar que el certificado se encuentre realmente en un llavero al que se pueda acceder desde la Terminal. Si no ve nada en respuesta, eso indicaría que el llavero que contiene sus credenciales no está disponible para su sesión de la Terminal
. Las razones para esto incluirían cosas como el llavero bloqueado, el shell ejecutándose como otro usuario, ejecutando el comando con diferentes permisos (como sudo
).
Después de ejecutar el comando anterior, debe tener como mínimo lo siguiente:
Developer ID Application: <your company name>
Developer ID Installer: <your company name>
Developer ID Certification Authority
Si no tiene los tres, debe ir y descargar los elementos faltantes. Aunque es posible que actualmente no necesite construir un Instalador, no hay ningún problema en tenerlo cerca. Los elementos de aplicación e instalador se pueden descargar de la sección Certificados de Mac de la pestaña Certificados, identificadores y perfiles en el sitio para desarrolladores de Apple . Deberías tener listados allí que no hayan expirado. Es posible que también haya allí listados que hayan expirado. Para instalar los certificados en tu llavero:
- Acceda al sitio para desarrolladores de Apple
- Acceda al Mac Dev Center
- Enlace de acceso de certificados, identificadores y perfiles
- Descargue los certificados del portal
- Haga doble clic en los Certificados y el Acceso a Llaveros debería abrir
- Permitir acceso a llavero para agregar los certificados a su llavero
La Autoridad de Certificación de ID de Desarrollador debería haber sido instalada por Xcode, pero si no lo fue, puede instalarla usted mismo. Deberá descargarlo por separado de Developer ID Authority o haciendo clic en el enlace + en la pestaña Certificados y usar el enlace en la parte inferior para descargar el Certificado.
Este también sería un buen momento para asegurarse de contar con la Autoridad de Certificación de Relaciones con Desarrolladores de Apple , que es la base de algunas de las herramientas de firma. Debe instalarse en su Llavero del sistema , mediante el instalador de Xcode y puede descargarse directamente desde el enlace + en la pestaña Certificados anterior o desde la CA del WWDR de Apple .
De acuerdo con la Guía de distribución de aplicaciones de Apple , existen llaveros específicos que son apropiados para cada uno de los certificados y claves:
- Sus claves privadas y sus certificados de firma ( Instalador de ID de desarrollador , Aplicación de ID de desarrollador y Certificados de la Tienda de aplicaciones) deben estar en su llavero de inicio de sesión.
- La Autoridad de Certificación de Relaciones con los Desarrolladores de Apple Worldwide y la Autoridad de Certificación de ID de Desarrollador pertenecen al sistema llavero
- Sus certificados de desarrollador también pertenecen a su llavero de inicio de sesión
Mantenimiento llavero
Debido a que Xcode manipula automáticamente los llaveros, y debido a que algunos certificados se vuelven a emitir regularmente cuando cambian los perfiles (aunque no para ID de desarrollador, ya que tiene certificados de varios años y no requiere perfiles), puede terminar con una propagación innecesaria y certificados potencialmente confusos en tu llavero. Es una buena idea limpiarlos cuando hayan expirado, ya que pueden crear confusión en Xcode.
ADVERTENCIAS
- Antes de realizar cualquier mantenimiento en sus Llaveros, asegúrese de tener una copia de seguridad de sus llaveros
- Este proceso está destinado a eliminar Certificados innecesarios relacionados con el desarrollo. Si los certificados no comienzan con el Desarrollador de Mac , el Desarrollador de Mac de terceros , el Desarrollador de iPhone o la ID de Desarrollador , no se meta con ellos en este momento. Si elimina accidentalmente el Certificado que recibió con un correo electrónico (por ejemplo), incluso si ha caducado , es posible que no pueda leer el correo electrónico que recibió.
Cosas para hacer:
- Salir de Xcode
- Ejecuta los primeros auxilios de llavero (desde el acceso a Llaveros ) y verifica que tus llaveros estén bien.
- Haga clic en la categoría Certificados en la barra lateral izquierda
- Localice los certificados de desarrollador caducados de los tipos mencionados anteriormente. Aparecerán con una pequeña X en la esquina inferior derecha.
- Seleccione los Certificados que va a eliminar y haga una copia de seguridad utilizando Archivo> Exportar elementos ...
- Coloca este archivo en un lugar seguro y dale una buena contraseña
- Eliminar los certificados que ha respaldado
- Examine sus certificados restantes y verifique que tenga los certificados mencionados en la sección anterior. Si no lo hace, deberá descargarlo y posiblemente renovarlo.
- Verifique que los certificados estén en los llaveros que se indican arriba (todos sus certificados de firma deben estar en su llavero de inicio de sesión , por ejemplo)
aunque no hice esto para la firma del código de desarrollo de Apple, todavía creo que tengo un contenido valioso que podría ayudarlo a solucionar ese problema. La diferencia es que creé mi propio certificado mientras obtenías uno de Apple.
Verifique la confianza del certificado, debe ser confiable para la firma del código (en yosemite, que es el tercero más reciente en la sección de confianza de la vista de cert en el acceso a la llavero). Tenga en cuenta que para la firma de su código, el certificado debe estar en el llavero de inicio de sesión, lo necesitaba en el llavero del sistema.
Al principio, el certificado no era conocido por la firma del código de llavero, porque faltaba el propósito de la extensión "Firma de código", puede encontrarlo si observa el llavero y hace doble clic en el certificado:
Lo arreglé (no puedes arreglarlo ya que Apple te proporciona el certificado. La extensión debería estar allí):
Luego agregué el certificado a los certificados de firma confiables, después de arrastrar y soltar el certificado del llavero a mi escritorio, que creó ~ / Desktop / gdb-cert.cer (tenga en cuenta que puede omitir -d y -r trustRoot:
$ sudo security add-trusted-cert -d -r trustRoot -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/gdb-cert.cer
Esto fue un poco complicado porque algunas publicaciones en Internet me indujeron a error y no miré la página del manual. Algunos dijeron que deberías usar add-trust ( https://llvm.org/svn/llvm-project/lldb/trunk/docs/code-signing.txt ). Lo terrible fue que el comando tuvo éxito, pero no hizo lo que debería.
Después de eso, encontré el nuevo certificado en los certificadores de confianza así:
$ 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
En mi caso, el certificado de Apple ha expirado, pero el que estaba usando para firmar gdb no lo estaba (bueno, lo acabo de crear yo mismo). Además, tenga en cuenta que la política tiene un nombre diferente para el "security add-trusted-cert" (- p codeSign) y el comando "security find-identity" (-p designing). Luego pasé a firmar gdb y también siempre obtuve:
$ codesign --sign gdb-cert.cer --keychain ~/Library/Keychains/login.keychain `which gdb`
gdb-cert.cer: no identity found
porque tenía la impresión de que tenía que dar el nombre de archivo del archivo cert a la opción --sign, pero de hecho era el CN del certificado que debería haber proporcionado y debería estar en el almacén de confianza. Puede encontrar el CN aquí haciendo doble clic en el certificado en el llavero:
o en la salida anterior de "seguridad find-identity -p codesigning". Luego fui a firmar y tuve que darle el llavero correcto. En su caso, este debería ser el ~ / Library / Keychains / login.keychain, en mi caso el System.keychain:
codesign -s gdb-cert --keychain /Library/Keychains/System.keychain `which gdb`
Eso me dio un gdb de trabajo y debería darle una aplicación firmada.