OpenPGP应用示例
使用OpenPGP进行SSH验证
在Windows中使用MeXkey3的OpenPGP进行SSH验证
在Linux中使用MeXkey3的OpenPGP进行SSH验证
在WSL2中使用MeXkey3的OpenPGP进行SSH验证
在Windows中使用MeXkey3的OpenPGP进行SSH验证
查看密钥
输入命令gpg -k --keyid-format short --fingerprint --with-keygrip
查看密钥
找到[AR]标识的密钥,并记下Keygrip与keyID
PS C:\Users\linhu> gpg -k --keyid-format short --fingerprint --with-keygrip
[keyboxd]
---------
pub rsa4096/67593603 2024-04-02 [SC]
Key fingerprint = 0DD2 20B4 4255 5A4A 8A08 A1F4 72E3 9100 6759 3603
Keygrip = 96111D8C38A28F0058DC0B1DE016336B7B76FBAA
uid [ultimate] Metoo <linhui62@live.com>
sub rsa4096/A04407D2 2024-04-02 [E]
Keygrip = 0765BC114A6BA09BA2B6EB42412A7567D9A88534
sub rsa4096/E96FF207 2024-04-02 [S]
Keygrip = 6727D76635C2AE60C1CACE2D6BCD309C51CC020A
sub rsa4096/11C9F011 2024-04-02 [AR]
Keygrip = 07F027D3697B4F26B88FE42C081C52FE51FF3328B88FE42C081C52FE51FF3328
导出SSH格式公钥
使用命令gpg --export-ssh-key 11C9F011
输出SSH格式公钥
PS C:\Users\linhu> gpg --export-ssh-key 11C9F011
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqo+pBue94VZovQKrZ/3fVNGgvVbwLlbuTutNfK29juKE3eWuPv+n3RIELvtASrWua+1MLS1Up+g2soOjgozh85qvAxm1SWCFUkwvNdpgiydXH5G4xYwfdKMWzE7hKlblpMcKIGp/56AzNMoNIQr1hwocPIwT6E73gtWzSz4LRM6bKcwXrppVNbUeU8nYnMWSeaEHmMy5gnQKAXZfJALybW/Ir0iX7Q7mZGVBYUejY0tslqMyEaGOSLymeCNsFk3xIDp002DSj34C0HZXGKQdsYOa5PkyTC4JFcZ7CtV2zhQX2y7+9EHP73cY0kxNRinML2lE/6PpFhF5LqwhSqsW33QoU9cYiu4k2YvBGoRRgREYlZJZPZEF0XRmun0ZlhoYCbrgZpUum+9xMYXdBs67KszGwYqCERRn64Js+uBLTUqVbvCv8koOqjmcAWp6CAMwhZNbg05DRAzFpUBUb4GG156bKwOe28RS/pYNzm/RdjB2S3l/FHxECnfvAR6KLZDAkOhRTxEE8/PRag0INgx+7ifKiYQEE+aryconbJ5DvMLq1wZBbLPUtFjB6K+MOI4kXxaRLW7dJQ3eYq92pE8sIDDmObjXWm7jG+BeXIPN8XbCzmOQ+lapGHevW6XjviF3cbup94UT2tO5svLcz1Azk1tgYCUCphKC/lD+u3ZC2+w== openpgp:0x11C9F011
将输出内容复制添加到服务端~/.ssh/authorized_keys
中
配置GPG agent
打开C:\Users\Your name\AppData\Roaming\gnupg
文件夹,在gpg-agent.conf
文件添加以下内容
enable-ssh-support
enable-putty-support
enable-win32-openssh-support
在sshcontrol
文件添加Keygrip, 注意: 添加Keygrip后需要换行
E57DFA139A46760699AB482039CC3443EB0EAB22
在Linux中使用MeXkey3的OpenPGP进行SSH验证
1. 安装必要软件
sudo apt update
sudo apt install -y gnupg scdaemon pcscd
2. 配置设备识别
编辑libccid配置文件:
sudo sed -i -e '/<key>ifdVendorID<\/key>/{n;a \ \t\t<string>0X303A</string>'$'\n''}' /etc/libccid_Info.plist;
sudo sed -i -e '/<key>ifdProductID<\/key>/{n;a \ \t\t<string>0x0030</string>'$'\n''}' /etc/libccid_Info.plist;
sudo sed -i -e '/<key>ifdFriendlyName<\/key>/{n;a \ \t\t<string>MeXkey3</string>'$'\n''}' /etc/libccid_Info.plist
3. 配置scdaemon
echo "disable-ccid" >> ~/.gnupg/scdaemon.conf
4. 重启gpg代理服务
gpg-connect-agent killagent /bye
5. 验证设备连接
此命令应显示MeXkey3的智能卡信息。如果无输出,请尝试重新插拔设备或检查前面的步骤。
6. 启用SSH支持
echo "enable-ssh-support" >> ~/.gnupg/gpg-agent.conf
gpg-connect-agent killagent /bye
gpg-connect-agent /bye
7. 设置环境变量
# 添加到 ~/.bashrc 或 ~/.zshrc 中使永久生效
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
8. 验证SSH密钥
此命令应显示存储在MeXkey3中的SSH公钥。
9. 测试GitHub连接
成功连接将显示类似:"Hi username! You've successfully authenticated..."
在WSL2中使用MeXkey3的OpenPGP进行SSH验证
环境说明
- 操作系统:Windows 11
- WSL2发行版:Ubuntu
1. 连接MeXkey3到WSL2
# 在Windows PowerShell中以管理员身份执行
winget install usbipd
usbipd list
usbipd bind --busid <BUSID> # 替换为实际总线ID
usbipd attach --wsl --busid <BUSID>
📘 参考:微软官方文档-连接USB设备
2. 安装必要软件包
sudo apt update
sudo apt install -y gnupg scdaemon
3. 配置UDEV规则
# 创建规则文件
sudo nano /etc/udev/rules.d/98-mexkey3.rules
在文件中添加以下内容:
# MeXdiy MeXkey3
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="303a", ATTRS{idProduct}=="0030", GROUP="plugdev", MODE="0660"
应用新规则:
sudo udevadm control --reload-rules
sudo udevadm trigger
4. 配置GPG环境
# 检查设备连接状态
gpg --card-status
# 导入公钥(我通过服务器,你根据自己情况来)
gpg --keyserver hkps://keyserver.ubuntu.com --search-keys "邮箱或者名字"
# 启用SSH支持
echo "enable-ssh-support" >> ~/.gnupg/gpg-agent.conf
# 将密码输入改为使用win上的
echo "allow-loopback-pinentry" >> ~/.gnupg/gpg-agent.conf
echo "pinentry-program /mnt/c/Program Files (x86)/Gpg4win/bin/pinentry.exe" >> ~/.gnupg/gpg-agent.conf
gpg-connect-agent killagent /bye
gpg-connect-agent /bye
# 设置环境变量
echo 'export GPG_TTY=$(tty)' >> ~/.bashrc
echo 'export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)' >> ~/.bashrc
source ~/.bashrc
# 验证SSH密钥
ssh-add -L
5. 创建SSH配置文件
nano ~/.ssh/config
# 如果没有.ssh目录
mkdir -p ~/.ssh
chmod 700 ~/.ssh
添加以下内容:
Match host * exec "gpg-connect-agent UPDATESTARTUPTTY /bye"
6. 功能验证
# 测试GPG签名
echo "test" | gpg --clearsign
# 测试GitHub SSH连接
ssh -T git@github.com
常见问题排查
-
设备未识别:
- 检查
lsusb
是否显示MeXkey3
设备
- 重新执行
usbipd wsl attach
命令
- 重启WSL实例:
wsl --shutdown
-
权限问题:
sudo usermod -aG plugdev $USER
sudo reboot
-
GPG代理问题:
gpgconf --kill gpg-agent
gpg-connect-agent /bye
-
SSH连接失败:
- 确认GitHub已添加公钥:
ssh-add -L | grep -i cardno
- 更新GPG代理:
gpg-connect-agent updatestartuptty /bye
💡 提示:首次使用需在GPG卡上输入管理员PIN(默认12345678)和用户PIN(默认123456)