Swift 4: kSecMatchIssuers keychain 搜索查询未能匹配 X.509 证书

Swift 4: kSecMatchIssuers keychain search query failing to match X.509 certificate

我有一个查询旨在在我的钥匙串中搜索身份,这样我就可以从我的 swift 应用程序中删除它。我需要能够由发行者匹配它,所以我在搜索查询中使用了 kSecMatchIssuers 键。 Apple 开发人员门户声明此与 kSecMatchIssuers 匹配:

The corresponding value is of type CFArray, where the array consists of X.500 names of type CFData. If provided, returned certificates or identities are limited to those whose certificate chain contains one of the issuers provided in this list.

我相信我遵循了这些准则,但仍然无法匹配身份,即使我在 "o=myOrg" 处将 x.500 名称缩减为准系统也是如此。

 let x500Name = "o=myOrg"

 let nameAsData = x500Name.data(using: .utf8)! as CFData


 let query: [String: Any] = [kSecClass as String: kSecClassIdentity,
                                 kSecMatchCaseInsensitive as String: true,
                                 kSecMatchLimit as String: kSecMatchLimitAll,
                                 kSecMatchIssuers as String: [nameAsData] as CFArray]

将查询作为 CFDictionary 放入 SecItemCopyMatching 时,return 值是一个代码,表示未找到匹配值。只需删除 kSecMatchIssuers 即可确保一切运行并在我的钥匙串中找到所有身份。对于我在这里错误传递的内容,我有点不知所措,因为钥匙串肯定包含 "o=myOrg" 的身份。

感谢任何帮助。

ASN.1 DER 编码

颁发者名称必须以 ASN.1 DER 编码格式提供。

请注意,kSecMatchIssuers 仅适用于 macOS 10.13。