web-dev-qa-db-ja.com

自動信頼gpg公開鍵を作成するにはどうすればよいですか?

アプライアンスのインストールプロセスの一部として、GPG公開キーを追加しようとしています。ログのような重要なファイルを管理者が管理ポータルを使用してローカルにプルする前に暗号化し、秘密鍵を使用してそれらを復号化することの目的。計画は、公開鍵をファイルにエクスポートし、アプライアンスのインストールプロセスを作成して、gpg --importコマンドを使用してそれをインポートすることです。しかし、暗号化を行う前に、キーを信頼/署名する必要があることに気付きました。このキーを作成する方法は、インストール時に人間の介入なしに信頼されますか?ところで、アプライアンスosはubuntu vmであり、キックスタートを使用して自動化しています。

すべての助けに感謝します。

28
user1366786

あなたの質問は本当に「キーが信頼されていないという事実にgpgがぶつかることなくキーを暗号化するにはどうすればよいですか?」

1つの答えは、鍵に署名することです。

gpg --edit-key YOUR_RECIPIENT
sign
yes
save

もう1つは、信頼して信頼するようにgpgに指示できることです。

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

偶然にも私はOPと同様の状況にあります-公開キー/秘密キーを使用して、さまざまな組み込みデバイスのファームウェアに署名して暗号化しようとしています。まだインポートしたキーに信頼を追加する方法を示す答えはまだないので、これが私の答えです。

テストマシンでキーを作成してテストした後、それらをASCIIとしてエクスポートしました。

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

次に、安全にコピーしてビルドサーバーにインポートします。

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

重要:信頼を追加する

鍵を編集して、究極の信頼を追加します。

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

gpg>プロンプトでtrustと入力し、次に5と入力して最終的な信頼を確立してから、yと入力して確認し、quitと入力します。

次に、テストファイルでテストします。

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

どのレポート

...
[GNUPG:] END_ENCRYPTION

信頼を追加しないと、さまざまなエラーが発生します(以下に限定されません)。

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

Keyidの代わりにtrusted-key 0x0123456789ABCDEF~/.gnupg/gpg.confに追加します。これは、最終的にこのキーを信頼することと同じです。つまり、このキーによって行われた認証は有効として受け入れられます。このキーを信頼せずに有効としてマークするだけでは難しく、署名が必要になるか、trust-modelをdirectに切り替える必要があります。有効なキーのみをインポートする場合は、trust-model alwaysを追加するだけで、すべてのキーを有効としてマークできます。後者の場合は、自動キー取得を無効にしてください(デフォルトでは無効になっています)。

5
Helmut Grohne

これは私のために働きました:

ファイルを暗号化しようとすると、次のように応答します。

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.

だから私:

$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

これで暗号化が正しく機能します。

4
eurokous

@tersmittenの記事と少しの試行錯誤に基づいて、ユーザーの介入なしに、指定された鍵リングのすべての鍵を信頼する次のコマンドラインを作成しました。 StackEschange Blackboxhiera-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

個人的には、共有Gitリポジトリ外のユーザー環境に依存するのではなく、結果をtrustdbファイル自体に保存するソリューションを好みます。

2
Amos Shapira

GnuPGキー管理の自動化のために私が見つけたトリックは次のとおりです。ヒントheredoc + --command-fd 0は魔法のようなものです。以下は、GnuPGによる自動化を支援するために作成されたスクリプトの1つを要約したものです。

#!/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

script_name.sh 'path/to/key' '1'またはscript_name.sh 'key-id' '1'で実行してキーをインポートし、1の信頼値を割り当てるか、script_name.sh 'path/to/key' '1' 'hkp://preferred.key.server'ですべての値を編集します

暗号化は現在、文句なしであるはずですが、次の--always-trustオプションを使用しても、文句がある場合でも暗号化を許可する必要があります。

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

この動作を確認したい場合は、 Travis-CI ビルドログと、ヘルパースクリプト GnuPG_Gen_Key.sh が同じキーの生成とインポートの両方にどのように使用されているかを確認してください操作...このヘルパースクリプトのバージョン2は、よりクリーンで変更可能ですが、出発点としては優れています。

2
S0AndS0

-trust-modelオプションを使用して、GPGにすべてのキーを信頼するように指示する簡単な方法があります。

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

Manページから:

  --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.
1
Johnny

私はこれを行う方法を考えました。 'gpg --import-ownertrust'を使用して信頼データベースをテキストファイルにエクスポートし、プッシュに必要な公開キー以外のすべてのキーを削除しました。次に、公開鍵と編集済みの所有者信頼ファイルをサーバーにインポートしました。これは機能しているようです。今、私はこれらの手順をキックスタートファイルに実装するのに問題があります:-(

1
user1366786

Powershellを使用した場合、[email protected]を信頼する方法は次のとおりです(@tersmittenブログ投稿から転載):

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

注:cinst gpg4win-Vanillaを使用

0
majkinetor

--edit-keyを使用してキーを自動信頼する方法がありますが、インタラクティブシェルに入る必要はありません(したがって、スクリプトで自動化できます)。以下はWindowsのサンプルです。

(echo trust &echo 5 &echo y &echo quit) | gpg --command-fd 0 --edit-key [email protected]
0
Mike Twc
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;

このワンライナーは this Gist から取得されます

「your-key-name-here」をキーの名前に置き換えてください。

0
genegc