GPG代理如何工作?


31

我的gpg.conf文件中有一行内容为use-agent
我知道这是指gpg-agent这是一个守护程序。手册页指出:“ gpg-agent是一个守护程序,可以独立于任何协议管理秘密(私有)密钥。它用作gpg和gpgsm以及其他几个实用程序的后端。”

谁能解释在gpg的背景下这意味着什么?gpg-agent的意义是什么?

我目前有GPG 1.4。

  1. 如何判断代理是否正在运行?实际上,我什至不清楚gpg-agent是否随基本GPG 1.4软件包一起安装。
  2. 如果未运行,如何启动它?
  3. 如果它正在运行,如何停止它?

Answers:


38

Gpg-agent是在后台运行的程序(daemon),并将GPG密钥存储在内存中。当GPG进程需要密钥时,它将通过套接字联系正在运行的gpg-agent程序并请求密钥。如果代理进程具有密钥,则将其提供给gpg。如果不是,它将尝试从您的密钥环加载加密的密钥,并提示您输入密钥的密码。代理获得解密后的密钥后,便将其传递给gpg进程。除了GPG密钥外,Gpg-agent可以类似地存储SSH密钥并将其提供给SSH进程,例如ssh-agentSSH附带的程序。

使用密钥代理的主要目的是使您不必在每次使用密钥时都键入密码。代理一次将密钥保存到内存中。GPG本身无法执行此操作,因为该流程一旦完成工作便会终止。

密钥代理可以做的另一件事是允许运行在远程计算机上的GPG在本地代理中获取密钥(这可以从本地文件加载密钥并提示您输入密码)。Gpg-agent尚无法执行此操作,这是一项计划功能。SSH代理转发已经很长时间了。(这是不对SSH密钥使用gpg-agent的原因。)

GPG 1.x或2.0.x知道代理正在运行,因为GPG_AGENT_INFO已设置了变量。此变量包含用于与代理通信的套接字的位置以及代理的进程ID。GPG 2.1始终将agent套接字放置在中~/.gnupg。如果没有运行GPG 2.x,它总是会启动一个代理进程。

您只需运行即可启动代理gpg-agent。如果要将代理进程保留为会话的一部分,则可以将gpg-agent my-session-manager;替换为会话管理器的调用。有些发行版本会自动设置。GPG会自动启动代理,GPG 2.1还会在不需要环境变量的情况下找到正在运行的代理,因此除非您使用旧版GPG或使用代理存储其他类型,否则您无需以此方式启动代理密钥,例如SSH。

您可以使用shell命令发送代理命令gpg-connect-agent。发送kill命令以杀死代理进程(或发送信号)。

Gpg代理随附GPG本身。一些发行版将其单独打包。


6
“当GPG进程需要密钥时,它将通过套接字与正在运行的gpg-agent程序联系,并请求密钥。如果代理进程具有密钥,则将其提供给gpg。” 有点误导。代理不提供客户端进程的密钥。而是使用键代表客户端进程执行操作。(客户端向代理提供签名,加密或解密的功能,而代理则这样做。)使用代理时,SSH和GPG客户端软件将永远无法访问实际密钥。
Peter Samuelson

3
“ Gpg-agent尚不能做到这一点,这是一项计划内的功能。SSH已经很长时间进行代理转发。(这是不对SSH密钥使用gpg-agent的原因。)”并非如此。gpg-agent与SSH代理转发配合良好。我每天都使用它。SSH客户端处理转发,gpg-agent并没有真正参与其中。GPG 本身不支持与代理远程对话。
Peter Samuelson
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.