Devo assinar o código-fonte aberto?

11

Eu uso o macOS 10.14 e me deparei com um problema ao tentar instalar um plug-in de código aberto para o Vim que encontrei no Github. Eu baixei o código fonte e o compilei, o que funcionou bem, mas quando o executei, a execução foi interrompida porque a "Assinatura de código [do executável] não é válida para uso em processo".

Isso me deu muitas perguntas que não consigo entender:

Eu mesmo poderia assinar, mas isso não arruinaria o objetivo da assinatura de código? Existe alguma diferença qualitativa na assinatura de código da Internet e na permissão de aplicativos de desenvolvedores não identificados na caixa de diálogo "Este aplicativo foi baixado da Internet"?

Se não o fizer, de quem é a "responsabilidade" de assinar? O mantenedor do repositório? Os contribuidores? A Apple espera que os desenvolvedores de código aberto sempre tenham um ID de desenvolvedor da Apple? Ou entendi mal o objetivo da assinatura de código?

Editar:

Para esclarecer, minha pergunta é como devo lidar com o código-fonte não assinado que eu me compilei, já que não espero que os colaboradores sempre consigam ou lembre-se de assinar seu código, especialmente quando se trata de pequenas contribuições para projetos de código-fonte aberto com muitos colaboradores.

Syntaxén
fonte

Respostas:

9

Assinatura de código ad-hoc

Para aplicativos e binários de terceiros que você compila e requer assinatura de código, use uma assinatura de código ad hoc .

  • Estou assumindo que o aplicativo não será executado sem uma assinatura;
  • Estou assumindo que o aplicativo não será distribuído;
  • Presumo que você não se importe com a validade da identidade da assinatura.

Uma assinatura ad-hoc não oferece benefícios de segurança confiáveis. Pode ser usado para determinar se o aplicativo foi alterado e para aplicar restrições de segurança, como direitos, a um aplicativo.

Uma assinatura ad-hoc será validada contra, codesignmas não spctl. Isso pode ou não importar, dependendo do binário sendo assinado. Para aplicativos e executáveis, é improvável que isso importe, porque spctlnão é executado em binários criados localmente.

Por que assinar código?

Em relação à questão refinada:

Como devo lidar com o código-fonte não assinado que me compile, pois não espero que os colaboradores sempre possam, ou lembre-se de assinar, o código, especialmente quando se trata de pequenas contribuições para projetos de código aberto com muitos colaboradores.

Para a maioria dos aplicativos auto compilados, não há necessidade de assinatura de código. Isso pressupõe que você confie no código do aplicativo. No macOS, você pode abrir aplicativos não confiáveis ​​a partir do Finder, consulte Apple's Open a app from a developer developer .

Se você não confia no código ou nos desenvolvedores, não compile ou execute o aplicativo.

Sua responsabilidade

O provedor do código-fonte não tem responsabilidade ou obrigação de fornecer binários assinados com código pré-criado. Sendo auto-compilado, toda assinatura de código é sua escolha e responsabilidade.

  • A Apple exige que os envios para suas lojas de aplicativos sejam assinados por código.

  • A Apple solicita que desenvolvedores fora de suas lojas de aplicativos assinem seu código, mas ele ainda não é necessário.

Nos dois casos, apenas os binários finais são assinados. O código fonte original e os recursos não estão assinados.

O código-fonte não está assinado

O código-fonte em si não pode ser assinado de maneira significativa para o macOS. Os arquivos e códigos de origem podem ser assinados digitalmente, como qualquer outro arquivo, mas isso não afeta a maneira como o aplicativo ou binário resultante é tratado pelo macOS.

Como Código Ad-Hoc Assine um Aplicativo Mac

Para assinar um aplicativo no macOS com uma assinatura ad-hoc, defina o -ssinalizador de identidade como -:

codesign --force -s - </path/to/application>

Todas as outras regras, requisitos e permutações do codesigncomando permanecem os mesmos.

O sinalizador --forceé usado aqui para substituir qualquer assinatura existente.

Pode ser necessário adicionar o --deepsinalizador ao codesigncomando para assinar sub-recursos, como estruturas e serviços incorporados.

