Hola,
necesito crear un repositorio satis para gestionar los paquetes privados de la empresa en la que trabajo y, por consiguiente, necesito proteger el acceso al repositorio mediante algún mecanismo de seguridad. Tras leer la documentación de Satis y en concreto la sección que habla de este tema me surgen muchas dudas, ya que la documentación es bastante escueta al respecto y mis conocimientos sobre SSH/SSL son bastante escasos, de modo que si alguien pudiese indicarme los pasos a seguir se lo agradecería enormemente.
Un saludo.
Respuestas
La forma más sencilla de crear un repositorio privado con Satis consiste en instalarlo en un servidor al que sólo tengáis acceso vía SSH los empleados de la empresa. Después, en el archivo composer.json
de tus proyectos tienes que añadir la siguiente configuración para indicar tu login y los archivos donde se guardan la clave pública y privada que te permiten acceder a ese servidor remoto:
{ "repositories": [ { "type": "composer", "url": "ssh2.sftp://example.org", "options": { "ssh2": { "username": "composer", "pubkey_file": "/home/composer/.ssh/id_rsa.pub", "privkey_file": "/home/composer/.ssh/id_rsa" } } } ] }
@javiereguiluz
Gracias por tu respuesta Javier. La verdad es que me estaba haciendo un lío y no tenía claro donde debía ubicar la configuración de acceso mediante clave pública y privada. Entonces, si no he entendido mal, cada desarrollador que necesite acceder al repositorio desde su entorno local de desarrollo necesitará forzosamente tener permiso para acceder con par de claves al servidor Satis desde el equipo en el que trabaja, ¿verdad?
@beni0888
@beni0888 efectivamente esa sería la idea para proteger completamente un repositorio privado creado con Satis.
Otra forma de hacerlo que he visto en alguna empresa consiste en instalar Satis en un servidor que solamente se pueda acceder desde la red interna de la empresa. Así los programadores no tienen que indicar sus claves públicas y privadas en el archivo composer.json
.
Obviamente, para poder deployar la aplicación en un servidor externo, sí que tendrías que permitir que el servidor de producción acceda a la red de tu empresa y tendrías que configurar en el archivo composer.json
sus claves. La diferencia es que sólo tendrías que hacerlo para un servidor en vez obligar a que cada programador indique sus claves.
@javiereguiluz
@beni0888 he preguntado a algunos programadores de SensioLabs y me han comentado cómo utilizan ellos los repositorios privados creados con Satis. La solución no se basa en Composer sino en el departamento de sistemas: al servidor donde está el repositorio privado sólo se puede acceder desde la red interna de la empresa y desde la IP que corresponde al servidor de producción.
Si no puedes limitar el acceso por IP, me han comentado que lo mejor sería utilizar un certificado en vez de las claves SSH. La ventaja de hacerlo así es que el composer.json
de todos los programadores es exactamente el mismo porque todos utilizan el mismo certificado:
{ "repositories": [ { "type": "composer", "url": "https://example.org", "options": { "ssl": { "local_cert": "/home/composer/.ssl/composer.pem" } } } ] }
@javiereguiluz
Muchísimas gracias por tu respuesta y por las molestias que te has tomado para documentarte al respecto @javiereguiluz, ahora mismo voy a tratar de ponerlo en práctica. Un saludo.
@beni0888
@javiereguiluz disculpa que vuelva a molestarte con este tema, he puesto en marcha el repositorio Satis protegido con un certificado SSL según las instrucciones de tu último comentario pero no consigo que Composer conecte al repositorio. Cuando ejecuto composer install
recibo el siguiente error:
[Composer\Downloader\TransportException] The "https://satis.example.com/packages.json" file could not be downloaded: Unable to set private key file `/var/www/satisclient/certificado-cliente.pem' failed to create an SSL handle Failed to enable crypto failed to open stream: operation failed
Para ello estoy utilizando un certificado SSL autofirmado tanto en el cliente como el servidor. Los certificados SSL están correctamente creados y funcionando ya que al acceder desde el navegador a https://satis.example.com/
me solicita el certificado del cliente y una vez seleccionado accedo correctamente. Se me ocurre que podría deberse a alguna limitación de Composer en cuanto a certificados protegidos con pass_phrase
, no sé si sabrás algo al respecto.
@beni0888
Tras un fin de semana sin dormir he conseguido dar con la solución al problema. El problema radicaba en que Composer necesita que se le indique en la opción local_cert
la ruta a un fichero que contenga tanto la clave privada como la clave pública del certificado SSL, mientras que yo únicamente le estaba indicando la ruta al fichero con la clave pública.
Finalmente llegué a la solución a través de esta url en la que se comenta un problema similar con la utilidad cURL, ya que la documentación de Composer/Satis al respecto es bastante escasa (por no decir inexistente).
Así que finalmente la solución pasó por hacer lo siguiente:
$> cat clave-privada-cliente.pem clave-publica-cliente.pem > certificado.txt
Añadir la ruta a certificado.txt
en la opción local_cert
del fichero composer.json
y a disfrutar ;)
Un saludo
@beni0888
¡Muchas gracias por la explicación de cómo hacerlo funcionar!
En el repositorio de Composer he leído un comentario de un usuario que propone otra forma de hacerlo. En vez de añadir la ruta del certificado en el archivo composer.json
, se puede utilizar la configuración global de Composer.
Así los cambios sólo hay que hacerlos una vez por cada máquina de cada programador, en vez de tener que añadir la configuración en cada proyecto que utiliza el repositorio privado.
@javiereguiluz
Gracias Javier, evaluaré también la solución que propones.
Un saludo.
@beni0888