从命令行访问 macOS 钥匙串中的密钥对

从命令行访问 macOS 钥匙串中的密钥对

我像这样创建了一个密钥对:

security create-keypair -a dsa -s 4096 FooBar

现在我想从命令行访问此密钥以实际使用它(如果可能,以 .pem 格式)。但是,security没有find-keypair选项,我无法让任何其他find_...子命令工作。有办法吗?

编辑:

现在我找到了一个(不方便的)解决方法:

  1. 首先,在钥匙串访问中手动创建一个“安全注释”,其内容是私钥。
  2. 使用以下令人憎恶的行为:security find-generic-password -w -s "$SecureNoteName" | xxd -p -r | plutil -extract "NOTE" xml1 -o - - | xmllint --xpath '//string/text()' -

所以看起来我首先必须与钥匙串作斗争才能获得其内容,然后我必须与 plist 作斗争才能获得值...使用命令可以简化对 plist 的解析defaults,但我想避免将密钥写入临时文件,并且我无法获取从 stdin 读取的默认值。

答案1

检索密钥的相应命令是security find-key——至少在 2023 年的 macOS 13.4 Ventura 中有一个。根据您的示例,您可以使用获取私钥security find-key -t private -l FooBar

您提供的名称最初成为一个标签,并且您的命令创建了一个由私有和公共类型组成的对。

输出需要进一步更新才有用,例如 ssh。

keychain: "/Users/xyz/Library/Keychains/login.keychain-db"
version: 512
class: 0x00000010 
attributes:
    0x00000000 <uint32>=0x00000010 
    0x00000001 <blob>="FooBar"

相关内容