Graham Miln
fonte
Por que você recomenda assinaturas ad hoc? A resposta que você vinculou aos estados "Na prática, criar binários assinados ad-hoc é apenas de valor prático para os desenvolvedores da Apple".
Wowfunhappy
Isso não faz sentido para mim. Adicionar uma assinatura ad-hoc significa que a validação da assinatura falhará. Isso não leva a lugar algum - o programa falhará com a mesma mensagem de erro exata.
Jksoegaard 27/11/18
Sim, vejo que você removeu o link da minha resposta no ad-hoc signinig e adicionou as suposições. Mas essas suposições são válidas? - Você parece estar respondendo como se a pergunta fosse sobre a execução de um aplicativo. Não é. É sobre ter um aplicativo já assinado ao qual o OP deseja adicionar um plugin. Ou seja, o plugin precisa passar na validação da biblioteca com o aplicativo originalmente assinado (Vim) como mestre.
Jksoegaard 28/11
A pergunta original foi editada. É bastante amplo como é. O interlocutor pode comentar, esclarecer e tentar essas respostas para ver o que funciona para eles. Esta resposta tenta responder à pergunta editada e fornece uma abordagem prática. Se isso não ajudar, ou tiver suposições incorretas, espero que o interlocutor possa entrar em cena e esclarecer suas intenções.
Graham Miln
1
Esta resposta foi útil. Minha pergunta foi bastante geral, porque achei os documentos da apple um pouco difíceis de entender. O uso da assinatura ad-hoc resolveu o problema específico que eu tinha.
Syntaxén 01/02/19
5

A assinatura do programa você mesmo não está arruinando o objetivo da assinatura de código. O objetivo geral da assinatura de código é permitir verificar se o programa é uma cópia não modificada criada originalmente por uma entidade específica (pessoa ou empresa). Quando você assina um programa sozinho para rodar no seu computador, torna possível ao sistema verificar se foi você quem criou o binário e se ele não foi modificado por outras pessoas.

A diferença qualitativa entre assinar o aplicativo binário por você mesmo e permitir aplicativos de desenvolvedores não identificados no GateKeeper é que, no primeiro caso, você permite a execução de um único aplicativo específico - enquanto no segundo, você abre a possibilidade de abrir muitos aplicativos. aplicativos diferentes clicando com o botão direito do mouse neles e escolhendo Abrir. Ou seja, é mais restritivo e, portanto, um pouco mais "seguro", assinando você mesmo o programa específico.

A responsabilidade de assinar é inteiramente sua. O desenvolvedor de código aberto não pode assinar o código-fonte - só é possível assinar os binários compilados. Enquanto você produz os binários compilados, é sua responsabilidade assiná-los.

Você pode se inscrever para uma conta de desenvolvedor no site da Apple que permitirá criar um certificado que pode ser usado para assinar. Se você é um desenvolvedor e compila binários regularmente para rodar em Macs, essa é a maneira preferida de fazer as coisas. Se isso é algo que você provavelmente nunca fará de novo, provavelmente será um exagero passar por esse processo. YMMV.

Outras respostas para sua pergunta aqui recomendam que você use assinatura ad-hoc para o seu binário. Isso não vai funcionar. Você precisará gerar uma assinatura válida para executar o binário com o GateKeeper na sua configuração mais segura.

jksoegaard
fonte
1

Devo assinar o código-fonte aberto?

Se você não é o desenvolvedor, então não.

Em poucas palavras, a assinatura de código é um método para dizer que você (o desenvolvedor) é quem diz ser e o código não foi alterado desde a última vez que você o assinou.

Existe alguma diferença qualitativa na assinatura de código da Internet e na permissão de aplicativos de desenvolvedores não identificados na caixa de diálogo "Este aplicativo foi baixado da Internet"?

Parece a sua confusa assinatura de código (o que é exigido pelos desenvolvedores para publicar aplicativos na App Store) e o Gatekeeper (o que protege o seu Mac de instalar software de desenvolvedores não identificados).

Se você permitir que o seu Mac instale software da App Store e dos desenvolvedores identificados, você ainda receberá o pop-up alertando que o software será instalado

E se for de um desenvolvedor não identificado, você receberá o mesmo pop-up com um "ícone de aviso"

Você ainda pode instalar o software. Este é apenas um mecanismo que força a interação do usuário a instalar o software, fornecendo uma camada de segurança contra malware auto-instalado.

Allan
fonte
Obrigado, isso responde a algumas, mas não a todas as perguntas. Eu editei minha pergunta para tentar ser mais específico no que estou perguntando.
Syntaxén