Executando verificação de segurança...
6

Git & Github: Começando com assinatura de commits

Problema de não assinar commits

Quando começamos a trabalhar com git, a primeira coisa básica, além de instalar, é começarmos uma série de comandos para dizer quem somos nós.

git config --global user.name "Matheus Poda"
git config --global user.email [email protected]

Essas informações que passamos é utilizada quando realizamos commit do nosso código, dessa forma, sempre estará aparecendo seu nome e dados, para mostrar quem foi o responsável por realizar um commit no repositório.

Porém, é comum burlar esses dados que passamos, quando estamos trabalhando em projetos de larga escala com diversas equipes ou até mesmo uma equipe pequena.

Qualquer pessoa na equipe, pode alterar as configurações que vimos acima e colocar você ou outra pessoa, que não é responsável pelo commit, e realizar essa ação e isso pode acabar se tornando um problema de segurança.

Por conta dessa possível "fraude" de autor de commit, que podemos utilizar uma forma ainda mais segura de trabalhar com Git e a plataforma de repositórios (GitHub, Bitbucket e etc), essa forma é assinando digitalmente nossos commits.

Nesse breve tópico, vou estar ensinando o básico de como gerar uma assinatura e assinar commits direto no GitHub!


Instalação no Windows

O primeiro passo para começar a assinar seus commits, é de fato, criar a assinatura, que é um processo de segurança, já que é feito através de chaves (Tokens) criptografadas.

Para criar essa chave, iremos utilizar o sistema GPG (GNU PG), que praticamente é um software open-source que trás a mesma ideia do PGP (Pretty Good Privacy), que no caso é pago. Esse software nos permite criar chaves criptografadas para uso.

Nesse tópico, estarei utilizando o sistema operacional Windows, porém vou deixar mais a baixo alguns links de referência para usuários linux/mac se guiarem, normalmente o gpg nesses sistemas, já vem pré-instalado, porém no Windows é preciso instalar.

Para realizar a instalação, você deve baixar o gpg4win, nele vem outro sistema de criptografia junto, o Kleopatra, que pode ser útil no futuro.

Configuração GPG4WIN

Alguns tutoriais para instalação e teste do GPG nos sistemas linux/mac:


Criando sua chave GPG

Tendo o gpg funcional em seu terminal de preferência, vamos começar a parte de criação da chave.

O primeiro comando útil de saber é o relacionado a listar nossas chaves:

gpg --list-secret-key --keyid-form LONG

Para criarmos uma chave, usaremos o seguinte comando:

gpg --full-generate-key

Terminal com o comando rodando

Ele irá te fazer três perguntas, para o tipo de Key, recomendo utilizar o RSA e colocar 4096 bits, também irá pedir o tempo de duração da chave e por fim irá pedir seu nome e senha (IMPORTANTE: Lembre-se de colocar o mesmo nome e e-mail que seu git config).

Ele irá pedir também uma senha para você dar a chave que está criando, então não esqueça de colocar e anotar.


Adicionado sua chave ao GIT

O primeiro passo é você obter o id da chave gerada, basta usar o comando que apresentei, você iré ver algo como:

Exemplo chave

Para adicionar a assinatura que você acabou de ver pelo comando de listagem, utilizaremos o seguinte comando

git config --global user.signingkey xxxx

**xxx **-> sua chave

Além disso, precisamos deixar claro que iremos querer assinar nossos commits a partir de agora com a chave gerada:

git config --local commit.gpgsign true

Lembrando que no comando, --local apenas no diretório que você está seu commit será assinado se quiser que sempre seja, independente do repositório (o que não indico), basta colocar --global.


Adicionando chave no GitHub

Para adicionar no github, você precisará da chave pública, obteremos através do seguinte comando:
gpg --armor --export

Ele irá gerar uma sequência de caracteres gigante, você irá copiar do "--BEGIN PGP PUBLIC KEY BLOCK" até o "END PGP KEY BLOCK", incluindo esses caracteres.

Tendo eles em mão, iremos entrar no github e ir até os settings, selecionar "SSH and GPG Keys" e iremos clicar no botão "New GPG Key", lá você deverá colar o que copiou lá no terminal.

Key no github


Realizando um commit assinado

Agora com tudo configurado e já tendo uma chave vinculada ao GitHub e no seu Git, vamos estar realizando um commit assinado.

Primeiro, vou criar um repositório para realizarmos um commit:

GitHub Repository

Diretório do projeto

Vou criar um arquivo index.html, para realizar um commit:

Arquivo index.html

Agora vamos realizar o commit assinado:

1- Vou estar ativando a configuração para obrigar assinatura nesse repositório:

Ativando assinatura no repo

2- Realizar o commit assinado:

git commit -S -m "First Commit!"

Colocamos o -S para dizer que é assinado, e posteriormente ele irá abrir a tela para colocar a senha que criamos quando geramos a chave.

3- Verificando no GitHub:

Commit assinado

Como podemos ver, ao lado do commit que realizamos está com a tag 'verified', que demonstra que foi de fato assinado.

Verified Commit

Espero que tenha sido claro e agora você irá assinar seus commits e ter um projeto ainda mais seguro!!

Se você curiu, não esqueça de salvar esse artigo e compartilhar com o pessoal da sua equipe!

Obrigado pelo seu tempo.

Caso queira acompanhar meus tópicos antigos e novos: https://dev.to/devpoda


Referências

Carregando publicação patrocinada...
1

Interessante este assunto.
Teria algum problema implementar uma assinatura por conta própria em um projeto para meus commits ou antes de assinar é melhor alinhar algo com o mantenedor? Por exemplo algo quebrar ou conflitar com algo.

1

Recomendo fortemente alinhar com o mantenedor para ver se tem as devidas configurações para aceitar sua assinatura em seu repositório!

1

Por qual motivo não indica colocar no global?

Lembrando que no comando, --local apenas no diretório que você está seu commit será assinado se quiser que sempre seja, independente do repositório (o que não indico), basta colocar --global

1

Eu não indico colocar sempre como global, pois a utilização de assinatura, por mais que seja extremamente recomendável, é preciso que o repositório tenha as devidas configurações adicionadas, no caso de projetos que trabalhei, alguns nem precisavam do -S no commit, já que era subentendido a obrigatoriedade.

Mas você também pode deixar --global e não colocar a propriedade -S no seu commit!