.p12
或Keychain Access.app
中提取不可提取的私钥作为/usr/bin/security
文件。基本上,看来
security import
有一个-x
选项来指定private keys are non-extractable after being imported
。http://opensource.apple.com/source/SecurityTool/SecurityTool-55115/keychain_import.c
http://opensource.apple.com/source/Security/Security-55471.14/libsecurity_keychain/lib/SecImportExport.h
如上所述,这是通过在导入过程中显式省略
CSSM_KEYATTR_EXTRACTABLE
来实现的。随后,当尝试导出时,没有此类属性的密钥无法导出。我可以发现至少有两个相关的提及似乎阻止了此类密钥的导出(提示:请使用
fgrep -OR
避免遵循搜索Apple源代码时的符号链接):http://opensource.apple.com/source/Security/Security-55471.14/libsecurity_keychain/lib/SecImportExportCrypto.cpp
http://opensource.apple.com/source/Security/Security-55471.14/libsecurity_pkcs12/lib/pkcs12Crypto.cpp
我已经尝试从github.com/torsten进行keychain_access ,但它不起作用。
我尝试使用lldb
lldb -- security export -t identities -f pkcs12 -o /tmp/mycerts.p12
中断SecWrappedKeys.cpp :: impExpWrappedKeyOpenSslExport(),但对于break impExpWrappedKeyOpenSslExport
似乎也不起作用发出错误invalid command 'breakpoint impExpWrappedKeyOpenSslExport'
。我尝试使用DTrace跟踪Cisco AnyConnect,但是我对DTrace不够了解,无法显示数据结构。尝试重新编译他的Security和SecurityTool软件包,但是它们似乎都需要引导,而引导似乎没有就位。
#1 楼
通过研究对我的一个钥匙串子问题的答案,我已经找到了解决方案。https://stackoverflow.com/questions/25109994/non-extractable-
根据SecItem.h,此
kSecAttrIsExtractable
已在OS X 10.6中引入。http://opensource.apple.com/source/Security/Security-55471.14/libsecurity_keychain/lib/SecItem.h
因此,我已经尝试并成功完成了以下任务:
从OS X 10.9到OS X 10.5的
scp ~/Library/Keychains/login.keychain
在OS X 10.5上,按照手册页中的示例:
security export -k /tmp/login.keychain -t identities -f pkcs12 -o /tmp/mycerts.p12
security
应用程序将询问您几个密码:第一个对话框中的新密码是为了保护正在导出的p12;
第二个对话框中一个是
login.keychain
密码,通常与密钥链文件所来自的原始OS X 10.9上的用户登录密码相同。scp /tmp/mycerts.p12
ba从10.5 ck到OS X 10.9 #2 楼
我发现了使用断链器叉的更简单方法。它适用于MacOS 10.14 Mojave。在此处查看完整说明。对于我而言,我执行了以下操作:
$ pip2 install hexdump pycrypto pyopenssl
$ git clone https://github.com/gremwell/chainbreaker.git && cd chainbreaker
$ python2 chainbreaker.py -f ~/Library/Keychains/login.keychain-db -p <PASS>
$ openssl x509 -inform DER -in exported/associated/1/*.crt -out secret.crt
$ openssl rsa -inform DER -in exported/associated/1/*.key -out secret.key
$ openssl pkcs12 -export -out secret.p12 -inkey secret.key -in secret.crt
然后secret.p12可以导入另一个机器。