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.
Alguns tutoriais para instalação e teste do GPG nos sistemas linux/mac:
- https://gist.github.com/ankurk91/c4f0e23d76ef868b139f3c28bde057fc
- https://www.guiafoca.org/guiaonline/seguranca/ch07s11.html
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
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:
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.
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:
Vou criar um arquivo index.html, para realizar um commit:
Agora vamos realizar o commit assinado:
1- Vou estar ativando a configuração para obrigar assinatura nesse repositório:
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:
Como podemos ver, ao lado do commit que realizamos está com a tag 'verified', que demonstra que foi de fato assinado.
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