アプライアンスのインストールプロセスの一部として、GPG公開キーを追加しようとしています。ログのような重要なファイルを管理者が管理ポータルを使用してローカルにプルする前に暗号化し、秘密鍵を使用してそれらを復号化することの目的。計画は、公開鍵をファイルにエクスポートし、アプライアンスのインストールプロセスを作成して、gpg --importコマンドを使用してそれをインポートすることです。しかし、暗号化を行う前に、キーを信頼/署名する必要があることに気付きました。このキーを作成する方法は、インストール時に人間の介入なしに信頼されますか?ところで、アプライアンスosはubuntu vmであり、キックスタートを使用して自動化しています。
すべての助けに感謝します。
あなたの質問は本当に「キーが信頼されていないという事実にgpgがぶつかることなくキーを暗号化するにはどうすればよいですか?」
1つの答えは、鍵に署名することです。
gpg --edit-key YOUR_RECIPIENT
sign
yes
save
もう1つは、信頼して信頼するようにgpgに指示できることです。
gpg --encrypt --recipient YOUR_RECIPIENT --trust-model always YOUR_FILE
偶然にも私は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
Keyidの代わりにtrusted-key 0x0123456789ABCDEF
を~/.gnupg/gpg.conf
に追加します。これは、最終的にこのキーを信頼することと同じです。つまり、このキーによって行われた認証は有効として受け入れられます。このキーを信頼せずに有効としてマークするだけでは難しく、署名が必要になるか、trust-modelをdirectに切り替える必要があります。有効なキーのみをインポートする場合は、trust-model always
を追加するだけで、すべてのキーを有効としてマークできます。後者の場合は、自動キー取得を無効にしてください(デフォルトでは無効になっています)。
これは私のために働きました:
ファイルを暗号化しようとすると、次のように応答します。
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
これで暗号化が正しく機能します。
@tersmittenの記事と少しの試行錯誤に基づいて、ユーザーの介入なしに、指定された鍵リングのすべての鍵を信頼する次のコマンドラインを作成しました。 StackEschange Blackbox と 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
個人的には、共有Gitリポジトリ外のユーザー環境に依存するのではなく、結果をtrustdbファイル自体に保存するソリューションを好みます。
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は、よりクリーンで変更可能ですが、出発点としては優れています。
-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.
私はこれを行う方法を考えました。 'gpg --import-ownertrust'を使用して信頼データベースをテキストファイルにエクスポートし、プッシュに必要な公開キー以外のすべてのキーを削除しました。次に、公開鍵と編集済みの所有者信頼ファイルをサーバーにインポートしました。これは機能しているようです。今、私はこれらの手順をキックスタートファイルに実装するのに問題があります:-(
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
を使用
--edit-keyを使用してキーを自動信頼する方法がありますが、インタラクティブシェルに入る必要はありません(したがって、スクリプトで自動化できます)。以下はWindowsのサンプルです。
(echo trust &echo 5 &echo y &echo quit) | gpg --command-fd 0 --edit-key [email protected]
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」をキーの名前に置き換えてください。