我像这样创建了一个密钥对:
security create-keypair -a dsa -s 4096 FooBar
现在我想从命令行访问此密钥以实际使用它(如果可能,以 .pem 格式)。但是,security
没有find-keypair
选项,我无法让任何其他find_...
子命令工作。有办法吗?
编辑:
现在我找到了一个(不方便的)解决方法:
- 首先,在钥匙串访问中手动创建一个“安全注释”,其内容是私钥。
- 使用以下令人憎恶的行为:
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"