ios - segurança/assinatura de código no Sierra: o Keychain ignora as configurações de controle de acesso e as solicitações de interface do usuário para obter permissão



macos codesign (4)

Além disso, se o seu aplicativo tiver sido construído por mais de 5 minutos - você pode ficar sem o temporizador de bloqueio de chaveiro personalizado e receber o erro -1 = ffffffff. Desative o bloqueio do chaveiro como solução tmp.

A partir do macOS Sierra, não consigo mais importar uma identidade de código para um chaveiro com / usr / bin / security, sem que a interface do usuário usr / bin / codesign solicite acesso ao usar essa identidade. Isso interrompe os scripts de empacotamento do servidor de construção. Parece não haver solução alternativa. Isso afeta os chaveiros criados personalizados, mas também o login.keychain.

Etapas para reproduzir: Execute os seguintes comandos no Terminal (requer uma identidade de assinatura disponível para importação):

security create-keychain -p test buildagent.keychain
security unlock-keychain -p test buildagent.keychain

security list-keychains -d user -s buildagent.keychain
security default-keychain -s buildagent.keychain

security import identity.p12 -k buildagent.keychain -P password -T /usr/bin/codesign

codesign -vfs '$IDENTITY' '${PRODUCT}' --keychain 'buildagent.keychain'

Resultado: o macOS mostra um prompt da interface do usuário solicitando permissão para acessar a chave privada importada anteriormente.

Eu tentei muitas soluções alternativas, mas nada parece funcionar:

  • Usando a nova extensão .keychain-db ao especificar o nome da chave
  • Usando o login.keychain em vez do personalizado
  • Importando a p12 com -A ('Permitir que qualquer aplicativo acesse a chave importada')
  • Importando a chave Cert und separadamente (sendo extraído da p12 antes com o openssl pkcs12)

A importação da identidade definitivamente funciona. Posso ver o certificado e a chave ao exibir o conteúdo do chaveiro no aplicativo Keychain Access. A configuração de controle de acesso para a chave privada também está configurada corretamente (com a regra de exceção de assinatura de código desejada).

Como posso evitar o prompt da interface do usuário do Sierra?


Answer #1

Depois de tentar muitas soluções diferentes, o que funcionou para mim foi simplesmente alterar a senha do meu chaveiro.

  • Finder> Ir> Utilitários
  • Abra o utilitário Acesso às Chaves.
  • Não tenho certeza se eu precisava executar esta etapa: Na barra lateral esquerda do utilitário Keychain Access, clique em Meus Certificados. Veja a coluna Chaveiro para confirmar em qual Chaveiro está o seu certificado de desenvolvedor da Apple. No meu caso, estava no chaveiro "login".
  • Altere a senha do chaveiro da etapa anterior. Você pode tentar trancá-lo e desbloqueá-lo, se estiver bloqueado. Para alterar a senha, clique no chaveiro relevante ("login", no meu caso) e selecione "Alterar senha ..." no menu Editar do utilitário Keychain Access.
  • Na próxima vez em que executei a etapa de arquivamento no Xcode (no menu Produto), fui solicitada uma senha de chaveiro e digitei a senha para meu chaveiro de "login". Então funcionou. Quando terminou, vi uma tela de Arquivos com meu aplicativo listado.

Answer #2

Para aqueles que estão enfrentando esse problema com o Travis ou outro IC, é necessário adicionar o codesign identificação na lista de IDs do aplicativo.

security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k keychainPass keychainName

PS: Estou usando keychainName.keychain (adicionando .keychain )


Answer #3

Por alguma razão, a security set-key-partition-list não funcionou para mim.

Eu o resolvi usando a opção -A ao importar o certificado no chaveiro:

security import ${P12_FILE} -k ${KEYCHAIN_PATH} -P ${P12_PASSWORD} -A

Não há necessidade de usar a security set-key-partition-list posteriormente.

Esta opção permite que qualquer aplicativo acesse a chave importada sem aviso. Portanto, impede que o prompt apareça. Observe que é inseguro, pois a chave não está protegida, mas, dependendo do contexto de sua compilação, pode ajudar.

Além disso, o chaveiro deve ser adicionado à lista de pesquisa:

security list-keychains -s ${KEYCHAIN_PATH}

Em seguida, o chaveiro deve ser desbloqueado. Caso contrário, um prompt solicitando a senha do chaveiro será exibido:

security unlock-keychain -p ${KEYCHAIN_PASSWORD} ${KEYCHAIN_PATH}

Eventualmente, o tempo limite do bloqueio automático deve ser desativado. Isso ocorre caso a compilação seja bastante longa e o chaveiro seja bloqueado novamente:

security set-keychain-settings ${KEYCHAIN_PATH}




macos-sierra