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

mke*_*ser 5 security command-line keychain 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,但我想避免将密钥写入临时文件,并且我无法从标准输入中读取默认值。

小智 0

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

您提供的名称最初成为一个标签,您的命令创建了一个由 private 和 public 类型组成的对。

输出需要进一步更新才能用于 ssh 等。

keychain: "/Users/xyz/Library/Keychains/login.keychain-db"
version: 512
class: 0x00000010 
attributes:
    0x00000000 <uint32>=0x00000010 
    0x00000001 <blob>="FooBar"
Run Code Online (Sandbox Code Playgroud)