untrusted solucion sierra quiere llavero llave español cert acceder macos ssh jenkins code-signing

solucion - untrusted cert title macos sierra español



"La interacción del usuario no está permitida" al intentar firmar una aplicación OSX usando codesign (15)

Así que intenté cada respuesta aquí y algo no estaba terminando de sumar. Finalmente me di cuenta cuando reinicié mi servicio de CI, estaba funcionando con un usuario diferente de lo que esperaba. Cambiar al usuario que realmente tenía acceso a la clave en su cadena de inicio de sesión solucionó todo. Esto puede no ser un problema común, pero quería documentar mi razón específica para este error, en caso de que le pase a otros.

Nuestra construcción automatizada se ejecuta en Jenkins. La construcción en sí se ejecuta en esclavos, con los esclavos se ejecutan a través de SSH.

Me sale un error:

00:03:25.113 [codesign-app] build/App.app: User interaction is not allowed.

He intentado cada sugerencia que he visto hasta ahora en otros mensajes aquí:

  • Usar el llavero de desbloqueo de seguridad inmediatamente antes de firmar para desbloquear el llavero.
  • Moviendo la clave de firma hacia su propio llavero.
  • Mover la clave de firma en el llavero de inicio de sesión.
  • Mover la clave de firma al llavero del sistema.
  • Estableciendo manualmente list-keychains solo al llavero que contiene la clave.

En todos los casos, obtengo el mismo error.

En un intento de diagnosticar el problema, intenté ejecutar el comando "security unlock-keychain" en mi terminal local y descubrí que en realidad no desbloqueaba el llavero; si miro en Keychain Access, el símbolo del candado aún está allí. Este es el caso si paso la contraseña en la línea de comandos o si dejo que me lo pida. Al desbloquear el mismo llavero usando la GUI, me pedirá la contraseña y luego la desbloquearé. Además, si ejecuto "security lock-keychain", veo el bloqueo de teclas inmediatamente después de ejecutar el comando. Esto me hace pensar que el desbloqueo de llavero en realidad no funciona. Experimento el mismo comportamiento en Lion (que estamos usando para los esclavos de compilación) y en Mavericks (que estoy desarrollando).

A continuación, intenté agregar -v a todos los comandos de seguridad:

list-keychains "-d" "system" "-s" "/Users/tester/.secret/App.keychain" Listing keychains to see if it was added: (( "/Library/Keychains/System.keychain" )) unlock-keychain "-p" "**PASSWORD**" "/Users/tester/.secret/App.keychain" build/App.app: User interaction is not allowed.

A partir de esto, parecería que list-keychains es lo que no funciona. Tal vez ni trabajo. : /

Hay una pregunta similar aquí . La solución es interesante: configure "SessionCreate" en true en launchctl. Pero no estoy desarrollando el maestro: mi proceso de compilación se inicia desde SSH en una máquina de creación de esclavos. ¿Tal vez hay una forma de línea de comandos para hacer lo que launchctl está haciendo cuando ejecuta "SessionCreate"?


Bueno, supongo que tengo que responder mi propia pregunta hoy, porque después de apuñalarla durante dos días y medio, una de las cosas que probé parece haber funcionado. Voy a alejarme de eso ahora y espero que siga funcionando.

Básicamente, parece que se trata de que el -d system no funciona realmente. Así que muchas de las respuestas a otras preguntas aquí probablemente deberían actualizarse para reflejar eso.

security -v list-keychains -s "$KEYCHAIN" "$HOME/Library/Keychains/login.keychain" security list-keychains # so we can verify that it was added if it fails again security -v unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN" codesign --sign "$SIGNER_IDENTITY" --force --signature-size 9600 / --resource-rules src/AppResourceRules.plist --timestamp --verbose / "$APP"


Desbloquear el llavero no es suficiente. También debe establecer el acceso de la clave privada a "Permitir que todas las aplicaciones accedan a este elemento". Y para hacer eso desde la línea de comandos, se requiere reimportar la clave. Entonces, tomar las cosas a la vez:

Desbloquee el llavero de inicio de sesión si está bloqueado. Sin embargo, no debería estar bloqueado, pero de todos modos así es como lo haces:

security -v unlock-keychain -p "$KEYCHAIN_PASSWORD" "~/Library/Keychains/login.keychain"

Si por alguna razón su máquina de compilación tiene bloqueado el llavero de inicio de sesión y no desea exponer esa contraseña en una secuencia de comandos, entonces debe usar una llavero diferente. Puede crear uno sobre el terreno y usarlo en el comando anterior y el siguiente. Para crear uno sobre el terreno:

