【问题标题】:Accessing KeyChain item from OSX Authorization Plugin从 OSX 授权插件访问 KeyChain 项
【发布时间】:2019-12-11 12:57:08
【问题描述】:

我在 FileVault 登录后尝试访问钥匙串项目,但我无法执行此操作。我已经看到类似的问题出现在 Error acessing keychain item from OS X authorization plugin 中,请帮助我解决这个问题,这已经从一个星期以来一直在苦苦挣扎。

【问题讨论】:

  • 似乎我们在同一条船上处理这个问题。我什至尝试使用 SecPKCS12Import 方法读取 .p12 文件,但它从 loginWindow 授权插件失败。如果你发现了什么,请告诉我。谢谢!

标签: macos cocoa


【解决方案1】:

我遇到过类似的情况,似乎非特权授权插件无法访问“系统”钥匙串。所以我提前创建了一个新的钥匙串,其中包含身份验证插件所需的项目。

// blabla is pw for keychain and blabla2 is pw for p12 file.
security create-keychain -p balboa /tmp/my.keychain
security unlock-keychain -p balboa /tmp/my.keychain
sudo -A security import /tpm/mycert.p12 -k /tmp/my.keychain -P blabla2 -A 

然后,通过授权插件,我成功地访问了钥匙串中的项目。在下面的伪代码中,我演示了如何根据颁发者从钥匙串中获取证书,但也允许任何其他访问钥匙串进行读取的方式。

SecKeychainRef myKeychain = nil;
SecKeychainOpen( "/tmp/my.keychain", &myKeychain);

NSString * keychainPassword = @"blabla";
SecKeychainUnlock(myKeychain, [keychainPassword length], [keychainPassword UTF8String], true);

CFArrayRef keychainToSearchIdentity = CFArrayCreate(kCFAllocatorDefault, (const void **) &myKeychain, 1, &kCFTypeArrayCallBacks);

const void *keys[] = {kSecMatchSearchList, kSecClass, kSecReturnRef, kSecMatchIssuers};
const void *values[] = { keychainToSearchIdentity, kSecClassIdentity, kCFBooleanTrue, mySearchCriteriaIssuers };


CFDictionaryRef searchItemDict = CFDictionaryCreeate(NULL, keys, values, 4 ,NULL, NULL);

SecItemCopyMatch(searchItemDict, &myIdentity);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-25
    • 2016-12-20
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多