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 (5)

O comando desta resposta apenas desbloqueou o chaveiro para mim, mas eu ainda tinha o prompt da interface do usuário perguntando se o aplicativo atual poderia usar a chave.

Impedi o prompt assim:

Vá para o chaveiro em Acesso ao chaveiro, clique duas vezes em todas as chaves existentes e, na guia Controle de acesso, marque 'Permitir que todos os aplicativos acessem este item'.

Consegui fazer upload do novo arquivo de chaves no meu servidor de compilação Jenkins, onde ele é desbloqueado pelo plug-in de perfis de chaveiro e provisionamento . A compilação agora consegue assinar.

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

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 #2

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 #3

O comando que você precisa usar é o seguinte:

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

Lembre-se de que essa ferramenta de linha de comando funciona como o modo de modificação da lista de chaveiros. Se você executar set-key-partition-list com um único valor, ele substituirá todos os IDs da partição nos certificados. Não validará os valores passados.

O que esse comando faz é que ele defina os PartitionIDs (itens após -S separados por vírgula) para chaves que podem assinar (-s) para um conjunto de chaves específico. O verdadeiro partitionID que permite a assinatura de código é apple:

Não sei qual é apple-tool: está fazendo o que não está documentado, mas estava lá depois de importar a chave com a security import por isso estou mantendo-a para evitar violar as pessoas que copiam e colam o comando.

Essa alteração foi introduzida no Mac OS Sierra e não está documentada (ou pelo menos não foi possível encontrar a documentação). Desde 16 de outubro, a página de manual de segurança ainda não lista esse comando.

Para mais informações, você pode consultar este relatório de bug - http://www.openradar.me/28524119


Answer #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.





macos-sierra