security create-keychain -p ''temporaryPassword'' MyKeychain.keychain security list-keychains -d user -s login.keychain MyKeychain.keychain

Luego importe sus certificados y claves privadas asociadas en el llavero de inicio de sesión usando el parámetro -A. Tenga en cuenta que no necesita sudo para todo esto ...

security import <cert.p12> -k "~/Library/Keychains/login.keychain" -P <passphrase> -A

El parámetro -A es lo que hará que su clave privada se configure como "Permitir que todas las aplicaciones accedan a este elemento"

Entonces, usando todo esto, debería poder hacer un script que instale el certificado requerido para construir un archivo ipa y firmarlo sin solicitud. Puede almacenar el archivo .p12 en su repositorio, para que cualquier máquina pueda construir su archivo ipa sin necesidad de configuración manual.


Después de probar varias de las soluciones anteriores. Me di cuenta de que uno de los factores que tenía, era que estaba comenzando la compilación usando la consola ION. Cuando volví a hacer la compilación desde la aplicación Terminal, todo funcionó bien.


En mi caso, esto fue causado por la creación de un llavero con un tiempo de espera predeterminado de 300 segundos y una compilación xcode larga que dura más de 300 segundos. La solución alternativa, para mí, era invocar:

security set-keychain-settings -t <longer timeout in seconds> <keychain>

inmediatamente después de crear el llavero temporal.


Entonces este es el comando que funciona. -A es para evitar que Mac solicite una contraseña. La importación a system.keychain no requiere una GUI.

sudo security import <cert.p12> -k "/Library/Keychains/System.keychain" -P <passphrase> -A


Importe sus llaves al llavero del sistema. Puedes usar este comando:

sudo security import YourKey.p12 -k /Library/Keychains/System.keychain -P PasswordToYourKey -T /usr/bin/codesign


Intenta llamar al security unlock-keychain y codesign como un comando de una línea. Esto me ayudó. Algo como:

security unlock-keychain -p <password> /Users/<user>/Library/Keychains/login.keychain && codesign --force --verify --verbose --sign "<certificate id>" <app name>


Mi llavero estaba bloqueado. Se resistió a mis avances para cambiar ese hecho ...

Keychain Access -> Keychain First Aid -> Repair , et voilá !


Ninguna de las otras respuestas funcionó para mí.

Lo que finalmente me salvó fue esta publicación

En resumen, esto puede deberse a un tiempo de espera predeterminado de 5 minutos, que desencadenará este error después de una compilación larga.

Arreglar:

security set-keychain-settings -t 3600 -l ~/Library/Keychains/login.keychain


Para mí sucede cuando hay un segundo llavero agregado manualmente y está bloqueado. Por algún motivo, codesign trata de acceder al llavero bloqueado y falla a pesar de que los certificados están en el llavero de inicio de sesión (y están desbloqueados). Desbloquear el segundo soluciona el problema. Simplemente no tiene sentido para mí.


Para mí, nada funcionó parece tener que reinstalar Xcode todo de nuevo. Jenkins sigue dando el mismo error. Ahorraría mucho tiempo si solo mueve la instalación de Xcode a la Papelera y vuelve a instalarla. Asegúrese de ejecutar el comando codesign desde la línea de comando al menos una vez.

Incluso después de obtener el mismo error, intente configurar ''Desbloquear Llavero?'' propiedad dentro de Jenkins y dar paso a su login.keychain en /Users/${USER}/Library/Keychains/login.keychain

Espero que Dios te acompañe después de eso.


Pon tus llaves en el llavero del sistema


Repasé todas estas sugerencias y todavía tenía problemas para usar el gym de fastlane en un trabajo de Jenkins. Tenía el certificado instalado y el llavero desbloqueado, y pude asignar códigos al esclavo cuando ejecuté manualmente el comando codesign en la línea de comando.

Como solución alternativa, si Jenkins se conecta al esclavo usando JNLP en lugar de SSH, podrá codificar.


Yo también he estado peleando esto. Nada ayudó hasta que probé la sugerencia en http://devnet.jetbrains.com/thread/311971 . Gracias ashish agrawal!

Inicie sesión en su usuario de compilación a través de la GUI y abra el Acceso a Llaveros. Seleccione su clave privada de firma, haga clic derecho, elija Obtener información, cambie a la pestaña Control de acceso y seleccione "Permitir que todas las aplicaciones accedan a este elemento".