41

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

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

4

15 に答える 15

33

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

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

gpg --edit-key YOUR_RECIPIENT
sign
yes
save

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

gpg --encrypt --recipient YOUR_RECIPIENT --trust-model always YOUR_FILE
于 2013-06-16T06:01:29.470 に答える
20

偶然にも、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 <user@here.com>

gpg>プロンプトで、と入力し、最終的な信頼をtrust入力してから、確認のために と入力します。5yquit

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

$ 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
于 2014-07-03T00:20:23.743 に答える
10

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

于 2014-06-12T19:17:08.703 に答える
3

これは、GnuPG キー管理の自動化のために私が考え出したトリックです。ヒントヒアドキュメント +--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'1script_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 の方がはるかにクリーンです。変更可能ですが、良い出発点です。

于 2016-12-04T22:52:15.223 に答える
2

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

于 2012-10-29T23:24:41.830 に答える
2

--import-ownertrustこのワンライナーは、指紋をフラグで必要な形式に抽出することにより、STDIN からの ownertrust 値で trustdb を更新します。

このフラグは、gpg のマニュアル ページで説明されているように、使用する必要があります。trustdb がひどく損傷している場合、および/または ownertrust 値の最近のバックアップがある場合は、trustdb を再作成することができます

gpg --list-keys --fingerprint \
    | grep ^pub -A 1 \
    | tail -1 \
    | tr -d ' ' \
    | awk 'BEGIN { FS = "\n" } ; { print $1":6:" }' \
    | gpg --import-ownertrust
于 2019-11-27T23:18:54.737 に答える