usar para gpg español encriptar desencriptar con como archivos encryption ubuntu-12.04 gnupg appliance

encryption - para - ¿Cómo hacer auto confianza gpg clave pública?



gpg para linux (12)

Estoy tratando de agregar mi clave pública GPG como parte de nuestro proceso de instalación del dispositivo. El propósito de este es cifrar cualquier archivo importante como registros antes de que el administrador los lleve a su portal de administración local y luego los descifre mediante una clave privada. El plan es exportar la clave pública a un archivo y hacer que el proceso de instalación del dispositivo lo importe con el comando gpg --import. Pero me di cuenta de que la clave es necesaria para ser confiable / firmada antes de realizar cualquier cifrado. ¿Cómo hacer que esta clave sea confiable sin ninguna intervención humana en el momento de la instalación? Por cierto, nuestro sistema operativo es ubuntu vm y usamos kickstart para automatizar.

Avance gracias por toda la ayuda.


Agregue trusted-key 0x0123456789ABCDEF a su ~/.gnupg/gpg.conf reemplazando el keyid. Esto equivale a confiar finalmente en esta clave, lo que significa que las certificaciones realizadas por ella se aceptarán como válidas. Solo marcando esta clave como válida sin confiar en ella es más difícil y requiere una firma o cambiar el modelo de confianza a directo. Si está seguro de importar solo claves válidas, simplemente puede marcar todas las claves como válidas agregando trust-model always . En este último caso, asegúrese de deshabilitar la recuperación automática de claves (no habilitada de forma predeterminada).


Aquí hay un truco que he descubierto para la automatización de la gestión de claves de GnuPG, sugerencia heredoc + --command-fd 0 es como magia. A continuación se muestra una versión abreviada de uno de los scripts que se ha escrito para ayudar en la automatización con GnuPG.

#!/usr/bin/env bash ## First argument should be a file path or key id Var_gnupg_import_key="${1}" ## Second argument should be an integer Var_gnupg_import_key_trust="${2:-1}" ## Point to preferred default key server Var_gnupg_key_server="${3:-hkp://keys.gnupg.net}" Func_import_gnupg_key_edit_trust(){ _gnupg_import_key="${1:-${Var_gnupg_import_key}}" gpg --no-tty --command-fd 0 --edit-key ${_gnupg_import_key} <<EOF trust ${Var_gnupg_import_key_trust} quit EOF } Func_import_gnupg_key(){ _gnupg_import_key="${1:-${Var_gnupg_import_key}}" if [ -f "${_gnupg_import_key}" ]; then echo "# ${0##*/} reports: importing key file [${_gnupg_import_key}]" gpg --no-tty --command-fd 0 --import ${_gnupg_import_key} <<EOF trust ${Var_gnupg_import_key_trust} quit EOF else _grep_string=''not found on keyserver'' gpg --dry-run --batch --search-keys ${_gnupg_import_key} --keyserver ${Var_gnupg_key_server} | grep -qE "${_grep_string}" _exit_status=$? if [ "${_exit_status}" != "0" ]; then _key_fingerprint="$(gpg --no-tty --batch --dry-run --search-keys ${_gnupg_import_key} | awk ''/key /{print $5}'' | tail -n1)" _key_fingerprint="${_key_fingerprint//,/}" if [ "${#_key_fingerprint}" != "0" ]; then echo "# ${0##*/} reports: importing key [${_key_fingerprint}] from keyserver [${Var_gnupg_key_server}]" gpg --keyserver ${Var_gnupg_key_server} --recv-keys ${_key_fingerprint} Func_import_gnupg_key_edit_trust "${_gnupg_import_key}" else echo "# ${0##*/} reports: error no public key [${_gnupg_import_key}] as file or on key server [${Var_gnupg_key_server}]" fi else echo "# ${0##*/} reports: error no public key [${_gnupg_import_key}] as file or on key server [${Var_gnupg_key_server}]" fi fi } if [ "${#Var_gnupg_import_key}" != "0" ]; then Func_import_gnupg_key "${Var_gnupg_import_key}" else echo "# ${0##*/} needs a key to import." exit 1 fi

Ejecute con script_name.sh ''path/to/key'' ''1'' o script_name.sh ''key-id'' ''1'' para importar una clave y asignar un valor de confianza de 1 o editar todos los valores con script_name.sh ''path/to/key'' ''1'' ''hkp://preferred.key.server''

El cifrado ahora debe estar sin quejas, pero incluso si lo hace, la siguiente --always-trust debería permitir el cifrado incluso con la queja.

gpg --no-tty --batch --always-trust -e some_file -r some_recipient -o some_file.gpg

Si desea ver esto en acción, luego verifique los registros de compilación de Travis-CI y cómo se usa la secuencia de comandos auxiliar GnuPG_Gen_Key.sh para generar e importar claves en la misma operación ... la versión dos de esta secuencia de comandos auxiliar será mucho más limpia Y modificable pero es un buen punto de partida.


Basándome en el artículo de @tersmitten y un poco de prueba y error, terminé con la siguiente línea de comandos para confiar en todas las claves de un conjunto de claves determinado sin la interacción del usuario. Lo uso para las teclas que se usan tanto con StackEschange Blackbox como con hiera-eyaml-gpg :

