2025年3月19日 星期三 甲辰(龙)年 月十八 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 系统应用 > macOS

在 macOS 上使用 Canokey 的 OpenPGP 应用

时间:10-24来源:作者:点击数:84

准备工作

在开始前,确保已经在 macOS 上安装好 Homebrew

使用较新版本的 OpenSSH、Git、GnuPG 替代 macOS 附带的过时版本,vim 作为后面使用的文本编辑器,pinentry-mac 是 macOS 下 GPG 应用的 Pinentry 实现

  • $ brew install git openssh gnupg vim pinentry-mac

配置 Git 用户

  • # 验证 Git 安装
  • $ git --version
  • # 配置 Git 用户信息,注意替换成你自己的
  • $ git config --global user.name "DejavuMoe"
  • $ git config --global user.email "im@dejavu.moe"

设置签名密钥

导入自己的公钥,笔者这里以自己在 GitHub 的公钥为例

  • # 导入公钥
  • $ curl https://github.com/DejavuMoe.gpg | gpg --import
  • # 信任密钥
  • $ gpg --expert --edit-key admin@dejavu.moe
  • # 输入 trust 命令选择信任等级
  • gpg> trust
  • 请决定您对这名用户能否正确地验证其他用户密钥
  • (通过查看护照,检查不同来源的的指纹等等)的相信程度
  • 1 = 我不知道或不作答
  • 2 = 我不相信
  • 3 = 我勉强相信
  • 4 = 我完全相信
  • 5 = 我绝对相信
  • m = 回到主菜单
  • 您的决定是什么? 5
  • 您真的要把这个密钥设置成绝对信任?(y/N) y

现在可以将存有私钥信息的 Canokey/Yubikey 插入 Mac 了

  • # 查看智能卡状态
  • $ gpg --card-status
  • # 编辑智能卡
  • $ gpg --card-edit
  • # 将子密钥指向 Canokey
  • gpg/card> fetch
  • # 退出
  • gpg/card> quit

接下来设置用于签名的 OpenPGP 子密钥

  • $ gpg --card-status
  • # 找到用于签名应用的子密钥 ID,比如 ed25519/AC65D1D723ABCD64
  • # 设置用于签名的子密钥 ID
  • $ git config --global user.signingkey ed25519/AC65D1D723ABCD64
  • # 全局开启 Git 签名要求
  • $ git config --global commit.gpgsign true

设置 SSH

看一下 pinentry-mac 的安装路径

  • $ which pinentry-mac
  • /opt/homebrew/bin/pinentry-mac

编辑 gpg agent 启动的配置文件

  • $ vim ~/.gnupg/gpg-agent.conf

写入以下内容保存

  • pinentry-program /opt/homebrew/bin/pinentry-mac
  • enable-ssh-support
  • default-cache-ttl 600
  • max-cache-ttl 7200

查看各密钥 Keygrip,实际上我们只需要用于 SSH 访问功能是身份认证 [A] 的子密钥就好了

  • $ gpg -K --with-keygrip
  • # 找到标记 [A] 为身份认证的子密钥的 Keygrip
  • ssb> ed25519 2022-01-08 [A] [有效至:2042-06-04]
  • Keygrip = 653FADC5EAB512345E196A3D8C419CAFCF637B09
  • # 将 Keygrip 写入 sshcontrol 文件
  • $ echo 653FADC5EAB512345E196A3D8C419CAFCF637B09 >> ~/.gnupg/sshcontrol

将下面内容写入你默认 Shell 的配置文件里(.bashprofile 或 .zshrc),笔者是 zsh + oh-my-zsh 的组合,所以写进 .zshrc 文件里

  • export GPG_TTY=$(tty)
  • export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
  • gpgconf --launch gpg-agent

让配置文件生效

  • $ source ~/.zshrc
  • $ gpg-connect-agent killagent /bye
  • $ gpg-connect-agent /bye
  • $ gpg --card-status
  • $ ssh-add -l
  • # 导出 SSH 公钥格式
  • $ gpg --export-ssh-key [keyID]

尝试登陆

将导出的 SSH 格式公钥添加到 GitHub(或其他需要登录的服务器),尝试登陆

  • ssh -T git@github.com
  • Hi DejavuMoe! You've successfully authenticated, but GitHub does not provide shell access.

尝试给 Git 提交签名,这时候应该会正常出现 Pinentry 的窗口了

Pinentry Mac

完成,Enjoy!🥹🥹

参考资料:

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门