ref: https://github.com/ahoward/sekrets
NOME sekrets.rb SINOSSI sekrets è uno strumento a riga di comando e una libreria utilizzata per gestire in modo sicuro file e impostazioni crittografati nelle tue applicazioni rails e nei repository git. INSTALLAZIONE gem install sekrets gem 'sekrets' DESCRIZIONE TL;DR # crea un file di configurazione crittografato ruby -r yaml -e'puts({:api_key => 1234}.to_yaml)' | sekrets write config/settings.yml.enc --key 42 # visualizzalo sekrets read config/settings.yml.enc --key 42 # modificalo sekrets edit config/settings.yml.enc --key 42 # verifica che sia crittografato cat config/settings.yml.enc # committalo git add config/settings.yml.enc # metti la chiave di decrittazione in un file echo 42 > .sekrets.key # ignora questo file in git echo .sekrets.key >> .gitignore # ora non è più necessario fornire l'argomento --key ai comandi sekrets read config/settings.yml.enc sekrets edit config/settings.yml.enc # assicurati che questo file venga distribuito sul tuo server echo " require 'sekrets/capistrano' " >> Capfile # committa e distribuisci git add config/settings.yml.enc git commit -am'impostazioni crittografate yo' git pull && git push && cap staging deploy # accedi a queste impostazioni nel codice della tua applicazione settings = Sekrets.settings_for('./config/settings.yml.enc') DESCRIZIONE sekrets fornisce strumenti da riga di comando e una libreria per gestire e accedere ai file crittografati nel tuo codice sorgente. consente di inserire informazioni crittografate in un repository e di gestirle insieme al resto del codice sorgente. elimina la necessità di inserire informazioni non crittografate, chiavi o altre informazioni sensibili. sekrets fornisce sia un meccanismo generale per gestire file crittografati arbitrari, sia un meccanismo specifico per gestire file di configurazione crittografati. RICERCA DELLA CHIAVE per *tutte* le operazioni, dalla riga di comando o altrimenti, sekrets utilizza il seguente algoritmo per cercare una chiave di decrittazione: - qualsiasi chiave passata direttamente come parametro a una chiamata di libreria sarà preferita - altrimenti il codice cerca un file di chiave compagno. per esempio, dato il file 'config/sekrets.yml.enc' sekrets cercherà una chiave a config/.sekrets.yml.enc.key se uno di questi viene trovato non vuoto, il contenuto del file verrà utilizzato come chiave di decrittazione per quel file. non dovresti *mai* committare questi file di chiave e aggiungerli anche al tuo .gitignore - o simili. - successivamente viene cercato un file di chiave del progetto. il percorso di questo file è ./.sekrets.key normalmente e, in un'applicazione rails RAILS_ROOT/.sekrets.key - se non viene trovato sekrets cerca la chiave nell'ambiente sotto la variabile di ambiente SEKRETS_KEY la variabile di ambiente utilizzata è configurabile nella libreria - successivamente viene cercato il file di chiave globale, il percorso di questo file è ~/.sekrets.key - infine, se nessuna chiave è stata ancora specificata o trovata, all'utente viene richiesto di inserire la chiave. la richiesta si verifica solo se l'utente è collegato a un tty. quindi, ad esempio, nessuna richiesta farà bloccare un'applicazione avviata in background come un'applicazione rails gestita da passenger. vedi Sekrets.key_for per ulteriori dettagli DISTRIBUZIONE DELLA CHIAVE sekrets non *cerca* di risolvere il problema della distribuzione della chiave per te, con un'eccezione: se stai utilizzando capistrano per eseguire una distribuzione 'vaniglia' basata su ssh, viene fornita una semplice ricetta che rileverà un file di chiave locale e lo copierà scp sul server remoto/i al momento della distribuzione. sekrets presume che il file di chiave locale, se esiste, sia corretto. in inglese semplice la ricetta capistrano fa: scp ./sekrets.key deploy@remote.host.com:/rails_root/current/sekrets.key è ovvio che il file di chiave locale non dovrebbe *mai* essere committato e dovrebbe anche essere in .gitignore la distribuzione di questa chiave tra gli sviluppatori è al di fuori della portata della libreria. probabilmente l'email non crittografata è il miglior meccanismo per la distribuzione ;-/