# The "-E" makes this work with both GNU sed and OS X sed gpg --list-keys --fingerprint --with-colons | sed -E -n -e ''s/^fpr:::::::::([0-9A-F]+):$//1:6:/p'' | gpg --import-ownertrust

Personalmente, prefiero una solución que almacene los resultados en el propio archivo trustdb en lugar de depender del entorno del usuario fuera del repositorio de Git compartido.


Casualmente, tengo una situación similar a la OP: estoy tratando de usar claves públicas / privadas para firmar y cifrar el firmware de diferentes dispositivos integrados. Como todavía no hay respuesta, se muestra cómo agregar confianza a una clave que ya ha importado, aquí está mi respuesta.

Después de crear y probar las claves en una máquina de prueba, las exporté como ascii:

$ gpg --export -a <hex_key_id> > public_key.asc $ gpg --export-secret-keys -a <hex_key_id> > private_key.asc

Luego las copió e importó de forma segura al servidor de compilación:

$ gpg --import public_key.asc $ gpg --import private_key.asc

Importante: agregar confianza

Ahora edita la clave para agregar confianza final:

$ gpg --edit-key <[email protected]>

En el indicador gpg> , escriba trust , luego escriba 5 para la máxima confianza, luego y para confirmar, luego quit .

Ahora probarlo con un archivo de prueba:

$ gpg --sign --encrypt --yes --batch --status-fd 1 --recipient "recipient" --output testfile.gpg testfile.txt

que informa

... [GNUPG:] END_ENCRYPTION

sin agregar confianza, recibo varios errores (no limitados a lo siguiente):

gpg: There is no assurance this key belongs to the named user gpg: testfile.bin: sign+encrypt failed: Unusable public key


Con powershell, aquí está cómo confiar en [email protected] (adaptado de la publicación del blog @tersmitten):

(gpg --fingerprint [email protected] | out-string) -match ''fingerprint = (.+)'' $fingerprint = $Matches[1] -replace ''/s'' "${fingerprint}:6:" | gpg --import-ownertrust

Nota: utilizando cinst gpg4win-vanilla


Creo, pensé la manera de hacer esto. Utilicé ''gpg --import-ownertrust'' para exportar mi base de datos de confianza a un archivo de texto y luego eliminé todas mis claves, excepto la clave pública que necesitaba insertar. Y luego importé mi clave pública y mi archivo de confianza de propietario editado al servidor. Esto parece funcionar. Ahora tengo problemas para implementar estos pasos en el archivo Kickstart :-(


Esto funcionó para mí:

Tratando de cifrar un archivo responde con esto:

gpg -e --yes -r <uid> <filename> It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. Use this key anyway? (y/N) That causes my shell script to fail.

Asique:

$gpg --edit-key <uid> gpg> trust Please decide how far you trust this user to correctly verify other users'' keys (by looking at passports, checking fingerprints from different sources, etc.) 1 = I don''t know or won''t say 2 = I do NOT trust 3 = I trust marginally 4 = I trust fully 5 = I trust ultimately m = back to the main menu Your decision? 5 Do you really want to set this key to ultimate trust? (y/N) y Please note that the shown key validity is not necessarily correct unless you restart the program. gpg> quit

Ahora el cifrado funciona correctamente.


Hay una forma de autocrear la clave usando --edit-key, pero sin entrar en el shell interactivo (por lo que puede automatizarse en un script). A continuación se muestra una muestra para windows:

(echo trust &echo 5 &echo y &echo quit) | gpg --command-fd 0 --edit-key [email protected]


Hay una manera más fácil de decirle a GPG que confíe en todas sus claves usando la opción --trust-model :

gpg -a --encrypt -r <recipient key name> --trust-model always

De la página del manual:

--trust-model pgp|classic|direct|always|auto Set what trust model GnuPG should follow. The models are: always Skip key validation and assume that used keys are always fully trusted. You generally won''t use this unless you are using some external validation scheme. This option also suppresses the "[uncertain]" tag printed with signature checks when there is no evidence that the user ID is bound to the key. Note that this trust model still does not allow the use of expired, revoked, or disabled keys.


Su pregunta es realmente: "¿Cómo puedo cifrar una clave sin rechazar gpg ante el hecho de que la clave no es confiable?"

Una respuesta es que puedes firmar la llave.

gpg --edit-key YOUR_RECIPIENT sign yes save

La otra es que podrías decirle a gpg que siga adelante y confíe.

gpg --encrypt --recipient YOUR_RECIPIENT --trust-model always YOUR_FILE


Ver este artículo que escribí recientemente al respecto. Dos posibles soluciones:

  • Magia de concha
  • Esperar

echo "$( gpg --list-keys --fingerprint | grep "your-key-name-here" -B 1 | head -1 | tr -d ''[:space:]''|awk ''BEGIN { FS = "=" } ; { print $2 }'' ):6:" | gpg --import-ownertrust;

Este one-liner se extrae de esta esencia.

Simplemente reemplace "su-clave-nombre-aquí" con el nombre de su clave.