众所周知大D组了All in Bomb,自然也要搭一个Gitea在上面。

由于会使用GPG来进行Git操作签名,将密钥添加到Gitea内也是属于正常操作了。

但在Windows上有个坑,简单记录一下。

现象

这个坑的现象如下:

    1. 在Powershell中,使用gpg --full-generate-key生成自签发密钥后在Gitea内添加后,进行验证时失败。
    2. 在Powershell中,直接使用echo "test" | gpg --sign会提示gpg: skipped "xxxxxxxxxxxxxxxx": No secret key
    3. 添加正常后,在Powershell中,git commit时会提示gpg: skipped "xxxxxxxxxxxxxxxx": No secret key或者Error: “signing failed: No secret key”

 

解决方法

第一个问题

针对第一个问题,可能是由于命令提示符/终端输出密文时有问题,导致加入Gitea的和实际存储的是不一致的,所以验证会一直失败。

可以选择使用Kleopatra GUI,查看需要加入Gitea的密钥的细节,导出证书即可查看到证书密文。

进行验证时,也使用Kleopatra GUI,将Gitea的验证字符串复制到剪贴板(只复制文本框里的字符串,不要复制包含gpg的命令),然后使用OpenGPG签名,选择好证书,输入密码,完成后的密文就在剪贴板上,直接去Gitea粘贴即可。

另外,Gitea和Github均对GPG的加密方式支持有限,高版本的GPG4Win默认的加密方式可能不被支持,所以在生成证书时,可以选择RSA方式。

第二、三个问题

在Powershell内执行gpg --list-secret-keys --keyid-format=long,正常情况下应如下图所示:

有可能出现只有一个pubring.kbx的情况,这时使用的文件均在用户目录的.gnupg下,尝试删除这个目录看看。

如果是git commit时报错,可以使用下方命令尝试将GPG4Win添加到.gitconfig内然后再试。

外传

在WSL1/2上使用会遇到因为无法弹出密码输入框而报错的问题,WSL1和2要分开来解决。

WSL1的解决方法

WSL1可以通过重定向TTY来解决。

.bashrc或者.zshrc(取决于使用bash还是使用zsh)中添加:export GPG_TTY=$(tty)

重启终端生效后即可正常显示密码输入框,但在VSCode中远程连接到WSL1时,仍然无法弹出输入框,这时可以使用VSCode的“GPG Indicator ”插件配合调高密钥缓存时间来变相解决。

WSL2的解决方法

在WSL2上解决就简单些,直接指定使用Windows上的GPG程序就可以了。

编辑GPG的config文件:

添加:

即可解决。

 

版权声明
转载保留版权: 大D技研室 | 《在Windows上使用GPG4Win的坑》
本文链接地址:https://www.dadclab.com/archives/7902.jiecao
转载须知:如果您需要转载本文,请将版权信息,版权授权方式,以及本文的链接地址注明,谢谢合作。
本文被贴上了: , , 标签