Nuevo en Symfony 4.4: Encriptación de secretos
Almacenar información sensible como contraseñas, tokens y certificados es algo complicado. No puedes almacenarlos en archivos de configuración tradicionales y tampoco puedes usar variables de entorno, ya que es demasiado fácil acceder a su valor en claro. Por eso en Symfony 4.4 hemos añadido una nueva funcionalidad para gestionar información secreta y encriptada.
Imagina que en tu aplicación quieres mantener en secreto el valor de la variable
de entorno DATABASE_URL
para no mostrar los datos de conexión con la base de
datos. El proceso sería el siguiente:
Paso 1. Genera las claves usadas para encriptar/desencriptar secretos (esta funcionalidad utiliza la criptografía asimétrica mediante la librería libsodium):
$ php bin/console secrets:generate-keys
Este comando genera un par de claves en config/secrets/dev/
(or
config/secrets/prod/
). La clave pública se usa para encriptar secretos y debes
añadirla al repositorio de código. La clave privada se usa para desencriptar y
por tanto, no debe ser subida al repositorio ni compartida de ninguna manera.
Paso 2. Sube la clave privada al servidor mediante SSH o cualquier otro
método seguro. Almacénala en el mismo directorio config/secrets/<entorno>/
.
Paso 3. Crea un nuevo secreto para almacenar los contenidos de DATABASE_URL
:
$ php bin/console secrets:set DATABASE_URL Please type the secret value: > ************** [OK] Secret "DATABASE_URL" encrypted in "config/secrets/dev/"; you can commit it.
Cada secreto se guarda en su propio archivo dentro del directorio
config/secrets/<entorno>/
. Puedes subir estos archivos al repositorio porque
su contenido no es accesible a menor que tengas la clave privada.
Y eso es todo. Ya puedes usar este secreto en tus archivos de configuración como si fuera cualquier otra variable de entorno. Symfony desencriptará su valor de forma transparente cuando sea necesario:
.. code-block:: yaml
# config/packages/doctrine.yaml doctrine: dbal: url: "%env(DATABASE_URL)%" # ...
Ahora repite el paso 3 para cada opción de configuración que quieras convertir
en un secreto. También puedes usar el resto de comandos relacionados con los
secretos: secrets:remove
para borrar secretos, secrets:list
para mostrar
todos los secretos disponibles en la aplicación, generate-keys --rotate
para
cambiar las claves y re-encriptar todos los secretos automáticamente, etc.
Esta funcionalidad fue contribuida por Tobias Schultze, Jérémy Derussé y Nicolas Grekas en el pull request #33997.
Fuente: New in Symfony 4.4: Encrypted Secrets Management
Comentarios
Proyectos Symfony destacados
La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más
Síguenos en @symfony_es para acceder a las últimas noticias.