¿Por qué debo firmar git commit / tags? ¿Debo firmar tanto confirmaciones como etiquetas?

1

Pregunta fácil, pero nadie la ha preguntado aquí por lo que veo: ¿Por qué debo firmar los confirmaciones de git?

Para dar algunas cosas más para responder, también hay esta pregunta: ¿Por qué debo firmar las etiquetas de git (versiones)?

Y finalmente: ¿Debo firmar ambos? ¿Por qué, por qué no? ¿Qué es bueno / malo si solo firmo confirmaciones / etiquetas?

    
pregunta rugk 17.08.2016 - 21:19
fuente

1 respuesta

1

¿Por qué es útil?

En general, se trata de modelos de hilos. Y hay varios ejemplos en el pasado, donde habría ayudado. P.ej. gitea lo introdujo después de que su cuenta de bot fuera comprometida .

Es útil para evitar la modificación de su código fuente en su servicio / servidor de alojamiento de git (GitHub, GitLab, Gogs / Gitea, etc.) y en las conexiones a ellos.

¿Qué firmar?

Ahora, para los usuarios de su software, puede ser útil, por ejemplo. descargue etiquetas de liberación firmadas y verifíquelas, para que puedan estar seguros de que creó el código fuente y cosas por el estilo.
Tenga en cuenta aunque la firma de etiquetas de liberación no ayuda en nada Si luego distribuyes tus binarios sin firmar. En la mayoría de los casos, los usuarios prefieren los archivos binarios listos y, por lo tanto, no podrían verificar su autenticidad.

También puede tener sentido firmar las confirmaciones de git si los usuarios pueden usar regularmente la rama maestra directamente para descargar / usar el software. Ellos pueden por ejemplo sea más común cuando se trata de un proyecto PHP que puede clonar y funciona fuera de la caja que cuando tiene que compilarlo, donde muchos usuarios prefieren utilizar binarios compilados.

Sin embargo, las confirmaciones de git firmadas también pueden tener sentido para los desarrolladores, ya que pueden verificar que no se haya introducido maliciosamente en una confirmación de git (al menos no sin que un interlocutor / colaborador lo haga deliberadamente o que firme algo accidentalmente). Como tal, si hay un error en un compromiso, puede estar seguro de que quien lo cometió es quien lo ha introducido. (como de otro modo solo puede configurar su nombre de usuario y correo de git arbitrariamente) Sin embargo, esto solo es realmente útil si todos los miembros de la rama principal firman sus compromisos y, por lo tanto, pueden ser engorrosos.

Atención: recuerde que al firmar los confirmaciones de git debe hacerlo para cada confirmación. Algunos flujos de trabajo aceptan que cree una rama de características y luego firme solo la confirmación de fusión, pero esto tiene que adaptarse a su flujo de trabajo. En cualquier caso, esto también significa que a menudo tiene que usar su clave privada y tenerla (desbloqueada) en su entorno de desarrollo. Esto puede no ser ideal desde una perspectiva de seguridad. En contraste con eso, cuando creas una versión con una etiqueta git firmada, es probable que no lo hagas tan a menudo, por lo que puedes usar un dispositivo / VM / sandbox / user / ... separado, donde no tienes tanto código de desarrollo no confiable en ejecución , pero solo clone / extraiga el repositorio (con git pull --verify-signatures , obviamente, si ha firmado sus compromisos para asegurarse de que no se haya destruido nada) o transfiera todo el repositorio de git de alguna otra manera (de forma "preservada de la integridad") a dónde Puede firmar la etiqueta con una clave de firma guardada en un lugar más seguro. De esta manera, al menos su clave de firma no corre el riesgo de verse comprometida si su máquina de desarrollo se compromete.

Conclusión

Firmar git tags es (IMHO) más útil que firmar confirmaciones , ya que el primero es lo que los usuarios de su software usarán principalmente, mientras que el último es principalmente bueno para desarrolladores y tiene sus riesgos (como se discutió anteriormente). Por lo tanto, también tiene mucho sentido utilizar diferentes claves de firma de git , una para sus lanzamientos que se mantiene en un lugar / camino más seguro y otra que utiliza para firmar todos sus compromisos. Tiene sentido utilizar una clave de firma git personal para firmar confirmaciones y, especialmente en proyectos más grandes, tener la clave de firma de liberación / etiqueta separada y compartida entre el líder del proyecto / algunas personas de confianza, que están autorizadas para realizar liberaciones. De esta manera, los usuarios tampoco tienen que tener 50 claves de sus desarrolladores en su almacén de claves, sino solo la de su proyecto. Especialmente ya que los usuarios probablemente no reconocerán a todos sus desarrolladores y no podrán verificar si esto es un desarrollador real de usted o un atacante.

Entonces, si puedes firmar git tags . Ya ayuda mucho para distribuir su software de forma segura a sus usuarios. Firmar git commit también puede ser útil, pero es probable que no sea tan importante como firmar git tags .

    
respondido por el rugk 21.10.2018 - 14:50
fuente

Lea otras preguntas en las etiquetas